Заметки о F#. Часть 0: введение

среда, 27 января 2010, Yuriy Bogomolov

Итак, сначала я хочу сказать пару слов о функциональном программировании вообще. Функциональное программирование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в их математическом понимании. То есть, в грубом обобщении, вся программа является функциональной зависимостью результата от входных аргументов:

program = f(args)

Императивных стиль программирования описывает алгоритм — последовательность шагов, которые необходимо выполнить для достижения цели. Функциональный стиль программирования (да и мышления в целом) подразумевает описание математической зависимости между данными и целью.

Второе, что нужно помнить о «классическом» ФП — это неизменяемость данных. В так называемых «чистых» функциональных языках вроде LISP или Haskell переменных как таковых нет — все данные являются неизменяемыми; в результате применения данным какой-либо функции мы получаем новые данные. То, что можно принять за переменные (забегая наперед: выражения вида let x = 1) — это просто синтаксический сахар и возможность временного хранения неизменяемой ссылки на результат вычислений.

Третье. Вызов функции с одними и теми же аргументами дает один и тот же результат. Данный подход гарантирует то, что результат вызова функции будет независим от внешних обстоятельств.

Четвертое, что начинающим бывает сложно понять: модель вычислений без состояний. Поскольку у нас нет переменных, то и хранить текущее состояние программы попросту негде. Т.е., всё, что у нас есть — это определенное множество функций; алгоритм «конструируется» путем определенного их вызова и передачи результатов одних функций в качестве параметров других.

Наиболее известными языками функционального программирования являются:

  • Haskell;
  • LISP (и множество его потомков, наиболее современные из которых — Scheme и Common Lisp);
  • ML (из ныне используемых диалектов известны Standard ML и Objective CAML);
  • Miranda (который впоследствии дал развитие языку Haskell);
  • Erlang — (функциональный язык с поддержкой процессов, разработка компании Ericsson);
  • Nemerle — гибридный функционально/императивный язык с возможностью метапрограммирования.


В этом небольшом цикле статей я хочу рассказать о последней разработке Microsoft — языке F#. У меня есть небольшой опыт работы с Common Lisp (благодаря университетскому курсу ФП) и Haskell (а это уже — по собственной инициативе). F# для меня не нов, но до написания чего-либо серьезного руки не доходили. В этом цикле статей я сам буду изучать F# и писать о его плюсах, минусах и интересных сторонах. В частности, я постараюсь затронуть тему вызова F# из ASP.NET и постараюсь в качестве примера написать что-либо прикладное на F#.

Буду благодарен за критику и пожелания, что вы хотели бы видеть в следующей статье.

Компании из статьи


Microsoft Украина


Сайт:
http://www.microsoft.com/ukr/ua/

Microsoft Украина Украинское подразделение компании Microsoft.

Ищите нас в интернетах!

Комментарии

Свежие вакансии