Будет ли функциональный язык, который сделает для сообщества Java то же, что F# для сообщества .NET?

StackOverflow https://stackoverflow.com/questions/169812

  •  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 #, но (чисто субъективно) я просто не вижу огромной миграции.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top