Реальная реализация функционального программирования в реальном мире? [закрыто]

9

Я пытаюсь познакомиться с разными типами языков, чтобы понять области, в которых каждый из них чрезвычайно хорош. До сих пор я изучал C - процедурный язык, C ++ и java - объектно-ориентированные языки со статической типизацией и groovy - объектно-ориентированный язык с динамической типизацией.

Каждый язык программирования, вероятно, был начат, чтобы удовлетворить потребность. И я предполагаю, что каждый язык чрезвычайно хорош по крайней мере в одной вещи, из-за которой он становится стандартом в определенной области или области. Как и C, C ++ стал стандартом в таких областях, как разработка браузеров или игр. Python в мире Linux за простоту написания сценариев, Java в корпоративном мире и т. Д.

Теперь мне интересно изучать функциональный язык программирования, такой как Clojure или Lisp. Итак, где функциональные языки программирования используются в реальных сценариях? Я не думаю, что можно было бы использовать Clojure или Lisp для разработки приложений или интерфейсов. Итак, каким проектам я должен заниматься после прохождения основных руководств и учебных ресурсов, чтобы получить краткое представление о реализации функционального программирования? И вы настоятельно рекомендуете на одном языке в частности, как, скажем, clojure?

Вамси Эмани
источник
5
«И я предполагаю, что каждый язык чрезвычайно хорош, по крайней мере, в одной вещи, из-за которой он становится стандартом в определенной области или области». Это обычно не так. Думать, что языки как-то «специализированы», опасно. У некоторых языков есть свои ниши, но это не совсем так.
S.Lott
6
«Не знаю как и с чего начать». Что мешает вам начать с учебников? Можете ли вы объяснить, почему учебные пособия для этих языков не являются полезными или полезными?
S.Lott
«C ++ и Java» имеют очень, очень мало общего друг с другом.
DeadMG
Могу ли я рассказать вам, что действительно заинтриговало вас изучать Clojure или Lisp, кроме причины, по которой они следуют парадигме функционального программирования?
Максуд
3
Когда вы говорите «в реальном времени», вы имеете в виду «реальный мир» случайно? Казалось бы, это имеет немного больше смысла в контексте этого вопроса.
сентября

Ответы:

13

Вы говорите, что в реальном мире функциональное программирование, я думаю, Erlang.

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

http://www.erlang.org/

Роберт Харви
источник
3
+1 Корректо! Кроме того, я хотел бы добавить, что для начинающих в функциональной стране самым «чистым» функциональным языком был бы Haskell :)
yati sagade
5

В Стэнфордском университете есть отличная серия лекций по функциональному программированию. Вы можете проверить их на YouTube.

Я бы посоветовал вам изучить схему, а не LISP. Схема является модифицированной версией Лисп с дальнейшими улучшениями. Схема в основном используется для академических и учебных целей. Это отличный язык, если вы любите заниматься наукой о торических компьютерах.

Приложения :

В Google App Inventor для Android используется схема, где Kawa используется для компиляции кода схемы до байт-кодов для виртуальной машины Java, работающей на устройствах Android. Elk Scheme используется Synopsys в качестве языка сценариев для своих инструментов CAD (TCAD).

К вашему сведению: использование схемы

Maxood
источник
Интересно, может ли вам помочь этот вопрос: programmers.stackexchange.com/questions/25056/…
Maxood
1
И есть эта (бесплатная! И онлайн!) Книга LISP: gigamonkeys.com/book В ней рассматриваются «практические» проекты, такие как анализатор тегов ID3, веб-программирование и фильтрация спама.
FrustratedWithFormsDesigner
5

Брайан О'Салливан, основатель mailrank.com (который был приобретен Facebook), построил всю серверную часть этого программного обеспечения в Haskell. Об этом он рассказал на Strange Loop 2011, видео и слайды доступны онлайн.

Тот же парень написал книгу под названием Real World Haskell . Несколько человек упомянули учебники по программированию. Это может быть вполне соответствует вашим интересам (мне также нравится предложение Эрланга).

Barend
источник
4

От друзей по финансам я знаю, что количественная торговая фирма Джейн Стрит использует OCaml для реализации своих торговых стратегий. У них есть страница, где они говорят о причинах, а также ссылки на разговоры на эту тему.

Джефф Оксберри
источник
2

Вот список историй успеха Common Lisp:

http://wiki.alu.org/Industry%20Application

http://www.franz.com/success/

http://www.lispworks.com/success-stories/index.html

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

И коммерческий проект на Python, над которым я сейчас работаю, в конечном итоге будет дополнен сервисами, написанными на lisp (RESTAS, как следует из его названия, отлично подходит для сервисов RESTful).

Павел Пенев
источник
1

Я бы предложил погрузиться в компиляторы (как для языков общего назначения, так и для DSL) - именно здесь функциональное программирование является лучшим. Будет много интересных и полезных вещей для изучения, от ADT и сопоставления с образцами на одной стороне спектра до макросов Lisp на другой стороне.

SK-логика
источник
0

Возможно, вы захотите взглянуть на Юма .

Со страницы языка программирования Hume :

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

Со страницы Википедии Юм :

Hume - это язык программирования на функциональной основе, разработанный в Университете Сент-Эндрюса и Университета Хериот-Ватт в Шотландии и названный в честь философа 18-го века Дэвида Хьюма. Он нацелен на встраиваемые системы реального времени, стремясь создать дизайн, который является в высшей степени абстрактным, но в то же время позволяет точно извлекать затраты времени и пространства на выполнение, что позволяет писать программы, которые будут выполняться при гарантированных ограниченных ограничениях времени и пространства.

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

Марк Бут
источник