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

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

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

Введение в одну из самых важных концепций в React - функциональное программирование
Введение в одну из самых важных концепций в React - функциональное программирование
React разработан с использованием концепции функционального программирования, поэтому понимание функционального программирования важно для изучения...
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Фото ️🔁 Radek Jedynak 🔃 on ️🔁 Unsplash 🔃
Что такое Java 8 Streams API? Java 8 Stream API
22
0
4 640
10
Перейти к ответу Данный вопрос помечен как решенный

Ответы 10

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

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

F# также не является строго функциональным - вы можете программировать с использованием OO / процедурного, если хотите :-)

ljs 04.10.2008 16:52

Scala: функционал :: C++: объектно-ориентированный

Chuck 26.10.2009 06:23

Поздравляю с получением значка "Народник"

Reverend Gonzo 17.12.2009 05:22

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

OCaml programmers are typically over 10x as productive as Java or C++ programmers for a wide range of practical tasks. Despite being based upon a fundamentally OOP platform, F# goes a long way to capturing the productivity- boosting benefits of OCaml (and the whole ML family). In contrast, Scala fails to capture many of the benefits including some really basic ones and, consequently, writing correct code is much more difficult in Scala than in any real ML.

Moreover, the ML family of languages are designed to be succinct but Scala is needlessly verbose for everything from "Hello world!" upwards. The ML family of languages provide extensive type inference (OCaml more than most) but Scala has only rudimentary inference by comparison. OCaml has an unusually expressive type system but Scala adds little to OOP that is of practical importance.

Хотя нет никаких аргументов в пользу того, что ML / OCaml намного лаконичнее и функциональнее, чем Scala, трудно подтвердить все утверждения в (несколько устаревшем) сообщении на форуме. Однако я согласен с тем, что Scala не подходит для этой аналогии. F# - это в основном OCaml для среды CLR.

Daniel Spiewak 04.10.2008 12:52

@ Даниэль: Я должен полностью согласиться. Есть несколько сценариев, в которых F# / OCaml предлагает это преимущество, но для большинства повседневных программ (т.е. для большинства людей) это утверждение просто нереалистично.

Marc Gravell 04.10.2008 14:31

Автор связанного поста (Джон Харроп) обычно троллит usenet и другие форумы, чтобы расширить свой консалтинговый бизнес. Прислушайтесь к его совету с недоверием - он пытается вам что-то продать.

Nathan Shively-Sanders 05.10.2008 06:46

Этот пост на самом деле не дает никаких советов - просто несколько избранных примеров, сравнивающих OCaml и Scala. Независимо от того, кто является автором, примеры действительны и иллюстративны, если только он не выдвигает соломенный аргумент, приводя плохие примеры на Scala.

Mark Cidade 05.10.2008 14:51

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

J D 07.11.2008 01:35

Я не являюсь большим поклонником Джона, но как программист на Haskell на полную ставку (который переключился с Java на Ruby по своему выбору), я согласен с критикой, которую он высказывает в этом сообщении Usenet, и типом функций, которые он описывает - это то, на что я постоянно полагаюсь в повседневном программировании.

cjs 18.06.2009 10:52

@Curt: Итак, Вы, программист на Haskell, которому плевать? ;-) steve-yegge.blogspot.com/2010/12/…

J D 19.04.2011 01:28

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

Не отвечает на вопрос. Даже если F# останется нерелевантным, вопрос может заключаться в эквивалентном нерелевантном языке FP для JVM.

Nathan Shively-Sanders 05.10.2008 06:36

@Jon Harrop: у нас был этот разговор раньше ;-p Но да, безусловно: по большей части я полностью ожидаю, что люди останутся с C#. Есть ниша, в которой может быть желателен F#, но я лично не представляю себе масштабной миграции. Хотите ответить чем-то более конкретным, чем просто "-1"?

Marc Gravell 05.12.2008 07:57

Противники; дайте мне указание какие, с которым вы не согласны? Я хотел бы знать ... это недовольные поклонники F#? Хорошо: тогда вместо того, чтобы просто отрицать, скажите Почему, что вы думаете, что F# повлияет на сообщество Общее .NET. Я согласен, что он используется в сценариях очень специфический, но для большинства общих бизнес-кодов это просто не самый подходящий инструмент. Если люди злятся, я не ответил на вопрос (например, FP для JVM): IMO, посылка вопроса неверен, и я поддерживаю это ...

