Łą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.
http://caml.inria.fr/about/history.en.html Perspektywa ze świata OCaml – camlspotter
Przypuszczam, że system typu ma najwięcej do zrobienia, dlaczego są one uważane za dialekt. Oczywiście także część składni. –