2013-03-23 16 views

cevap

46

Anlamsal olarak yanı sıra bazı özellik farkları vardır.

  • şeffaf imza yakıştırma
  • modül düzeyi let
  • simetrik paylaşım kısıtlamaları
  • sözdizimsel türleri üzerinde functors için şeker ve değerleri

:

SML destekleri ancak OCaml Özellikleri Özellikler OCaml 4, SML değil:

  • yüksek mertebeden fanktorlar
  • özyinelemeli modüller
  • yerel modüller
  • iç içe birinci sınıf olarak
  • modülleri imzalar
  • genel modül paylaşımını (sig with module A = M)
  • module type of
değerleri

Bazı SML uygulamaları bunlardan bazılarını uzantı olarak sağlar, ancak: ör. daha yüksek mertebeden hünerler (SML/NJ, Moskova ML, Alice ML), yerel ve birinci sınıf modüller (Moskova ML, Alice ML), modül paylaşımı (SML/NJ, Alice ML), iç içe geçmiş imzalar (Moskova ML, Alice ML) ve özyinelemeli modüller (Moskova ML). SML olarak

  • , functors generatif olan, bu iki kez aynı functor uygulanması anlamına gelir:

    Semantik-bazlı, en büyük fark, özellikle functors ile ilgili olarak, tip denklik tedavisindedir Aynı argüman her zaman taze tipler verir.

    Düzenleme: OCaml 4 isteğe bağlı olarak jeneratörler üreteci yapma özelliğini ekledi.

    OCaml olarak
  • , functors aynı değişken (artı ek sözdizimsel kısıtlamalar) için iki kez aynı functor uygulayarak eş türleri üretir, yani uygulamalı bulunmaktadır. Bu semantik daha esnektir, fakat aynı zamanda soyutlamayı da kırabilir (örneğin, this paper, Bölüm 8'de verdiğimiz örneklere bakınız). OCCAL, tamamen sözdizimsel bir imza kavramına sahiptir; bu, belirli tip eşdeğerlerinin, tip sistem tarafından ifade edilemediği ve sessizce düştüğü veya ayrıldığı anlamına gelir (bkz. Örneğin, bir şaşırtıcı örnek olarak this bug).

    Düzenleme: OCaml 4,02 başvurulan hata belirli örneğin sorununu gidermek başına "modül takma adları", özel bir semantik eklendi ama sözdizimsel imzaların genel sınırlama devam etmektedir.

başka dikkate değer bir fark ocaml en modül tipi sistemi nedeniyle SML izin vermez soyut imzalar, onun iznine, (yani, tip kontrolü sona olmayabilir) undecidable olmasıdır.

+4

Birazdan * geleceğin * modül sistemlerini kullanma şansına sahip olmanız gerektiğini düşünüyorum, ya da daha net olarak, bu özellik kümelerinin bir sonraki temizlikte modül sistemlerine ilişkin "son" (çoğunlukla sizinki) araştırmanızın makul bir başlangıcını değiştirecek şekilde değişmesi ML dilinin tekrarı. Bu çok ilginç bir cevabı * son derece ilginç bir cevaba dönüştürür. – gasche

+4

Ben bunun için soruya piggyback uygunsuz hissettim;). Benim kişisel cevabım, yukarıda bağladığım F-ing modülleri kağıdında oldukça fazla olurdu - listelenen özelliklerin tümünü temiz ve (oldukça) basit bir şekilde (hem üretken hem de uygulamalı funktörler dahil), eksi özyinelemeli modülleri de içeriyor. Onlar için çok emin değilim. OCaml'ın özyinelemeli modülleri benim için çok fazla geçici ve sınırlı, fakat kapsamlı bir yaklaşım sonuçta MixML kağıdında tanımladığımız gibi ML modüllerini oluşturan şeylerin büyük bir kısmının terk edilmesine yol açacaktır. Jüri hala buna değip değmeyeceği konusunda. –

+0

@AndreasRossberg MixML bağlamında büyük kısım ML modüllerini terk ederek ne kastettiğinizden emin değilim, belirtmiş olduğunuz kağıtta ML modüllerinin MixML spektrumunda son noktalar olarak görülebileceğini vurgulamıştım. (Beni yanlış yaparsam, yapı modülleri için temel fikir, parametrelendirmeden ziyade fibriyondu) – fedvasu

2

Anlambilim söz konusu olduğunda, yukarıda Andreas Rossberg tarafından çok daha iyi ve ayrıntılı bir cevap verilmektedir. Ancak, sözdizimi this site ile ilgili aradığınız şey olabilir.

+4

ve bu site aynı zamanda Andreas Rossberg'in işi! – fedvasu

İlgili konular