На каких языках реализованы функции функционального программирования? - PullRequest
1 голос
/ 16 сентября 2008

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

Некоторые языки, такие как JavaScript, адаптировали базовые функции, такие как сборка мусора и лексические замыкания, но все вещи, которые могут реально изменить способ написания программ в больших масштабах, такие как мощные макросы, код для данных и пользовательский элемент управления структуры, кажется, распространяются только в других функциональных языках, ни один из которых не является практичным для использования в нетривиальных проектах.

Сообщество функционального программирования также выдвинуло много других интересных идей (помимо самого функционального программирования), таких как ссылочная прозрачность, обобщенные выражения падежа (т. Е. Сопоставление с образцом, а не искажение, как переключатели C / C #) и карри функции, которые кажутся очевидными полезными в обычном программировании и должны легко интегрироваться с существующей практикой программирования, но по некоторым причинам, кажется, застряли в академическом мире навсегда.

Почему этим функциям так сложно адаптироваться? Существуют ли какие-либо современные, практичные языки, которые на самом деле учатся на Лиспе вместо того, чтобы наполовину копировать «функции первого класса», или существует внутренний конфликт, который делает это невозможным?

Ответы [ 16 ]

20 голосов
/ 16 сентября 2008

Существуют ли современные, практичные языки, которые на самом деле учатся у Лисп вместо того, чтобы наполовину копировать "функции первого класса", или есть врожденный конфликт, который делает это невозможно

Почему не lisp, haskell, ocaml или f # современные?

Возможно, вам просто нужно взять это на себя, посмотреть на них и понять, что они более надежные, с такими библиотеками, как java, тогда вы подумаете.

Многие функции были перенесены с функциональных языков на другие языки. Но наоборот - (некоторые) функциональные языки имеют объекты, например.

8 голосов
/ 17 сентября 2008

Не существует известной корреляции между языком, «завоевывающим популярность», и наличием у него мощных, хорошо изученных, хорошо разработанных функций.

Много было сказано по этому вопросу. Он существует повсеместно в технологии, а также в искусстве. Мы знаем, что художник А имеет большую подготовку и производит работы большей ширины и глубины, чем художник Б, однако художник Б гораздо более успешен на рынке. Это потому, что есть дух времени? Это потому, что у художника Б лучше маркетинг? Это потому, что большинство людей не поймут время, чтобы понять художника А? Может быть, художник Б тайно ужасен, и мы должны не доверять экспертам, которые выносят суждения о художниках? Наверное, все вышеперечисленное в той или иной степени.

Это сводит с ума людей, которые изучают искусство, и людей, которые изучают языки программирования.

8 голосов
/ 17 сентября 2008

Я предлагаю вам попробовать Clojure . Синтаксически красивый диалект, функциональный (в смысле ML) и быстрый . Вы получаете неизменяемость, программную транзакционную память, управление многовариантным параллелизмом, поддержку REPL, SLIME и неисчерпаемый FFI. Это Lisp (и Haskell) для бизнес-программиста. Я прекрасно провожу время, используя его ежедневно на своей реальной работе.

8 голосов
/ 16 сентября 2008

Scala - это классный функциональный / OO-язык с сопоставлением с образцом, функциями первого класса и тому подобным. Он имеет преимущество компиляции в байт-код Java и хорошо взаимодействует с кодом Java.

7 голосов
/ 16 сентября 2008

Common Lisp, используемый в реальном мире, хотя и не так, как мне кажется.

6 голосов
/ 16 сентября 2008

Python или Ruby. См. мысли Пола Грэма об этом в вопросе «Мне нравится Лисп, но моя компания не позволяет мне его использовать. Что мне делать?».

5 голосов
/ 17 сентября 2008

Erlang недавно получил новую известность не только благодаря использованию Twitter, но и благодаря появлению сообщений и реализаций, управляемых XMPP, таких как ejabberd. В нем воплощены многие идеи, вытекающие из функционального программирования, являющегося языком, разработанным с учетом этого. Изначально использовался для запуска телефонных коммутаторов и был разработан Эриксоном для запуска первых сетей GSM. Он все еще существует, он полностью функционален (как язык) и используется во многих производственных средах.

5 голосов
/ 16 сентября 2008

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

C # является более распространенным явлением, чем Scala, но в нем также реализовано меньше таких функциональных возможностей. LINQ - это ограниченная реализация обобщенных списков Wadler, и все знают о лямбдах. Но при этом C # (по праву) остается немного консервативным в освоении исследовательских функций из академического мира.

3 голосов
/ 16 сентября 2008

Lua.

Он используется в качестве языка сценариев / расширений для ряда игр (например, World of Worcraft) и приложений (Snort, NMAP, Wireshark и т. Д.). Фактически, по словам разработчика Adobe, Lightroom от Adobe составляет более 40% Lua.

Ребята из Lua неоднократно указывали Scheme и Lisp как основные факторы, влияющие на Lua, а Lua даже описывался как Scheme без скобок.

2 голосов
/ 19 октября 2008

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

Потому что люди, которые управляют разработчиками программного обеспечения, - это не те люди, с которыми вы можете иметь интересный чат, сравнивающий различные языковые функции. Около 2000 года я хотел использовать LISP для реализации преобразований XML-в-HTML на нашем корпоративном веб-сайте (это примерно в то время, когда Amazon внедряет свой бэкэнд в LISP). Я не дошел до. Это немного иронично, потому что компания, в которой я работал, создала и продала Common LISP environment .

...