Подтвердить что ты не робот

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

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

Какие языки функционального программирования доступны или находятся в разработке для JVM?

4b9b3361

Ответ 1

Возможно Clojure. Он не статически типизирован, но имеет больше акцента на неизменность и concurrency, чем F #. Однако, как и F # (и в отличие от Common Lisp), он должен быть главным функциональным языком, который хорошо потребляет библиотеки OO с базовой платформы.

Ответ 2

Scala будет языком.

Хотя не строго функциональный (это сочетание функциональных и объектно-ориентированных), и это не строго для Java (есть .NET версия Scala), который был бы самым близким аналогом F # в JVM.

Ответ 3

Первое, что пришло мне в голову, было Scala, но действительно Ocaml-Java приближается, поскольку F # является вариантом Ocaml. См. этот пост, который сравнивает Ocaml-Java с Scala:

Программисты OCaml обычно более чем в 10 раз эффективнее, чем Java или С++ программистов для широкого круга практических задач. Несмотря на то, что в основном платформа OOP, F # дает долгий путь для сбора данных о производительности, повышая преимущества OCaml (и всего семейства ML). Напротив, Scalaне может захватить многие из преимуществ, включая некоторые действительно основные, и, следовательно, писать правильный код намного сложнее в Scala, чем в любой реальный ML.

Кроме того, семейство языков ML должно быть кратким, но Scalaбесполезно многословно для всего: "Привет, мир!". вверх. Семейство ML языков обеспечивают обширный тип вывода (OCaml больше, чем большинство), но Scala имеет только рудиментарный вывод путем сравнения. OCaml необычно выразительная система типов, но Scala мало добавляет ООП, который имеет практическую значение.

Ответ 4

Теперь я бы сказал Scala. Но в будущем я бы посмотрел на Крепость. Первая реализация спецификации была выпущена 1 апреля 2008 года. И нет, это не шутка. Ключевые особенности:

  • Статически типизированный, но многозначный вывод, чтобы избежать беспорядка
  • Unicode и 2d рендеринг математических функций
  • Предназначен для параллельного выполнения (для каждого значения по умолчанию)
  • Сильная поддержка пользовательских библиотек (влияние Guy Steele)
  • Перегрузка оператора, включая оператор сопоставления

Дополнительная информация на Веб-сайт проекта Fortress Community и страница крепости Википедии.

Ответ 5

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

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

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

Cheers, Джон Харроп.

Ответ 6

Там есть хороший список языков программирования для JVM, включая парадигму функционального программирования и другие языки парадигмы:

  • en.wikipedia.org/wiki/List_of_JVM_languages ​​

Мой первый выбор - Scala (multi-paradigm; OO и FP). В 2009 году я провел более 5 месяцев обучения Scala и создал быстрый справочный лист: 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

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

Ответ 7

@Marc Gravell - функциональные языки все чаще используются в кишках финансовых систем корпоративного уровня. Мы используем много функциональных (чистых или "получистых" ) в банке, в котором я работаю...

Ответ 8

Между тем есть Frege, чистый функциональный, нестрогий язык в духе Haskell, который компилируется на Java, который затем скомпилирован далее с javac или компилятором eclipse, в зависимости от среды (командной строки или затмения).

Ответ 9

На самом деле, я могу ошибаться, но я не ожидаю, что F # будет как основной, как другие языки .NET; полезно в нескольких кругах (академические, компиляторы, несколько других сценариев) - однако не забывайте, что С# предлагает использование FP - и он становится все лучше: С# 1.2 имеет делегатов; С# 2.0 имеет анонимные методы и захватывает/закрывает; С# 3.0 имеет лямбды для простоты и выражение для абстракции. Анонимные типы (С# 3.0) разделяют некоторое сходство с кортежами (с точки зрения удобства), но, очевидно, очень разные звери, поэтому определенно не похоже на сравнение.

Возможно, не так оптимизирован, как F #, но для большинства повседневных прецедентов FP более чем достаточно.

Также совершенно ясно, что лучшая поддержка неизменяемости (особенно для потоковой передачи) очень важна для умения команды языка С# для будущего рассмотрения.

Мои деньги на С# улучшаются в FP и являются предложением .NET FP для большинства повседневных целей. Конечно, будет некоторое использование F # - но (чисто субъективное) я просто не вижу, что происходит огромная миграция.