İki ML lehçesini birbirinden ayıran nedir?
Yanıtlar:
Pek çok farklılık var, bazıları teknik, bazıları sosyopolitik. Önce daha önemli farklılıkları koymaya çalıştım.
SML, tanımı ve standardı olan bir dildir. Kararlıdır (ve aslında donmuştur, bu yüzden gelişemez). Objective Caml, INRIA'da küçük bir grup tarafından kontrol edilen bir uygulamadır. Gelişmeye devam ediyor. (IMO, evrim iyi yönetiliyor.)
SML'nin birçok uygulaması vardır; Caml'da sadece bir tane var.
Objective Caml, aralarında muhtemelen nesneler ve polimorfik varyantlar olan bir dizi ek özelliğe sahiptir.
İki dilde önemli ölçüde farklı kayıt türleri modelleri vardır. Kısaca, Caml'de kayıt alanlarının adları benzersiz olmalıdır, burada SML'de aynı kapsamdaki iki farklı kayıt türü ortak alan adlarına sahip olabilir. Bu tuhaflık SML'den Caml'a geçişi biraz zorlaştırabilir.
Oldukça az sayıda sözdizimsel farklılık vardır.
Kitaplıklar ve standart işlevler önemli ölçüde farklıdır. Caml kitaplığı çok zorunluyken, SML Standart Temel Kitaplığı daha işlevseldir. Örneğin, işlev bileşimi, SML'de üst düzey bir ilkeldir; Caml kütüphanesinin bir parçası değil. Caml dizge kitaplığı katlama işlevi sağlamaz (en azından sürüm 3.08'den itibaren). Caml List
işlevlerinin birçoğunun uygulamaları çok uzun listelerde güvensizdir; yığını patlatırlar.
Tip sistemler kurnazca farklıdır: Caml olarak, bir deyim bir tip ek açıklama e : ty
türü ise kabul edilir ty
birleştiren türü ile e
. SML olarak, e : ty
tip yalnızca kabul edilir ty
bir olan örnek tipi e
. Bu ayrım, Caml'daki açıklamayı pratikte çok daha az kullanışlı hale getirir, çünkü bir ifadenin polimorfik olduğu konusunda ısrar etmek için bir tür ek açıklaması kullanmak imkansızdır.
Caml, arayüzler ( modül türleri veya imzalar olarak adlandırılır ) ve (somut) uygulamalar ( modüller veya yapılar olarak adlandırılır) arasında SML'den çok daha mantıklı ve mantıklı bir ilişkiye sahiptir. SML'de hemen hemen her şey gider ve iyi kurallar oluşturmak için programcıya güvenmeniz gerekir. Caml'da iyi kurallar derleyici tarafından oluşturulur ve uygulanır.
SML'de aritmetik operatörler, hem kayan nokta hem de tamsayı verilerine uygulanmak üzere aşırı yüklenir. Caml'da operatörler aşırı yüklenmez; kayan nokta operatörleri fazladan bir nokta ile belirtilir.
SML'de, programcı infix operatörlerinin önceliğini ve ilişkisini kontrol edebilir. Caml'de bunlar operatör adının ilk karakteri ile belirlenir. Bu kısıtlama, kendi infix gösteriminizi tanımlayabilmenin faydalarını sınırlar.
Editoryal yorumla birlikte daha ayrıntılı bir analiz için Adam Chlipala'nın karşılaştırma sayfasına da bakabilirsiniz .
e : 'a . ty(a)
mümkün ve anlamlı olduğu 3.12'de bir miktar hafifletildiğine dikkat edin .
Norman Ramsey'in bahsettiği sözdizimsel farklılıklarla ilgili ayrıntılar için, işte birkaç web sayfası:
OCaml, nesne yönlendirme özellikleri ekler ve bazı küçük sözdizimi farklılıklarına sahiptir.