Блог им. nikita +329.20

ФЯП

Расскажите-ка мне про функциональные языки программирования.
Что в них интересного, сложно ли изучить, стоит ли вообще с ними связываться?
  + 1 -    8 июля 2010, 17:31     nikita     

Комментарии Фильтр

1
+ -
(define не-сложно (lambda x (print x)))

(не-сложно «учи Scheme»)
1
+ -
Интересного в них — подход к решению задачи. Он совершенно иной, и изучать его имея уже опыт программирования в императивном стиле, на мой взгляд, сложнее, чем если изучать ФЯП с нуля.
Так или иначе все будет сводиться к «формулировке» задачи на языке задачи. Т.е. в ФЯП ты имея некие примитивы на руках строишь из них новый язык, на котором твоя задача описывается легко и естественно. Разумеется есть много готовых библиотек.

Однако, основная, на мой взгляд, проблема все без исключения ФЯП — отсутствие УДОБНОЙ среды разработки. Все остальное с ФЯП полный порядок. Другой вопрос — зачем с ними связываться? Опять же — большинство задач вполне себе удобно решать в императивном стиле. Но мастер тем и отличается, что на каждую задачу он подбирает наиболее подходящий инструмент. К чему я клоню понятно, ФЯП не всемогущи, но для определенных задач подходят гораздо лучше, чем языки императивные.
1
+ -
Если решил поизучать, то лучше начинать с Scheme.

Во-первых он достаточно скромен и прост в плане синтаксиса (я бы сказал удивительно прост — основное правило — любое выражение нужно заключать в скобки — см. коммент выше :) ).
Во-вторых язык этот семейства Lisp и переходить на более «крутых» собратьев потом будет проще.

Отдельной строкой напишу про Haskell — да он адово крут, но для его изучения самому надо быть адово крутым (в большинстве случаев достаточно имень Н-ое количество бабла, что бы нанять того самого «адово крутого» и это будет круче и практичне… хм, увлекся).
-1
+ -
Начал все же с OCaml, нравится.
Потом уже перейду к Erlang и Scheme :)
1
+ -
Нахуа? :)
1
+ -
Erlang не понятно где использовать. По крайней мере для одного человека — слишком серьезная штука, что бы хоть как-то из этого выгоду получать.

OCaml — на мой взгляд не камильфо, могу ошибаться.
1
+ -
> Erlang не понятно где использовать.
Сервера писать, например :)
Хотя он пока действительно мне не особо и нужен, но будет интересно повозиться.

> OCaml — на мой взгляд не камильфо, могу ошибаться.
Вроде ничего так. Он мультипарадигменный, можно писать в императивном стиле, и даже есть ООП :)
Но в то же время присутствуют: а) понятный и отличный туториал для C++ и Perl-программистов б) все «красивости» функциональных языков — замыкания, лямбда-выражения, ленивые вычисления, карринг, и прочее и прочее.
По крайней мере, мне он показался нормальным, хотя я еще толком не смотрел Лисп… :)
1
+ -
>Сервера писать, например :)
Нет, где его применять можно, я в курсе. Не понятно что с ним делать фриленсеру, например :)
1
+ -
> Не понятно что с ним делать фриленсеру, например
Ну я Эрланг и прочие непопулярные языки и не с этой позиции рассматриваю. Выгоду напрямую оно может и не принесет — но зато расширит кругозор, что всегда полезно.
Кормят-то меня исключительно PHP и JavaScript, но кроме них мне очень нравится, к примеру, Python — хотя я им пока не заработал ни копейки :)
1
+ -
И то верно.

Ну, расскажешь потом о впечатлениях :)
1
+ -
Спустя полгода — рассказываю о впечатлениях.

Erlang настолько крут, что даже Node.js остается только сосать петушки. :)

Scheme — прекрасен, но пока до практического применения я не дошел.

Ruby — сочетает в себе качества Лиспа и Smalltalk. Тормозит. :) Но для гибкой веб-разработки в ее нынешнем, не-асинхронном виде еще ничего лучше Rails не придумали. А для асинхронного будущего есть Node.js, Erlang и диалект Лиспа — Clojure.

Python — для меня уже выглядит немного серо на фоне всех вышеперечисленных. Тем не менее, для GUI из кроссплатформенных языков по-моему пока нет ничего лучшего.

Вот эти 4 на ближайший год — мои фавориты, покрывающие 90% потребностей.
PHP остается забыть как страшный сон. :)
1
+ -
Сам все еще учу Lisp. Пока что не достиг необходимого просветления. С лета начну разбираться с Erlang. Кстати, видел примеры использования Node.js — у меня реально стоял. Если все как ты пишешь, то Erlang должен вызвать космический оргазм :)

