2013-07-25 15 views
11

Istnieje wiele dialektów ML, a SML i OCaml są najbardziej popularne. Istnieje wiele różnic między SML i OCaml, ale oba są uważane za dialekty ML. Tak,Dlaczego SML i OCaml są uważane za dialekty ML? Jaka jest definicja ML?

  1. Dlaczego SML i OCaml są uważane za dialekty ML?
  2. W jaki sposób język może być uważany za dialekt ML?
  3. Jeśli ML nie jest SML/OCaml, jaka jest definicja ML?

Przypuszczam, że ML jest pewnym skrzyżowaniem SML i OCaml, ale nie mogę znaleźć szczegółowej definicji.

+12

http://caml.inria.fr/about/history.en.html Perspektywa ze świata OCaml – camlspotter

+2

Przypuszczam, że system typu ma najwięcej do zrobienia, dlaczego są one uważane za dialekt. Oczywiście także część składni. –

Odpowiedz

7

Łącze z camlspotter ma ładny przegląd historii ML i wspomina implementację Luca Cardelli o nazwie "Cardelli's ML". Szukałem tego i znalazłem ten dokument: ML under Unix. Luca Cardelli opisuje implementację „ml”, a jestem całkiem pewien, że to będzie poprzedzać Standard ML jak to datowany 1983. Jest to lista funkcji w STRESZCZENIE:

  • interaktywnej
  • silnie wpisane
  • polimorficzny system typów
  • abstrakcyjne typy danych
  • wyjątki
  • moduły

To całkiem niezła lista, chociaż niektóre części wydają się niejasne. Myślę, że ta lista mogłaby służyć jako nieformalna definicja tego, jakie cechy powinien posiadać język, aby można go było uznać za "ML", ale warto zwrócić uwagę na kilka rzeczy.

Wymaganie, aby system był "interaktywny", jest dość nietypowym szczegółem implementacji, być może specyficznym dla implementacji opisanej w tym dokumencie. Kompilator ML Standard ML nie ma interaktywnego REPL (ponieważ jest to kompilator optymalizujący cały program), jednak wątpię, by ktokolwiek poważnie sugerował, że język MLton nie jest ML.

Ponadto „silnie wpisane” jest dość niejasne, dlatego warto przeczytać resztę tego ustępu więcej kontekstu:

wyrażenie Każdy ML ma typ, który jest określony statycznie. Typ wyrażenia jest zwykle automatycznie wnioskowany przez system, bez potrzeby definiowania typu. System typu ML gwarantuje, że każde wyrażenie o numerze nie wygeneruje błędów typu w czasie wykonywania. Statyczne sprawdzanie poprawności pułapek podczas kompilacji dużej części błędów w programach.

Ta lista również nie wspomnieć wzór pasujący na wszystkich, jednak papier robi dopasowanie pokrywa wzór, chociaż nie wiem, jeśli ur-ML używany w LCF miał pasujące do wzorca, a jeśli nie, jak można manipulować typami danych bez niego. Twierdzę, że w 2013 r. Język z tymi cechami, ale bez dopasowywania wzorców, byłby trudny do sprzedania jako ML.

Należy zauważyć, że Haskell najczęściej odpowiada tej liście, jeśli trochę zmrużysz wzrok.Ale w praktyce różni się na tyle, że myślę, że większość ludzi uważa Haskell inspirowane przez ML, ale „nie jest ML”, głównie dlatego Haskell jest czysty i leniwy podczas ML historycznie były nieczyste i ścisłe. Co więcej, system modułów ML, zarówno w SML, jak i OCaml, różni się nieco od Haskella, a żadne z ML nie mają typów.

To nie jest wyczerpująca odpowiedź na wszystkie twoje pytania, ale mam nadzieję, że pomoże to jednak.

+0

Dzięki za komentarze i link do ML Under Unix. Przeczytałem odnośniki i przeszukano stronę internetową, a na koniec odkryłem artykuł opublikowany w 1978 r. "[Metajęzyk interaktywnego dowodu w LCF] (http://www-public.int-evry.fr/~gibson/Teaching/CSC4504/ReadingMaterial/GordonMMNW78 .pdf) ". I w tym piśmie autorzy napisali: "Pełny opis ML i jego użycie z PPλ istnieje jako raport techniczny: Edinburgh LCF, 1977". Sądzę, że to może być papier pochodzenia ML. Ale nie udało mi się znaleźć jego wersji online. – InsaneRabbit

+0

I chyba nie ma ścisłej definicji bycia dialektem ML. Jeśli jakiś język ma wystarczające cechy SML, może być sprzedawany jako dialekt ML. Podobnie jak "Cloud Computing", nie ma ścisłej definicji (prawdopodobnie istnieje, ale kogo to obchodzi). Obecnie produkty każdego są pochmurne. – InsaneRabbit

+0

Interesujące, miłe znalezisko z tym innym papierem, zastanawiam się czy to jest wspomniany raport techniczny: http://www.amazon.com/Edinburgh-LCF-Mechanized-Computation-Computer/dp/3540097244. Wygląda na kilka sekcji opisujących ML w spisie treści. – spacemanaki

Powiązane problemy