Marc Gravell 01.06.2009 00:51

Возникает вопрос: «Какие языки функционального программирования доступны или находятся в разработке для JVM?». Ваш ответ был аргументом F# против C#. Вы отвечаете не на тот вопрос.

fsanches 01.09.2009 20:31

Нет, вопрос был в том, «... что делает для сообщества Java то же, что F# делает для сообщества .NET». - мой ответ просто пытается взглянуть на это с точки зрения перспективы - в противном случае вопрос не имеет смысла.

Marc Gravell 01.09.2009 22:14

@Marc: «Постарайтесь ответить чем-то более конкретным, чем просто -1». Несомненно, теперь у миллионов разработчиков есть F# в VS2010, и он имеет явные преимущества, такие как сопоставление с образцом по сравнению с типами вариантов для управления деревьями, вывод типов, обеспечивающий продуктивность динамического языка со скоростью C#, MailboxProcessor, что упрощает параллельное программирование и Поддержка асинхронного ввода-вывода для беспрепятственной обработки десятков тысяч одновременных подключений. Они не собираются годами ждать дооснащения аналогичных функций на C#, если они смогут легко решать свои проблемы уже сегодня, используя F#.

J D 26.03.2011 15:40

@Jon: с нулевого дня у нас был полностью асинхронный ввод-вывод в .NET. Это может показаться неприятным, но любой, кто не может «разобраться» с исходным API наверное, основанным на обратных вызовах, не должен пытаться написать асинхронный код в любом случае: делать его легче печатать (через F# или материал C# 5) на самом деле не так. устраните любые тонкие сложности асинхронного кода. Кроме того, хотя я понимаю, что вы сторонник (достаточно справедливо), иметь его под рукой - это не то же самое, что они его используют. Фактически, буквально на этой неделе я был ...

Marc Gravell 27.03.2011 01:23

@Jon пишет некоторый асинхронный код (конвейерный, мультиплексированный, IOCP-ориентированный, в очереди, обратные вызовы и т. д.; Все эти приятные вещи). Именно в нулевые пути я обнаружил, что не хватает обычного .NET. Так получилось, что я использовал C#, но подойдет любой язык .NET.

Marc Gravell 27.03.2011 01:25

@Jon и другие "преимущества" - опять же, это отличный ответ на проблему, которой у меня, нет, и у большинства других разработчиков, которых я знаю, нет. Я полностью согласен с тем, что в определенной нише (или нишах) это очень полезно; но большинству людей это не нужно, так зачем им «решать» эту проблему (которой у них нет), переходя на F#?

Marc Gravell 27.03.2011 01:29

@Marc: Я не согласен с тем, что программисты должны иметь возможность писать асинхронный код низкого уровня вручную, прежде чем использовать альтернативы высокого уровня. Не больше, чем они должны быть в состоянии выполнить TCO на ассемблере вручную или реализовать барьер записи перед использованием GC. Если этот стиль async настолько плох, почему F# взял его из OCaml и почему C# теперь берет его из F#?

J D 19.04.2011 01:38

@Jon, и все же у нас все в порядке ... И сосредоточение внимания на async, вероятно, здесь в любом случае не лучший аргумент, а именно потому что асинхронного CTP C# - т.е. если это идет (доступно сейчас с производственной лицензией) на C#, зачем мне нужно учитывать f # для async?

Marc Gravell 19.04.2011 02:57

@Marc: "но мы все в порядке". Люди говорят, что каждый раз языки программирования развиваются.

J D 19.04.2011 12:31

@Marc: "зачем мне рассматривать f # для async?" Зачем мне нужно быть впереди всех?

J D 19.04.2011 12:36

@Jon - это просто удобный синтаксис ... и в некотором смысле меньше, а не аналогичные вещи, такие как "блоки итератора"; еще раз хочу сказать: это не проблема, которая вызывает ежедневную боль, даже при написании кода с высокой степенью асинхронности. Это определенно приятно, и я приветствую это (я уже разработал некоторые асинхронные библиотеки в стиле C# 5 и т. д.). Но: я также написал точно такой же код без для асинхронного CTP. Конверсия была абсолютно минимальной. Сила аргумента async / F# чрезвычайно непропорциональна реальному повседневному асинхронному кодированию, которое живо и хорошо без F# или C# 5.

Marc Gravell 19.04.2011 13:07

@Marc: «который жив и здоров без F# или C# 5». Конечно, вы также можете выполнять асинхронность в C++, Fortran или ассемблере. Если это слишком далеко, посмотрите, как разработчики C# обращались с универсальными шаблонами .NET, когда они приземлялись (при условии, что вы используете универсальные шаблоны): blogs.msdn.com/b/dsyme/archive/2011/03/15/…

J D 21.04.2011 12:54

@Jon - вы продолжаете кататься по сути: факт в том, что с асинхронным CTP или без него, для подавляющего большинства разработчиков C#, пишущих асинхронный код, не является существенной проблемой, которую нужно исправить с помощью языковой смены. Конечно, сделать его красивее с помощью языковой поддержки - это Добро пожаловать.

Marc Gravell 21.04.2011 13:59

@Marc: Вам не нужно менять языки на .NET. Просто выберите подходящий для задачи.

J D 22.04.2011 01:00

@Jon Я обычно так и делаю :) однако я сильно подозреваю, что мы можем принять разные решения по этому (в конечном итоге субъективному) вопросу дизайна.

Marc Gravell 22.04.2011 01:35

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

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

Больше информации на Сайт сообщества Project Fortress и Страница крепости в Википедии.

@RoelSpilker: Это не я. Зашел на сайт, скачать спец не удалось. Быть потомком Fortran не подходит для функционального языка? Я ошибаюсь?

Ande Turner 05.10.2008 02:40

Хотя на первый взгляд он выглядит как новая версия Fortran, на него также повлияли Scala и Haskell. И способ, которым разработан язык, поддерживает как объекты, так и черты характера. Смотрите также FAQ: research.sun.com/projects/plrg/faq/index.html#five

Roel Spilker 05.10.2008 02:57

@RoelSpiker: +1 ... Звучит неплохо, но мне интересно, какова общая динамика, стоящая за этим. Их «дорожная карта» пока никуда не ведет. : s

Ande Turner 05.10.2008 05:47

интересно, но наверняка провалится! Я все же проголосую!

CVertex 05.10.2008 09:14

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

Roel Spilker 05.10.2008 20:14
Ответ принят как подходящий

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

+1, потому что это правильно, и это ставит вас на 10, что дает Джопу его значок популистов

Reverend Gonzo 17.12.2009 05:22

Я бы хотел, чтобы синтаксис Lisp был более приятным ;-)

