Будет ли функциональный язык, который сделает для сообщества Java то же, что F# для сообщества .NET?
-
05-07-2019 - |
Вопрос
Будет ли функциональный язык, который сделает для сообщества Java то же, что F# для сообщества .NET?
Какие языки функционального программирования доступны или находятся в стадии разработки для JVM?
Решение
Возможно, Clojure . Он не статически типизирован, но в нем больше внимания уделяется неизменности и параллелизму, чем F #. Однако, как и F # (и в отличие от Common Lisp), он предназначен в основном для функционального языка, который хорошо использует OO-библиотеки из базовой платформы.
Другие советы
Scala будет языком.
Хотя он не является строго функциональным (это сочетание функционального и объектно-ориентированного) и не является строго для Java (существует .NET-версия Scala ), которая будет ближайшим аналогом F # в JVM.
Первое, что мне пришло в голову, это Scala , но на самом деле Ocaml-Java подходит ближе, так как F # - это вариант Ocaml. См. этот пост, в котором сравниваются Ocaml-Java и Scala : р>
Программисты OCaml, как правило, более чем в 10 раз производительнее, чем Java или C ++ программисты для широкого круга практических задач. Несмотря на то, что основано на В основном платформа ООП, F # имеет большое значение для повышение преимуществ OCaml (и всей семьи ML). В отличие от Scala не в состоянии охватить многие из преимуществ, в том числе некоторые действительно основные и, следовательно, написание правильного кода гораздо сложнее в Scala, чем в любой настоящий ML. Р>
Кроме того, семейство языков ML разработано, чтобы быть кратким, но Scala ненужно многословно для всего из " Hello world! " снизу вверх. Семья МЛ языков обеспечивает обширный вывод типов (OCaml больше, чем большинство), но В сравнении Scala имеет только элементарный вывод. OCaml имеет необычно система выразительных типов, но Scala мало добавляет к ООП, что имеет практическое значение значение.
Сейчас я бы сказал Scala.Но на будущее я бы присмотрелся к Fortress.Первая реализация спецификации была выпущена 1 апреля 2008 года.И нет, это не шутка.Ключевые особенности:
- Статически типизированный, но много вывода типа, чтобы избежать беспорядка.
- Юникод и 2D-рендеринг математических функций
- Предназначен для параллельного выполнения (для каждого это предусмотрено по умолчанию)
- Сильная поддержка пользовательских библиотек (влияние Гая Стила)
- Перегрузка операторов, включая оператор сопоставления
Более подробная информация на Веб-сайт сообщества Project Fortress и Страница Крепости в Википедии.
Вероятно, нет, потому что в JVM отсутствуют хвостовые вызовы, и они необходимы для обеспечения устойчивости почти всего функционального кода к использованию стека.
Ближе всего к реализации функционального языка в JVM являются Клоджур, Скала и OCaml-Java проект.Хотя существуют обходные пути отсутствия хвостовых вызовов (например.прыжки на батуте), ни одна из этих реализаций языка этого не делает, поскольку обходные пути создают еще более серьезные проблемы, например.снижение производительности и полностью запутанная отладка.
Sun уже много лет говорит о хвостовых вызовах, а совсем недавно заявила, что намерена реализовать их в ближайшее время.Я уверен, что как только это будет сделано, мы увидим намного больше языкового разнообразия в JVM и, в частности, некоторые реализации функциональных языков производственного качества.До тех пор я отношусь ко всем этим языкам как к игрушкам.
Ура, Джон Харроп.
Существует хороший список языков программирования для JVM, включая парадигму функционального программирования и другие языки парадигмы:
- en.wikipedia.org/wiki/List_of_JVM_languages
Мой первый выбор — Scala (мультипарадигмальный;OO & FP), я потратил более 5 месяцев на изучение Scala в 2009 году и создал краткий справочный лист:bchiprog.blogspot.com/2009/05/scala-cheat-sheet.html
Я заметил, что есть и другие интересные парадигмы программирования, ориентированные на параллельную обработку, такие как X10, Fortress и Chapel.X10 реализован поверх Scala — http://www.scala-lang.org/sites/default/files/odersky/scalaliftoff2009.pdf
На самом деле все зависит от того, какую проблему вам нужно решить, а затем выберите язык, который может ее решить лучше всего.Я думаю, что разработчики желают, чтобы существовал один язык, который мог бы легко и просто решать любые проблемы.
@Marc Gravell - функциональные языки все чаще используются в кишках финансовых систем корпоративного уровня. В банке, в котором я работаю, мы используем много функциональных (чистых или «полуочищенных»)
Между тем, существует Frege , чистый функциональный, не строгий язык в духе Haskell, который компилируется в Java, который затем компилируется с помощью javac или компилятора eclipse, в зависимости от среды (командной строки или eclipse).
На самом деле, я могу ошибаться, но я не ожидаю, что F # будет таким же распространенным явлением, как другие языки .NET; полезно в нескольких кругах (академический, компиляторы, несколько других сценариев) - однако, не забывайте, что C # предлагает использование FP - и это становится лучше каждый раз: C # 1.2 имеет делегатов; C # 2.0 имеет анонимные методы и захваты / закрытия; В C # 3.0 есть лямбды для простоты и Expression для абстракции. Анонимные типы (C # 3.0) имеют некоторое сходство с кортежами (с точки зрения удобства), но, очевидно, это очень разные звери, поэтому однозначно нельзя сравнивать.
Возможно, не так оптимизирован, как F #, но для большинства повседневных сценариев использования FP более чем достаточно.
Также совершенно очевидно, что лучшая поддержка неизменяемости (особенно для многопоточности) очень важна для команды по языку C # для дальнейшего рассмотрения.
Мои деньги на C # становятся лучше в FP и являются предложением .NET FP для большинства повседневных задач. Конечно, будет какое-то использование F #, но (чисто субъективно) я просто не вижу огромной миграции.