Какие очень большие проекты с функциональными языками доступны?
Начнем с того, что я фактически продаюсь на "всей функциональной языковой вещи". Мне приходит в голову, что в течение многих лет я занимался главным образом функциональным программированием на Java. Но я немного теряю, как начать большое функциональное приложение. Я хотел бы увидеть источник и построить структуру большого проекта (OSS или что-то еще), чтобы я мог видеть, как модульность лучше всего обрабатывать в такой среде.
Контекст моего вопроса заключается в том, что я хочу запустить большой проект JVM, и сейчас я думаю о выборе сочетания Java/ Groovy или Scala/Groovy. Я не хочу идти с миром Scala/Groovy, если я не пойду в функциональном направлении, потому что мне не нравится Scala для программирования OO (совершенно другая тема). Это означает, что вы избегаете таких вещей, как каркасы DI, AspectJ и т.д. (Я знаю, что могу эмулировать/выполнять/одобрять эти вещи с функциональным программированием... но это не имеет значения здесь.) Я обеспокоен тем, что отсутствие очень больших общедоступных проекты, использующие эти языки, объясняются общим доводом о том, что они действительно бедны для крупных проектов, что было бы настоящим позором...
Итак, я спрашиваю, какие крупные проекты fp (скажем, 20K + строк) вы следуете? Я был бы очень рад услышать о любом запуске на языке JVM. Особенно, если вы чувствуете, что они эффективно обрабатывают модульность.
Ответы
Ответ 1
В эти дни я пытаюсь найти Erlang, на что влияет Scala. Мне нравится изучать исходный код yaws, который является высокопроизводительным http-сервером, и Wings 3D, разработчик подразделения. Очень образованный, лучший способ изучить новый язык - прочитать его.
Ответ 2
Распределенная система управления версиями darcs является чистым haskell, то есть чистым и ленивым fp. По строкам кода это может показаться не большим проектом, но имейте в виду, что синтаксис haskell очень плотный.
Ответ 3
В Emacs есть много Lisp, но написано в очень императивном стиле. GHC - это большой проект, написанный в Haskell, и, конечно, компилятор OCaml и т.д., Написаны в OCaml.
Ответ 4
В Scala есть две большие операции с открытым исходным кодом, о которых я знаю: Lift и ESME (Apache Incubator).
Хотя кажется, что новый язык, связанный с Google Noop, написан в Scala до сих пор. Это может измениться, когда Noop станет достаточно стабильным, чтобы скомпилировать себя.
Ответ 5
Xmonad - это оконный менеджер, написанный в Haskell, у них очень подробный tutorial для написания расширений.
Ответ 6
Он написан в OCaml и поэтому не запускается на JVM,
но Frama-C - это проект на 200000+ линий
структура статического анализа для C с архитектурой подключаемого модуля.
Frama-C использует динамическую загрузку native
где доступно, но плагины также могут быть загружены
динамически, как байт-код или связанный статически, если вы хотите
перекомпилировать все это.
Дополнительная информация, включая исходный код, http://frama-c.com/.
Учитывая характер вашего вопроса, вы также можете оценить
эта статья в ICFP 09
Ответ 7
Scala/Подъем:
Novell Vibe: http://vibe.novell.com/
Автор: twitter.com/djspiewak
Clojure:
Clj/Sys - Сеть машинного обучения
Автор: twitter.com/bradfordcross
Clojure
Раунд-прогнозная рамочная система для отказа от корзины
Автор: Амит Ратхор (Clojure в действии)
Ответ 8
Я знаю большие порции Emacs и в основном все Maxima записаны в Lisp. Они не работают в JVM, но они являются главными примерами, которые я могу придумать для больших, хорошо зарекомендовавших себя и широко используемых и оцененных приложений, написанных на функциональном языке.
Ответ 9
Citrix выпустила инструментарий Xen API в качестве открытого программного обеспечения здесь в прошлом году. IIRC, то есть сотни тысяч строк кода OCaml, который был разработан 18 разработчиками с 2006 по 2010 год.
Согласно эта страница:
-
MLDonkey peer-to-peer-клиент равен 171kLOC кода OCaml.
-
Unison - 24kLOC кода OCaml.
-
FFTW - это 14kLOC кода OCaml.
-
Hevea - 12kLOC кода OCaml.
-
Darcs составляет 25kLOC кода Haskell.
Я обеспокоен тем, что отсутствие очень крупных публично видимых проектов с использованием этих языков объясняется общим доводом о том, что они действительно бедны для крупных проектов, что было бы настоящим позором...
Наоборот, мы обнаружили, что OCaml намного лучше подходит для крупных проектов, в которых доминируют такие языки, как Java или С#, где невозможность выражать продуктивные высокоуровневые аспекты кода приводит к обширным проблемам с вырезанием и вставкой и обслуживанием. На самом деле, мне в настоящее время приходится переписывать миллионы строк С++ в F # именно потому, что обслуживание стало непомерно дорогостоящим.
Ответ 10
Koders, Поисковая система с открытым исходным кодом могла бы помочь, поскольку она позволяет вам искать на языках программирования.
Ответ 11
В Lisp есть несколько очень больших и старых проектов:
http://www.pchristensen.com/blog/lisp-companies/