devdanke 20.06.2012 03:33

То же самое. О, если бы вам понравилось видеть море паренс и постоянный мысленный синтаксический анализ снизу вверх, который вам приходится выполнять из-за непрерывной записи префиксов ... Я бы использовал Лисп. Я думаю, что я единственный человек, который считает языки ML синтаксически красивыми.

Adam Gent 07.02.2013 20:38

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

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

Marc Gravell 20.10.2008 11:53

Вероятно, это должен был быть комментарий, а не пост, кстати.

Marc Gravell 20.10.2008 11:54

@Marc: Я не уверен, что означают ваши предсказания. Является ли IronPython основным языком .NET? Разве на практике большая часть кода F# не является FP? Я думаю, что FP часто является отвлекающим маневром в контексте F#. Люди цепляются за FP, потому что слышат хайп о Haskell, но на практике это не очень важно. Практические преимущества F# заключаются в другом ...

J D 26.03.2011 15:48

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

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

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

Ваше здоровье, Джон Харроп.

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

Ingo 25.12.2011 03:31

Есть хороший список языков программирования для 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

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

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

Я бы добавил к предложениям https://eta-lang.org - это в основном Haskell для JVM. Я думаю, что вопрос связан с тем фактом, что F# - это язык машинного обучения, а Clojure - диалект LISP.

Другие вопросы по теме