2013-03-23 6 views

Antwort

46

Es gibt einige Unterschiede sowohl in der Funktion als auch in der Semantik.

Funktionen unterstützt SML aber nicht OCaml:

  • transparent Signatur ascription
  • Modulebene let
  • Verteilung symmetrisch Constraints
  • syntaktischer Zucker für functors über Typen und Werte

Features OCaml 4 hat aber nicht SML:

  • höherer Ordnung functors
  • rekursive Module
  • lokalen Module
  • verschachtelten Signaturen
  • Module als erstklassige Werte
  • allgemeine Modulteilung (sig with module A = M)
  • module type of

Einige SML-Implementierungen stellen jedoch einige davon als Erweiterungen bereit: z. höherrangige Funktoren (SML/NJ, Moskau ML, Alice ML), lokale und erstklassige Module (Moscow ML, Alice ML), Modul-Sharing (SML/NJ, Alice ML), verschachtelte Signaturen (Moscow ML, Alice ML) und rekursive Module (Moskau ML).

Semantiken-weise, ist der größte Unterschied in der Behandlung von Typ-Äquivalenz, insbesondere mit Bezug auf functors:

  • In SML, functors sind generative, was bedeutet, dass die gleiche Funktors Anwendung zweimal Das gleiche Argument liefert immer neue Typen.

    Bearbeiten: OCaml 4 hinzugefügt die Möglichkeit, functors optional generativ zu machen. (Plus zusätzliche syntaktische Einschränkungen) reproduziert äquivalente Typen

  • In OCaml, functors sind applicative, was bedeutet, dass die gleiche Funktors zweimal auf die exakt gleiche Argument angewendet wird. Diese Semantik ist flexibler, kann aber auch die Abstraktion unterbrechen (siehe z. B. die Beispiele, die wir in this paper, Abschnitt 8, geben).

  • OCaml hat einen rein syntaktischen Begriff von Signaturen, was bedeutet, dass bestimmte Typäquivalenzen nicht durch das Typsystem ausgedrückt werden können und lautlos fallen gelassen oder aufgebrochen werden (siehe z.B. this bug als ein überraschendes Beispiel).

    bearbeiten: OCaml 4.02 hinzugefügt eine spezielle Semantik für „Modul Aliase“, die das spezielle Beispiel in den Fehler zu beheben passieren verwiesen, aber die allgemeine Beschränkung der syntaktischen Signaturen weiterhin besteht.

Ein weiterer bemerkenswerter Unterschied ist, dass OCaml des Modultyp System unentscheidbar ist (das heißt, Typprüfung nicht beenden kann) aufgrund seiner Erlaubnis von abstrakten Signaturen, die SML nicht erlaubt.

+4

Ich denke, Sie sollten die Gelegenheit nutzen, etwas über * zukünftige * Modulsysteme zu nehmen, oder genauer gesagt, wie sich diese Feature-Sets ändern würden, vorausgesetzt, dass die "jüngsten" (meist Ihre) Forschung zu Modulsystemen in einer nächsten Reinigung vernünftig beginnt Iteration einer ML-Sprache. Das würde eine sehr interessante Antwort zu einer * extrem * interessanten Antwort machen. – gasche

+4

Ich fühlte mich unpassend, die Frage dafür zu packen;). Meine persönliche Antwort wäre ziemlich genau das, was in den F-ing Modulen zu finden ist, die ich oben verlinkt habe - es fasst alle aufgelisteten Merkmale in einer sauberen und (ziemlich) einfachen Weise zusammen (einschließlich generativer und anwendungsbezogener Funktoren), abzüglich rekursiver Module. Für die bin ich mir nicht so sicher. Die rekursiven Module von OCaml sind viel zu ad-hoc und begrenzt für meinen Geschmack, aber ein umfassender Ansatz wird letztendlich dazu führen, dass ein großer Teil dessen, was ML-Module ausmacht, aufgegeben wird, wie wir es im MixML-Papier beschreiben. Ob es sich lohnt, darüber ist die Jury noch nicht entschieden. –

+0

@AndreasRossberg Ich bin mir nicht sicher, was Sie meinen, indem Sie ML-Hauptmodule im Kontext von MixML aufgeben. In dem von Ihnen erwähnten Papier haben wir herausgefunden, dass ML-Module als Endpunkte im MixML-Spektrum gesehen werden können. (Korrigieren Sie mich Wenn ich falsch liege, war die grundlegende Idee für den Aufbau von Modulen durch Fibration anstatt Parametrierung) – fedvasu

2

Was die Semantik betrifft, gibt Andreas Rossberg eine viel bessere und ausführlichere Antwort. In Bezug auf die Syntax this site könnte jedoch sein, was Sie suchen.

+4

und diese Seite ist auch die Arbeit von Andreas Rossberg! – fedvasu