Frage

Was unterscheidet die beiden ML Dialekte auseinander?

War es hilfreich?

Lösung

Es gibt viele Unterschiede, einige technische, einige gesellschaftspolitische. Ich habe versucht, erste wichtigere Unterschiede zu setzen.

  • SML ist eine Sprache mit einer Definition und Standard. Es ist stabil (und in der Tat wurde eingefroren, so dass es sich nicht entwickeln können). Ziel Caml ist eine Implementierung von einer kleinen Gruppe an INRIA gesteuert. Es entwickelt sich ständig weiter. (IMO die Entwicklung verwaltet wird gut.)

  • SML hat viele Implementierungen; Caml hat nur einen.

  • Ziel Caml eine Reihe von zusätzlichen Funktionen, unter denen die bekanntesten sind wohl Objekte und polymorphe Varianten.

  • Die beiden Sprachen haben dramatisch unterschiedliche Modelle von Datensatztypen. Kurz gesagt, müssen in Caml, Namen von Datensatzfeldern eindeutig sein, wo in SML, zwei verschiedene Datensatztypen im gleichen Umfang Feldnamen gemeinsam haben können. Diese Marotte aus SML macht Portierung ein bisschen schwierig zu CAML.

  • Es gibt durchaus ein paar syntaktischen Unterschiede.

  • Die Bibliotheken und Standardfunktionen sind dramatisch anders aus. Die Caml Bibliothek ist sehr zwingend notwendig, während die SML Standard-Basis-Bibliothek mehr funktionsfähig ist. Zum Beispiel ist eine Funktions Zusammensetzung der oberste Ebene in primitiven SML; es ist nicht die Caml Bibliothek Teil. Die Caml String-Bibliothek bietet keine Falzfunktion (zumindest nicht ab Version 3.08). Implementationen von vielen der Caml List Funktionen sind für sehr lange Listen unsicher; sie blasen den Stapel.

  • Die Typ-Systeme sind auf subtile Weise anders: In Caml, eine Art Anmerkung auf einem Ausdruck e : ty wird akzeptiert, wenn der Typ ty eint mit der Art der e. In SML wird e : ty nur, wenn der Typ ty akzeptiert ist eine Instanz von der Art der e. Diese Unterscheidung macht die Anmerkung in Caml sehr viel weniger nützlich in der Praxis, weil es unmöglich ist, eine Typanmerkung zu verwenden, darauf zu bestehen, dass ein Ausdruck polymorph ist.

  • Caml hat eine viel vernünftige und sinnvolle Beziehung zwischen den Schnittstellen (so genannten Modultypen oder Signaturen ) und (Beton) Implementierungen (so genannten Module oder Strukturen ) als SML. In SML ziemlich alles geht, und Sie haben auf dem Programmierer angewiesen gute Konventionen zu etablieren. In Caml werden gute Konventionen festgelegt und vom Compiler erzwungen.

  • In SML, arithmetische Operatoren sind überlastet zu beiden Gleitkommazahlen und Integer-Daten anzuwenden. In Caml Betreiber nicht überlastet werden; Floating-Point-Betreiber sind mit einem zusätzlichen Punkt notiert.

  • In SML kann der Programmierer den Vortritt und associtivity von Infixoperatoren steuern. In Caml, wird diese durch das erste Zeichen des Bedienernamen bestimmt. Diese Einschränkung begrenzt die Vorteile der Lage, Ihre eigene Infixschreibweise zu definieren.

Für eine detailliertere Analyse komplett mit redaktionellen Kommentar, können Sie unter Adam Chlipala der Vergleichsseite .

Andere Tipps

Für Einzelheiten über die syntaktischen Unterschiede in Bezug auf den Norman Ramsey erwähnt, hier sind ein paar Webseite:

OCaml fügt Objektorientierung Merkmale und hat einige kleinere Syntax Unterschiede.

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