it-swarm-eu.dev

Jaké jsou největší rozdíly mezi F # a Scala?

F # a Scala) jsou funkční programovací jazyky, které nevynucují, aby vývojář používal pouze neměnné datové typy. Oba mají podporu pro objekty, mohou používat knihovny psané v jiných jazycích a běžet na virtuálním stroji Zdá se, že oba jazyky jsou založeny na ML.

Jaké jsou největší rozdíly mezi F # a Scala), přestože F # je určen pro .NET a Scala pro Java) = platforma?

59
Jonas

Hlavní rozdíly:

  • Oba Scala a F # kombinují OO-imperativní programování a funkční programování do jednoho jazyka. Jejich přístup ke sjednocení paradigmat je však velmi odlišný. Scala se snaží Fuse dva paradigmy do jednoho (nazýváme to objektově funkční paradigma), zatímco F # poskytuje dva paradigmata vedle sebe. Například algebraické datové typy v F # jsou čistě funkční konstrukty bez OO'ness v nich, zatímco ADT v Scala jsou stále normální třídy a objekty.) (Poznámka: V procesu kompilace do CLR bytecode se dokonce F # ADT stanou třídami a objekty ale nejsou viditelné pro programátora F # na úrovni zdroje.)

  • F # má plnou implikaci typu Hindley-Milner. Scala má inferenci částečného typu. Podpora pro subtypování a čistě OO-ness znemožňuje Scalaovi odvodit typ stylu Hindley-Milner).

  • Scala je mnohem minimalističtější jazyk než F #. Scala má velmi malou ortogonální sadu konstruktů, které se opakovaně používají v celém jazyce. Zdá se, že F # zavádí novou syntaxi pro každou maličkost, čímž se stává ve srovnání s Scalou velmi syntaxou. (Scala má 40 klíčových slov, zatímco F # má 97. To by vám mělo něco říct :-)

  • F # je Microsoft jazyk má vynikající IDE podpora ve formě Visual Studio. Věci nejsou tak dobré na Scala straně. Eclipse plugin stále není To samé platí pro plugin NetBeans. IDEA se zdá být vaší nejlepší sázkou v tuto chvíli, i když se ani nepřibližuje tomu, co získáte pomocí Java IDE. (Pro fanoušky Emacsu je tu ENSIME. O tomto balíčku jsem slyšel spoustu dobrých věcí, ale ještě jsem to nezkusil.)

  • Scala má mnohem výkonnější (a složitější) typový systém než F #.


Jiné rozdíly:

  • F # funkce jsou ve výchozím nastavení cursed. Ve Scale je currying k dispozici, ale často se nepoužívá.

  • Scala syntaxe je směsí syntaxe Java, Standard ML, Haskell, Erlang a mnoha dalších jazyků. Syntaxe F # je inspirována syntaxemi OCaml, C # a Haskell.

  • Scala podporuje vyšší druhy a typeclasses. F # ne.

  • Scala je mnohem přístupnější pro DSL než F #.


PS: Miluji oběma Scala a F #, a doufám, že se v budoucnu stanou převládajícími jazyky jejich příslušných platforem :-)

61
missingfaktor
  • F # se vypořádává s funkčními aspekty, zatímco scala je založeno na objektově orientovaných aspektech).
  • F # má lepší IDE podpora s Visual Studio zatímco Scala's Eclipse plug-in je pro open source IDE a poměrně pomalejší).
  • F #, který je více ML jako Scala, má více minimálního počtu lambda-y pocit, jak to mají OCaml, Standard ML a Scheme. Zdá se, že F # je výrazně jednodušší jazyk.
9
Ayush Goyal

Jedním z malých, ale důležitých bodů je licence: Scala je BSD (do značné míry nejpřípustnější licence na svobodný software), F # bývala „licenční smlouvou se sdíleným zdrojem Microsoft Research“, ale je komerční produkt (podle @ Lorenzo níže, i když nikde jsem nemohl najít konkrétnější licenční smlouvy).

0
Joonas Pulakka