Посоветуй по Erlang литературу годную, что ле :)
1
+ -
Пока читаю Programming Erlang, хорошая книга.
И я только сегодня его начал учить — а уже доставляет в огромных масштабах. :)

В чем я вижу плюсы Node:
1) Знакомый язык — JavaScript.
2) V8 — очень быстрая виртуальная машина от Гугла.

И чем по-моему хорош Erlang:
1) Функциональная природа и вселяющий ужас синтаксис. Вот, к примеру, классическая функция map:

map([Head|Tail], Fun) ->
[Fun(Head)|map(Tail, Fun)];
map([], _) ->
[].

map([1, 2, 3], fun (Item) -> Item * 2 end) # [2, 4, 6]


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

Нода имеет все шансы стать мэйнстримом. Но на Эрланге пишут системы управления поездами метро, а на Ноде — преимущественно веб-сервисы. :)
1
+ -
Пасибки :)
1
+ -
Еще обнаружил zotonic.com/ — кто-то извратился, и написал на Эрланге целую CMS :)
Выглядит интересно.
1
+ -
> Посоветуй по Erlang литературу годную, что ле
learnyousomeerlang.com/
Примеры доставляют море удовольствия. :)
1
+ -
Еще там очень милые иллюстрации:
1
+ -
Ах да, сам язык — гениален.
1
+ -
Ну я бы не был столь категоричен. Он местами коряв до безобразия. Местами устарел :(

В целом очень не плохо. Там основной смак в возможностях VM.
1
+ -
Ну, платформа — тоже вполне себе часть языка — кому нужен C# без .NET или Java без JVM?
А сам язык — да, архаичен (и не представляет из себя что-то особенное — тот же Хаскель на голову выше) — многое утянуто из Пролога 40-летней давности, да и самому Эрлангу 25 лет уже.
А (почти) гениальным сочетание языка и платформы я считаю из-за простейшей конструкции Pid! Message, которая позволяет строить кластеры любого масштаба без лишнего труда.
Это не говоря уже о работающей горячей замене кода. Обновление живой системы двумя командами git pull & make upgrade — это очень, очень круто. :)
1
+ -
Вот именно.
1
+ -
Oh shi~~
Scheme (Racket) достучался до моего сердца :)
Прекрасный язык. К черту Ocaml :))
1
+ -
Вообще-то я тебе о чем и говорил. В любом случае, пока что для начала нужен не механизм, а удобство и простота, что бы понимание пришло :)
1
+ -
Чем пользуюсь я.

По маленьку — всем. Когда есть время, я стараюсь что-нибудь изучить, а не сделать, что бы знать потом что можно, а чего низя (а это куда важнее самого навыка создания).

Вот наборчег:

DrScheme
LispWorks
GHCi
WinHugs

— Сайты у меня в закладках, которые я иногда посещаю:
www.daansystems.com/
lisper.ru/
lisp.ru/

— (print 'Удачи)
1
+ -
Да, забыл еще сказать — мой любимый SQL — чистой воды ведь ФЯП! :)
1
+ -
И еще: www.call-cc.org/
1
+ -
Да, видел. Но мне как-то swingle до сих пор хватает. :)
Только авторизованные пользователи могут оставлять комментарии. Авторизируйтесь, пожалуйста.

Теги ↓

30 дней ночи 65daysofstatic Action air Annoying Orange c deftones Demigod fail freegeo Giraffe google holy war id software Live Lost mario music RPG tele-club vkontakte who is it? Win yoav YouTube Анимация аниме баг бангкок вампиры вин вокруг света Вопрос гениально Говно Джапонцы дизайн дополненная реальность Заебали теги игры идеи интернет искусство камбоджа Кино кино-говно классика книги комикс концерт короткометражное кино лайфхаки литература Люблю теги музыка мультики Наркота наркотики непорно новости обложка образование онгоинг Офигенчик переезд политика порно проверка программирование проплачено Путешествия Реклама релиз рецензии ржака Сериал Сериалы сиквелы сиськи списки Ссылки стамбул страны таиланд тег теги Терри Гиллиам технологии Тим Бартон топы трейлеры Ужасы фильм Фильмы фичи Фотоальбом фэнтези хоррор хостинг Хуита Хуй Эротика Юмор я кончил восемь раз япония
© 2009 — 2011 FreeGeo