SML ve OCaml arasındaki farklar nelerdir? [kapalı]


Yanıtlar:


157

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 Listiş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 : tytürü ise kabul edilir ty birleştiren türü ile e. SML olarak, e : tytip yalnızca kabul edilir tybir 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 .


4
Eşitliği (OCaml'de sınırsız ve güvensiz ve SML'de güvenli ancak sınırlı eşitlik türleri), genelleştirilmemiş tür değişkenlerini (OCaml'de '_a), printf'i, dosya adlarının OCaml'de modül adları olarak yorumlanmasını, OCaml'in stdlib'inde çok daha fazla körelmeyi unuttunuz. İkinci kez başka bir şeyi kastettiğinizde (uygulama?) İki kez arayüz yazdınız.
JD

1
ve OCaml or-desenleri ve desen eşleştirmede korumalar.
JD

1
Tip ek açıklamalarının kullanışlılığıyla ilgili sınırlamanın, ek açıklamanın e : 'a . ty(a)mümkün ve anlamlı olduğu 3.12'de bir miktar hafifletildiğine dikkat edin .

4
Önemli bir gözlem yaparsınız: "Caml kütüphanesi çok zorunludur". Bu, çok çekirdekli donanım üzerinde paralel uygulamanın çok zor ya da imkansız göründüğü noktaya kadar tüm felsefeye nüfuz ediyor gibi görünüyor. Buna karşılık, en az iki paralel SML vardır: Mlton ve Poly / ML.
Makarius

2
Üçüncü noktanızla ilgili olarak, kayıt adlarının OCaml'de artık benzersiz olması gerekmez.
PatJ


-3

OCaml, nesne yönlendirme özellikleri ekler ve bazı küçük sözdizimi farklılıklarına sahiptir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.