it-swarm.com.de

F # wechselt zu OCaml

F # ist von OCaml abgeleitet, aber welche Hauptelemente fehlen oder wurden hinzugefügt? Insbesondere bin ich gespannt, ob die für das Erlernen von OCaml verfügbaren Ressourcen auch für jemanden nützlich sind, der F # lernen möchte.

123
Erik Forbes

Die Hauptunterschiede sind, dass F # nicht unterstützt:

  • functors
  • Objekte im OCaml-Stil
  • polymorphe Varianten
  • der camlp4/5-Präprozessor oder die Erweiterungspunkte (ppx)

Darüber hinaus hat F # eine andere Syntax für beschriftete und optionale Parameter.

Theoretisch können OCaml-Programme, die diese Funktionen nicht verwenden, mit F # kompiliert werden. Das Erlernen von OCaml ist eine vernünftige Einführung in F # (und umgekehrt, würde ich mir vorstellen).

Die vollständige Liste der Unterschiede ist hier (Hinweis: archive.org ersetzt toten Link).

87
Chris Conway

Diese Frage wurde schon seit einiger Zeit beantwortet, aber ich war ziemlich überrascht, dass die meisten Antworten besagen, welche OCaml-Funktionen in F # fehlen - dies ist auf jeden Fall gut zu wissen, ob Sie vorhandene OCaml-Programme nach F # portieren möchten (was wahrscheinlich das ist) Motivation der meisten Artikel, auf die verwiesen wird). Es gibt jedoch viele Funktionen, die F # zu einer anderen Sprache machen (nicht nur eine eingeschränkte Version von OCaml für .NET!). Hier einige Dinge, die in F # hinzugefügt wurden:

  • Maßeinheiten, mit denen Sie den Code für numerische Berechnungen überprüfen können
  • Meta-Programmierung unter Verwendung von Zitaten (was die Verwendung von LINQ in F # ermöglicht und auch für vielversprechende Projekte wie die WebSharper-Plattform unerlässlich ist)
  • Aktive Muster zum Erstellen von Abstraktionen für funktionale Datentypen (und allgemein sehr nützliche Funktion für kompliziertere Mustervergleichsanwendungen)
  • Berechnungsausdrücke das ist eine Sprachfunktion hinter asynchrone Workflows (eine Bibliothek für asynchrone E/A/Webservice/GUI-Programmierung)
  • . NET-kompatibles Objektsystem ermöglicht die vollständige Interoperabilität mit der .NET-Plattform (OCaml unterstützt auch Objekte, unterscheidet sich jedoch - es gibt natürlich einige Vorteile in beiden Systemen).
  • Überladene Operatoren - Soweit ich weiß, hat OCaml keine überladenen Operatoren - in F # können Sie + für alle numerischen Typen sowie für Ihre Typen, die dies unterstützen.

Und ehrlich gesagt denke ich, dass es auch wert ist, die Visual Studio-IDE zu erwähnen. Dies ist kein Teil der Sprache, verbessert jedoch die Benutzererfahrung (IntelliSense-Unterstützung in Visual Studio ist wirklich gut!)

Wenn Sie sich die Liste ansehen, gibt es viele Dinge, die wesentlich zur Popularität von F # beigetragen haben. Es ist also viel mehr als nur "OCaml ohne Funktoren". F # basiert definitiv auf OCaml (und übernimmt Ideen aus anderen Sprachen wie Haskell) und teilt viele Aspekte mit ihnen, aber es gibt auch viele andere Dinge. Ich vermute, dass die Microsoft Developer Division ohne asynchrone Workflows, .NET-Stil OO und Meta-Programmierung niemals F # in Visual Studio 2010 aufnehmen würde.

116
Tomas Petricek

Ich beschreibe F # immer als Cousin von OCaml, weil OCaml viele Funktionen hat, die F # nicht hat und die es wahrscheinlich nie bekommen wird. F # ist enger mit der vorherigen CAML-Sprache verwandt. Insbesondere hat F # eine sehr eingeschränkte Unterstützung für die Abstraktion und überhaupt keine Unterstützung für die strukturelle Typisierung (wie OCamls objects und polymorphe Varianten ).

Im Gegensatz zu dem, was einige Befragte geschrieben haben, bietet F # (eingeschränkte) Unterstützung für beschriftete ("named") und optionale Argumente.

Dies sind jedoch alles fortgeschrittene Funktionen, und Sie können mit Sicherheit beginnen, sich mit den Grundgedanken der funktionalen Programmierung in kleinem Maßstab im OCaml-Stil vertraut zu machen, indem Sie Ressourcen zu OCaml verwenden. Der erste große Unterschied, den Sie feststellen werden, sind größere Probleme wie Verkapselung und Abstraktion, die in OCaml und F # auf völlig unterschiedliche Weise gelöst werden. Wenn Sie lernen möchten, wie man das in F # macht, ist die einzige verfügbare Literatur dieser Artikel über rein funktionale Datenstrukturen .

Ich habe auch herausgefunden, dass OCamls wundervolles Modulsystem das Parametrisieren von Code über Typen (wie Datenstrukturen) erleichtert, aber die OOP) Alternativen sind nicht nur abscheulich, sondern unter .NET fast unbenutzt. Beim Versuch, elegant parametrisierte Datenstrukturen zu schreiben, habe ich Dutzende Fehler im F # -Compiler gefunden, weil noch niemand versucht hat, dies zu tun. Die F # -Stdlib enthält einige nette Datenstrukturimplementierungen, aber praktisch keine Wiederverwendung, dh es ist ein Cut'n 'Job einfügen.

16
Jon Harrop

F # und OCaml sind taxonimisch Klassen in der ML-Sprachfamilie, die auch eine ganze Reihe anderer seltsamer Tiere umfasst. F # ist neuer als OCaml und hat weder Funktoren [Funktionen von Modul -> Modul] noch Zeilentypen [Objektklassen und polymorphe Varianten]. Diese beiden Vereinfachungen vereinfachen wahrscheinlich die Lernkurve für jemanden, der sich auf der .NET-Plattform entwickelt. Leider sind diese beiden Sprachfunktionen in OCaml enorm leistungsfähig. Wenn Sie also die OCaml-Literatur lesen, um Einblicke in die Codierung von F # zu erhalten, führt dies wahrscheinlich zu vorzeitigem Frust, da es sich wahrscheinlich um eine hervorragende Alternative zu C # handelt, wenn beide Funktionen verfügbar sind.

9
james woodyatt

F # unterstützt die OCaml-Syntax direkt. Es ist vielleicht nicht 100% kompatibel, aber ich denke, es ist ziemlich nah.

http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html

Hier ist eine Liste der Unterschiede (nicht sicher, wie aktuell es ist)

http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html

2
Lou Franco