2013-03-23 2 views

답변

46

기능적으로나 의미 적으로는 몇 가지 차이점이 있습니다.

  • 투명 서명 귀속
  • 모듈 수준 let
  • 대칭 공유 제약
  • 구문 유형에 걸쳐 펑 설탕과 값

:

는 SML 지원하지만 OCaml의 특징 특징 OCaml 4는 SML이 아니지만 :

,
  • 고차 펑
  • 재귀 모듈
  • 로컬 모듈
  • 중첩 일류 같은
  • 모듈 서명
  • 일반 모듈 공유 (sig with module A = M)
  • module type of

여러 가지 SML 구현은 이러한 기능 중 일부를 확장 기능으로 제공합니다. (SML/NJ, Alice ML), 모듈 공유 (SML/NJ, Alice ML), 중첩 서명 (Moscow ML, Alice ML)과 같은 상위 펑터 (SML/NJ, 모스크바 ML, 앨리스 ML) , 재귀 모듈 (Moscow ML) 등이있다. SML에서

  • , 펑은 생식이다, 즉 두 번 동일한 펑인가 수단 :

    의미 와이즈, 가장 큰 차이는, 특히 펑에 대해 입력 등가의 치료에 같은 논증은 언제나 신선한 유형을 산출한다.

    편집 : OCaml 4는 선택적으로 펑터 생성 기능을 추가했습니다.

    를 OCaml에서
  • , 펑 똑같은 인자 (및 추가 통사 제한)로 두 번 같은 펑을 적용하는 등가 유형의 재생 즉, 실용적이다. 이 의미론은보다 유연하지만 추상화를 깨뜨릴 수도 있습니다 (예 : this paper, 섹션 8에있는 예 참조).

  • OCaml의 특정 유형 동등한 항목 유형 시스템에 의해 표현 될 수없고, 자동으로 삭제되거나 (예컨대 this bug 하나 놀라운 예 참조) 망가 것을 의미 서명 순수 통사 개념을 갖는다.

    편집 : OCaml 4.02는 참조 된 버그의 특정 예를 수정하는 "모듈 별칭"에 대한 특별한 의미를 추가했지만 구문 서명의 일반적인 제한은 지속됩니다.

또 다른 주목할만한 차이점은 OCaml로의 모듈 형 시스템으로 인해 SML 허용하지 않는 추상적 인 서명, 자사의 허락에, (즉, 타입 검사가 종료되지 않을 수 있습니다) 결정 불가능하다는 것이다.

+4

다음 클린업에서 모듈 시스템에 대한 "최근"(주로 당신) 연구에 대한 합리적인 시작을 가정 할 때, 미래의 * 모듈 시스템, 또는 더 정확하게는 이러한 기능 세트가 변경 될 수있는 방법에 대해 약간의 기회를 가져야한다고 생각합니다. ML 언어의 반복. 그것은 매우 재미있는 해답으로 매우 흥미로운 대답이 될 것입니다. – gasche

+4

나는 그 질문에 피기 백하는 것이 부적절하다고 생각했다;). 필자의 개인적인 대답은 위에 링크 된 F-ing 모듈에있는 내용 일 것입니다. 나열된 모든 기능을 깨끗하고 (상당히) 간단한 방식 (생성 및 적용 가능한 펑터 모두 포함)에서 재귀 모듈 빼기로 포함합니다. 나는 그렇게 확신하지 못합니다. OCaml의 재귀 모듈은 너무 미숙하고 제한적이지만, 포괄적 인 접근 방식은 궁극적으로 MLML을 구성하는 요소의 대부분을 포기하게됩니다. 배심원 단은 가치가 있는지 여부에 관해 아직 나와 있지 않습니다. –

+0

@AndreasRossberg MixML과 관련하여 주요 부분 ML 모듈을 포기 함으로서 당신이 무엇을 의미하는지 모르겠다. 필자가 언급 한 논문에서 ML 모듈은 MixML 스펙트럼의 끝점으로 볼 수 있다고 정교하게 설명했다. (내가 틀렸다면, 모듈을 만드는 기본 아이디어는 매개 변수화가 아닌 진동에 의한 것이었다.) – fedvasu

2

의미에 관해서는 훨씬 더 정교한 대답이 위의 Andreas Rossberg에 의해 제공됩니다. 그러나 구문과 관련하여 this site이 당신이 찾고있는 것일 수 있습니다.

+4

이 사이트는 Andreas Rossberg의 작품이기도합니다! – fedvasu