Заметки о F#. Часть 0: введение
Итак, сначала я хочу сказать пару слов о функциональном программировании вообще. Функциональное программирование — раздел дискретной математики и парадигма программирования, в которой процесс вычисления трактуется как вычисление значений функций в их математическом понимании. То есть, в грубом обобщении, вся программа является функциональной зависимостью результата от входных аргументов:
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 Украина | Украинское подразделение компании Microsoft. |