@benoni
программер-любтель, иногда подрабатываю фрилансом

Несколько вопросов по Scheme и языкам функционального программирования?

Заинтересовался изучением функциональным программированием. В частности интересуют языки Scheme, Clojure, Erlang и Scala. Также часто слышал, что наиболее мощный ФП язык - хаскель, но подозреваю, что он достаточно сложен для новичка. Поэтому возникли следующие вопросы:

1. Какой из функциональных языков проще всего для изучения? Scheme подойдет?

2. Каковы области применения Scheme (кроме академического и fu-script для GIMP'а)? И какие диалекты Scheme наиболее популярны-актуальны, кроме Racket?

3. Clojure, Erlang, Scala - какой из них более популярен в девелопменте, в частности под веб?

4. Насколько часто применяется функциональная парадигма в Python? или питон все-таки объектно-ориентирован на столько, что функциональную парадигму в нем обычно не применяют?

Какую функциональщину вы бы посоветовали новичку в данной области?
  • Вопрос задан
  • 3615 просмотров
Решения вопроса 3
@bromzh
Drugs-driven development
Смотря какую цель ты ставишь перед собой. Обычно подбирают инструмент под задачу, а не наоборот. Изучать ради изучения - не самая лучшая идея. Но знать основы функциональщины никогда не повредит.
Да и важно понимать, что в функциональном стиле можно писать практически на любых языках, а не только на чисто функциональных.

1) Схема очень проста, но непривычна. Прочитай SICP, отличная книга по программированию в целом.
2) Почти никаких. Так уж вышло, что она не особо популярна в прикладных областях. Ну а в самом Racket можно выбирать разные диалекты, посмотри там.
3) Эрланг, в силу устройства самой платформы, отлично подходит для быстрых асинхронных сетевых приложений (и никакого коллбечного ада). Для скалы есть хорошие веб-фреймворки: Play 2, Lift, etc. Для кложы не так много, но последние 2 - это JVM, соответственно, можно использовать многие Java-либы.
4) Питон никуда не ориентирован. Что мешает комбинировать разные парадигмы? Просто в питоне всё есть объект. Это облегчает ООП, да. Многие типы данных там мутабельны. Но и функциональный подход там тоже часто применяют (декораторы, например - частое явление). Map'в и reduce'ы тоже присутствуют, плюс, есть целый пакет functools. И numpy.

В общем, почитай SICP =)
Ответ написан
@iamnothing
Может не совсем по вопросам отвечу:
из этого списка изучал Clojure и Scala, ну и Racket немного. Оба вполне годные для повседневного применения. Оба JVM-hosted языки. На Clojure вполне можно писать как web, так и на Android. На Scala пытался что-то по Web ковырять. Советую оба, ну или любой из них.
Ответ написан
@potan
Функциональный программист
Scheme используется в "Инфосистемах Джет" - на ней (Racket) написан один из продаваемых ими продуктов. Но сейчас там больше используют Scala. Еще я видел примеры скриптов для какого-то САПРа для микроэлектроники (в распечатке руководства приводились примеры на TCL и Scheme). Есть достаточно пощный форматер SGML (и XML) - DSSSL с входным языком, близким к Schema.
Пожалуй это все, что можно сказать про Scheme. Язык очень приятный, но учить его можно только just for fun или чтения SICP. Применить на практике врядли удасться.

У Erlang есть достаточно специфическая область - телеком. Так же его активно применяют для распределения видеопотоков. Есть мощные фреймвоки для web, например Zotonic. Почему он мало применяется в других областях (он бы хорошо подошел для робототехники и корпоративных приложений) я не понимаю.

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

Про Clojure слышал про ее применение в анализе данных. Но язык приятный и может быть применен вместе с Java (или даже со Scala).

Еще стоит обратить внимание на F#. .NET платформа активно развивается, а этот язык мощный и не слишком сложный.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы