F # и Scala являются языками функционального программирования, которые не заставляют разработчика использовать только неизменяемые типы данных. Они оба поддерживают объекты, могут использовать библиотеки, написанные на других языках, и работать на виртуальной машине. Оба языка основаны на ML.
Каковы самые большие различия между F # и Scala, несмотря на то, что F # разработан для .NET и Scala для платформы Java?
functional programming langugages that don't force the developer to only use immutable datatypes
- есть ли, кроме, может быть, игрушечные языки?Ответы:
Основные отличия:
И Scala, и F # объединяют OO-императивное программирование и функциональное программирование в одном языке. Однако их подход к объединению парадигм сильно отличается. Scala пытается объединить две парадигмы в одну (мы называем это объектно-функциональной парадигмой), тогда как F # обеспечивает две парадигмы рядом друг с другом. Например, алгебраические типы данных в F # являются чисто функциональными конструкциями без ООП в них, тогда как ADT в Scala все еще являются обычными классами и объектами. (Примечание. В процессе компиляции в байт-код CLR даже ADT F # становятся классами и объектами, но они не видны программисту F # на уровне исходного кода.)
F # имеет полный вывод типа Хиндли-Милнера. Scala имеет частичный вывод типа. Поддержка подтипов и чистых OO-сущностей делает вывод типов в стиле Хиндли-Милнера невозможным для Scala.
Scala - гораздо более минималистичный язык, чем F #. Scala имеет очень маленький ортогональный набор конструкций, которые повторно используются во всем языке. F #, кажется, вводит новый синтаксис для каждой мелочи, таким образом, становится очень тяжелым по сравнению с Scala. (У Scala 40 ключевых слов, тогда как у F # 97. Это должно вам кое-что сказать. :-)
F #, будучи языком Microsoft, имеет отличную поддержку IDE в форме Visual Studio. На стороне Scala все не так хорошо. Плагин Eclipse все еще не на высоте. То же самое касается плагина NetBeans. Кажется, IDEA - ваша лучшая ставка на данный момент, хотя она даже не приближается к тому, что вы получаете в Java IDE. (Для поклонников Emacs есть ENSIME. Я слышал много хорошего об этом пакете, но я еще не пробовал.)
Scala имеет гораздо более мощную (и сложную) систему типов, чем F #.
Другие отличия:
Функции F # карри по умолчанию. В Scala карри доступно, но используется не очень часто.
Синтаксис Scala представляет собой сочетание синтаксиса Java, Standard ML, Haskell, Erlang и многих других языков. Синтаксис F # основан на синтаксисе OCaml, C # и Haskell.
Scala поддерживает более высокие типы и классы типов. F # нет.
Scala гораздо более поддается DSL, чем F #.
PS: я люблю и Scala, и F # и надеюсь, что в будущем они станут доминирующими языками своих платформ. :-)
источник
Some(2)
в Scala есть типSome[Int]
а неOption[Int]
нежелательный IMO. F #, с другой стороны, имеет специальный синтаксис и обработку для ADT, и, таким образом, может правильно выводить типSome 2
asint option
. Таким образом, кодирование ADT в F # лучше, чем в Scala (IMO, конечно). Я не пытался подразумевать, что это уступает, и мне жаль, если это встретилось таким образом.источник
Одним из небольших, но важных моментов является лицензия: Scala - это BSD (в значительной степени самая либеральная лицензия на свободное программное обеспечение), F # раньше был «лицензионным соглашением Microsoft Research Shared Source», но в настоящее время это коммерческий продукт (согласно @Lorenzo ниже, хотя я нигде не мог найти более конкретные лицензионные соглашения).
источник