F # und Scala sind beide 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, obwohl F # für .NET und Scala für die Java-Plattform entwickelt wurde?
functional programming langugages that don't force the developer to only use immutable datatypes
- Gibt es welche, außer vielleicht Spielzeugsprachen?Antworten:
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. Beispielsweise sind algebraische Datentypen in F # rein funktionale Konstrukte ohne OO'ness, während ADTs in Scala weiterhin reguläre Klassen und Objekte sind. (Hinweis: Beim Kompilieren in den CLR-Bytecode werden selbst F # -ADTs zu Klassen und Objekten, sie sind jedoch für F # -Programmierer auf Quellenebene nicht sichtbar.)
F # hat eine vollständige Inferenz nach Hindley-Milner. Scala hat teilweise Typinferenz. Die Unterstützung von Subtyping und Pure-OO-Ness macht einen Rückschluss auf den Hindley-Milner-Typ 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 Stichwörter, während F # 97 hat. Das sollte dir etwas sagen. :-)
F # als Microsoft-Sprache bietet eine hervorragende IDE-Unterstützung in Form von Visual Studio. Auf der Scala geht es 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 das ist, was Sie mit Java IDEs erreichen. (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 leistungsstärkeres (und komplexeres) Typensystem als F #.
Andere Unterschiede:
F # -Funktionen werden standardmäßig ausgeführt. In Scala wird Curry angeboten, aber nicht sehr oft verwendet.
Die Syntax von Scala ist eine Mischung aus Java, Standard ML, Haskell, Erlang und vielen anderen Sprachen. Die Syntax von F # ist von der 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ür F #.
PS: Ich liebe sowohl Scala als auch F # und hoffe, dass sie in Zukunft die vorherrschenden Sprachen ihrer jeweiligen Plattformen werden. :-)
quelle
Some(2)
Scala in der ArtSome[Int]
und nichtOption[Int]
die unerwünschte IMO. F # hingegen hat eine spezielle Syntax und Behandlung für ADTs und kann daher den Typ vonSome 2
as korrekt ableitenint option
. Daher ist die F # -Codierung von ADTs besser als die von Scala (IMO natürlich). Ich habe nicht angedeutet, dass es minderwertig ist, und es tut mir leid, wenn es so rüberkam.quelle
Ein kleiner, aber wichtiger Punkt ist die Lizenz: Scala ist BSD (so ziemlich die freizügigste freie Softwarelizenz, die es gibt), F # war früher "Microsoft Research Shared Source-Lizenzvereinbarung", ist aber heute ein kommerzielles Produkt (laut @Lorenzo unten). obwohl ich nirgendwo spezifischere Lizenzvereinbarungen finden konnte).
quelle