Уроки программирования на 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. Также поделитесь, используйте ли вы функциональные языки программирования в работе? Преподавали ли вам функциональное программирование в вузе? Мне будет интересно услышать, насколько знакома аудитория моих читателей с функциональным программированием!