it-swarm-eu.dev

Was sind die größten Unterschiede zwischen F # und Scala?

F # und Scala sind funktionale Programmiersprachen, die den Entwickler nicht zwingen, nur unveränderliche Datentypen zu verwenden. Beide unterstützen Objekte, können in anderen Sprachen geschriebene Bibliotheken verwenden und auf einer virtuellen Maschine ausgeführt werden Beide Sprachen scheinen auf ML zu basieren.

Was sind die größten Unterschiede zwischen F # und Scala trotz der Tatsache, dass F # für .NET und Scala für Java) entwickelt wurde = Plattform?

59
Jonas

Hauptunterschiede :

  • Sowohl Scala als auch F # kombinieren OO-imperative Programmierung und funktionale Programmierung in einer Sprache. Ihr Ansatz zur Vereinheitlichung der Paradigmen ist jedoch sehr unterschiedlich. Scala versucht die beiden Paradigmen zu einem ((wir nennen es objektfunktionales Paradigma) zu verschmelzen , während F # die beiden Paradigmen nebeneinander liefert. Zum Beispiel sind algebraische Datentypen in F # rein funktionale Konstrukte ohne OO'ness, während ADTs in Scala immer noch reguläre Klassen und Objekte sind. (Hinweis: Bei der Kompilierung in CLR-Bytecode werden selbst F # ADTs zu Klassen und Objekten, die jedoch für den F # -Programmierer auf Quellenebene nicht sichtbar sind.)

  • F # hat eine vollständige Inferenz im Hindley-Milner-Stil. Scala hat partielle Typinferenz. Die Unterstützung für Subtypisierung und reine OO-Ness macht die Inferenz des Hindley-Milner-Stils für Scala unmöglich.

  • Scala ist eine viel minimalistischere Sprache als F #. Scala hat eine sehr kleine orthogonale Menge von Konstrukten, die in der gesamten Sprache wiederverwendet werden. F # scheint für jede Kleinigkeit eine neue Syntax einzuführen, wodurch es im Vergleich zu Scala sehr syntaxlastig wird. (Scala hat 40 Schlüsselwörter, während F # 97 hat. Das sollte dir etwas sagen. :-)

  • F # ist eine Microsoft-Sprache und bietet eine hervorragende IDE Unterstützung in Form von Visual Studio. Auf der Scala Seite sind die Dinge nicht so gut. Das Eclipse-Plugin ist immer noch nicht auf dem neuesten Stand. Gleiches gilt für das NetBeans-Plugin. IDEA scheint im Moment die beste Wahl zu sein, obwohl es nicht annähernd dem entspricht, was Sie mit Java IDEs erhalten. (Für Emacs-Fans gibt es ENSIME. Ich habe viele gute Dinge über dieses Paket gehört, aber ich habe es noch nicht ausprobiert.)

  • Scala hat ein weitaus leistungsfähigeres (und komplexeres) Typensystem als F #.


Andere Unterschiede :

  • F # -Funktionen werden standardmäßig verwendet. In Scala ist Currying verfügbar, wird aber nicht sehr oft verwendet.

  • Die Syntax von Scala ist eine Mischung aus Java, Standard ML, Haskell, Erlang und vielen anderen Sprachen. Die F # -Syntax ist von denen von OCaml, C # und Haskell inspiriert.

  • Scala unterstützt höhere Arten und Typklassen. F # nicht.

  • Scala ist für DSLs viel zugänglicher als F #.


PS: Ich liebe sowohl Scala als auch F # und hoffe, dass sie in Zukunft die vorherrschenden Sprachen ihrer jeweiligen Plattformen werden. :-)

61
missingfaktor
  • F # basiert auf funktionalen Aspekten, während scala auf objektorientierten Aspekten basiert.
  • F # hat eine bessere IDE Unterstützung mit Visual Studio while Scalas Eclipse-Plug-In ist für Open Source IDE und vergleichsweise langsamer).
  • F # ist ML-ähnlicher als Scala und hat eher ein minimales Lambda-Kalkül-Gefühl als OCaml, Standard ML und Scheme. F # scheint eine wesentlich einfachere Sprache zu sein.
9
Ayush Goyal

Ein kleiner, aber wichtiger Punkt ist die Lizenz: Scala ist BSD (so ziemlich die freizügigste Lizenz für freie Software, die es gibt), F # war früher eine "Microsoft Research Shared Source-Lizenzvereinbarung", ist aber eine kommerzielle Produkt heutzutage (laut @Lorenzo unten, obwohl ich nirgendwo spezifischere Lizenzvereinbarungen finden konnte).

0
Joonas Pulakka