Frage

F # wird von OCaml abgeleitet, aber welche wichtige Teile fehlen oder hinzugefügt? Ich bin speziell gespannt, ob die zur Verfügung stehenden Ressourcen für das Lernen OCaml sind auch nützlich, um jemanden, der F # lernen will.

War es hilfreich?

Lösung

Die wichtigsten Unterschiede sind, dass F # unterstützt nicht:

  • functors
  • OCaml-style-Objekte
  • polymorphe Varianten
  • die camlp4 / 5 Präprozessor oder Erweiterungspunkte (PPX)

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

In der Theorie OCaml-Programme, die mit F # diese Funktionen nicht verwenden können, kompiliert werden. OCaml ist eine durchaus vernünftige Einführung in F # Lernen (und umgekehrt, ich könnte mir vorstellen).

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

Andere Tipps

Diese Frage ist nun seit einiger Zeit beantwortet wird, aber ich war ziemlich überrascht, dass die meisten Antworten sagen, was OCaml Funktionen in F # fehlen - das ist auf jeden Fall gut zu wissen, wenn Sie zu F # zu portieren bestehenden OCaml Programmen wollen (die ist wahrscheinlich die Motivation des meisten der erwähnten Artikel). Allerdings gibt es viele Funktionen, die F # eine andere Sprache (nicht nur eine eingeschränkte Version von OCaml für .NET!) Machen hier ein paar Dinge, die in F # hinzugefügt werden:

  • Maßeinheiten , die es Ihnen ermöglichen, den Typprüfungscode mit numerischen Berechnungen zu tun
  • Meta-Programmierung mit Zitaten (die es ermöglicht, zu verwenden LINQ in F # und ist auch für versprechend Projekte wie die WebSharper Plattform)
  • Aktive Muster für Abstraktionen für die Funktionsdatentypen (und in der Regel sehr nützliche Funktion für kompliziertere Muster passenden Anwendungen)
  • Erstellen
  • Computation Ausdrücke , die eine Sprache-Funktion hinter sind asynchroner Workflows (eine Bibliothek für asynchrone E / A / Webservice / GUI-Programmierung)
  • .NET kompatibel Objekt-System , die es möglich macht, mit der .NET-Plattform vollständig zu kompatibel sind (OCaml hat auch eine Unterstützung für Objekte, sondern andere - gibt es natürlich einige Vorteile in beiden Systemen sind ).
  • Überladene Operatoren - Soweit ich weiß, OCaml haben nicht überladene Operatoren -. In F # Sie + für alle numerischen Typen sowie Ihre Typen, die es unterstützen
  • verwenden können,

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

Wenn Sie in der Liste sehen, gibt es viele Dinge, die die Popularität von F # beigetragen, so ist es viel mehr als nur „OCaml ohne functors“. F # ist auf jeden Fall, basierend auf OCaml (und nimmt Ideen aus anderen Sprachen wie Haskell) und teilt viele Aspekte mit ihnen, aber es gibt auch eine Menge anderer Dinge. Ich denke, dass ohne Dinge wie asynchrone Workflows, .NET Stil OO und Meta-Programmierung, die Microsoft Developer Abteilung würde nie F # in Visual Studio 2010.

ich immer F # als Cousin von OCaml beschreiben, weil OCaml viele Funktionen, die F # hat nicht hat und nie wahrscheinlich zu bekommen. F # mehr ist eng mit der früheren CAML-Programmiersprache. Insbesondere hat F # sehr begrenzte Unterstützung für Abstraktion und keine Unterstützung für strukturelle Typisierung (wie die OCaml Objekte und polymorphe Varianten ) überhaupt.

Im Gegensatz zu dem, was einige respondants geschrieben haben, ist F # (haftungsbeschränkt) Unterstützung für markiert hat ( „Namen“) und optionale Argumente.

Diese sind jedoch alle erweiterten Funktionen und Sie können mit den grundlegenden Ideen in den Griff bekommen hinter kleinräumige OCaml-Stil der funktionalen Programmierung mit Ressourcen über OCaml sicher starten. Der erste große Unterschied, den Sie entdecken ist größere Probleme wie Kapselung und Abstraktion, die auf ganz unterschiedliche Weise in OCaml und in F # gelöst werden. Wenn Sie lernen möchten, wie man das in F #, die einzige verfügbare Literatur ist

F # und OCaml sind taxonimically Klassen in der ML-Familie von Sprachen, die auch eine ganze passle andere seltsame Tiere umfasst. F # ist neuer als OCaml, und es hat auch nicht functors [Funktionen des Moduls -> Modul] oder Zeilentypen [Objektklassen und polymorphe Varianten] noch. Zwischen ihnen, machen diese beiden Vereinfachungen wahrscheinlich die Lernkurve einfacher für jemanden auf der Plattform .Net entwickeln. Leider sind diese beiden Sprachfunktionen enorm mächtig in OCaml, so die OCaml Literatur zu lesen Erkenntnisse darüber zu gewinnen, wie für F #, Code wird wahrscheinlich mit dem letzteren zu einem vorzeitigen Frustration führen, wenn es wahrscheinlich eine gute Alternative zu C #, wo beide zur Verfügung stehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top