Уроки программирования на F#. Урок 0: Зачем нужен ещё один язык программирования?
Недавно было объявлено, что в составе стандартной поставки Visual Studio 2010 появится, помимо Visual Basic и C#, ещё один язык программирования: F#. Это, как можно догадаться по названию, язык преимущественно функционального программирования, берущий своё начало в языках OCaml, ML и т.д. Хотя кто-то мог ошибочно догадаться, что это реализация Fortran для .NET :)
Почему “преимущественно функционального”? Потому, что это также и объектно-ориентированный язык, прекрасно интегрирующийся с платформой .NET, и немножно императивный. Можно рассматривать F# как полноценное пришествие функционального программирования на платформу .NET (в смысле его индустриальной доступности), а можно и как еще один .NET-язык с множеством “причуд” и со странным, но очень компактным синтаксисом. Судите сами, вот как записывается на F# быстрая сортировка Хоара (для сравнения посмотрите, как выглядят алгоритмы, записанные на C или Pascal, по ссылке):
let rec quicksort = function
[] -> []
| h::t -> quicksort ([ for x in t when x<=h -> x])
@ [h] @ quicksort ([ for x in t when x>h -> x]);;
Зачем же Майкрософт начал в последние несколько лет вкладывать усилия в функциональный язык, да еще и ставить его в один ряд с “основными” языками платформы .NET? Ведь известно, что функциональное программирование не слишком используется в индустиальном программировании!
На то есть причины. В последнем выпуске Dr.Dobb’s Journal есть целая статья, посвященная этому вопросу. Одна из основных причин – функциональное программирование позволяет проще писать многопоточные приложения для многоядерных процессоров. Почему это так – мы рассмотрим в следующем уроке, где будем говорить о том, что же такое функциональное программирование. Кроме того, функциональные программы не допускают или минимизируют побочные эффекты, что увеличивает надежность программ и упрощает отладку. В целом можно сказать, что функциональное программирование позволяет нам писать в несколько раз меньше кода, но при этом заставляет больше думать. Если Вы любите работать головой, а не пальцами – обратите внимание на F# и на функциональное программирование. А я постараюсь вам помочь сделать это безболезненно, на русском языке.
Если же начать рассматривать F# с другой стороны, не вдаваясь в его функциональную сущность, то можно заметить, что это компактный язык, в котором есть в т.ч. автоматический вывод типов (нам почти никогда не приходится описывать типы данных для объектов) при статической типизации, в результате чего получается код, как на динамическом языке, но с проверкой типов и более эффективным порождаемым байт-кодом.
Майкрософт в реализации Visual Studio позиционирует F# как язык, удобный для решения различных задач обработки данных. В то же время не предполагается (хотя это и возможно), что F# будет широко использоваться для построения пользовательских интерфейсов, поэтому поддержки F# со стороны визуальных дизайнеров не обещается.
Всё вышесказанное вызывает значительный интерес к языку F# со стороны студентов, преподавателей и академического сообщества в целом. В то же время литературы по этому языку на русском языке пока нет. Я постараюсь в следующих постах рассказать про F# подробнее, чтобы вы могли познакомиться с языком и начать его использовать в учебных и исследовательских целях. Я также расскажу, где скачать и как установить F#, в т.ч. на платформы, отличные от Windows. Но – в следующий раз.
Сейчас же с удовольствием отвечу на ваши вопросы и приму пожелания по поводу того, о каких аспектах языка F# вы бы хотели услышать в первую очередь. Все это – в комментариях ниже, в группе вконтакте, или по электронной почте dmitryso(*)microsoft(*)com. Также поделитесь, используйте ли вы функциональные языки программирования в работе? Преподавали ли вам функциональное программирование в вузе? Мне будет интересно услышать, насколько знакома аудитория моих читателей с функциональным программированием!
Comments
Anonymous
February 07, 2009
Спасибо за начинание! Информации об этом интересном языке кругом довольно мало, а любой поиск в сети неизбежно приведёт к какому-нибудь "F#$& you"! ;-) Использую F# для решения задач с projecteuler.net, и, судя по всему, это как раз и есть основной use case. Собственно, отсюда сразу просьба рассказать о поддержке работы с большими целыми числами в F#. Кроме того, наверное, интересно было бы опубликовать список ссылок, где можно почерпнуть полезной информации. ЗЫ: на работе использую F# изредка, либо для написания микро утилиток, либо для проверки реализуемости той или иной функциональности под .net. В вузе функциональное программиорвание преподавали на примере ЛИСПа, правда недолго и многие интересности пришлось открывать самостоятельно.Anonymous
April 29, 2011
The comment has been removedAnonymous
July 15, 2011
Основным языком .net будет basic, как ни странно