SML과 OCaml의 차이점은 무엇입니까? [닫은]


답변:


157

많은 차이가 있습니다. 일부는 기술적이고 일부는 사회 정치적입니다. 더 중요한 차이점을 먼저 두려고 노력했습니다.

  • SML은 정의와 표준이있는 언어입니다. 안정적입니다 (실제로 얼어 진화 할 수 없습니다). Objective Caml은 INRIA의 소규모 그룹에서 제어하는 ​​구현입니다. 계속 진화하고 있습니다. (IMO 진화는 잘 관리됩니다.)

  • SML에는 많은 구현이 있습니다. Caml은 하나만 있습니다.

  • Objective Caml에는 여러 가지 추가 기능이 있으며 그중 가장 두드러진 기능은 아마도 객체 및 다형성 변형 일 것입니다.

  • 두 언어는 극적으로 다른 레코드 유형 모델을 가지고 있습니다. 간단히 말해 Caml에서 레코드 필드의 이름은 고유해야합니다. SML에서는 동일한 범위에있는 두 개의 다른 레코드 유형이 공통 필드 이름을 가질 수 있습니다. 이 기이 한 점은 SML에서 Caml로 포팅하는 것을 약간 까다로울 수 있습니다.

  • 구문상의 차이가 꽤 있습니다.

  • 라이브러리와 표준 기능은 크게 다릅니다. Caml 라이브러리는 매우 필수적인 반면 SML Standard Basis Library는 더 기능적입니다. 예를 들어, 함수 구성은 SML의 최상위 기본 요소입니다. Caml 라이브러리의 일부가 아닙니다. Caml 문자열 라이브러리는 접기 기능을 제공하지 않습니다 (적어도 3.08 버전에서는 제공되지 않음). 많은 Caml List함수 의 구현은 매우 긴 목록의 경우 안전하지 않습니다. 그들은 스택을 날려 버립니다.

  • 타입 시스템은 미묘하게 다르다 :의 Caml에서, 표현의 유형 주석 e : ty유형의 경우 허용됩니다 ty 통합하여 의 유형 e. SML에서는 e : ty유형 ty이 유형 의 인스턴스 인 경우에만 허용됩니다 e. 이 구분은 실제로 표현이 다형성이라고 주장하기 위해 타입 어노테이션을 사용하는 것이 불가능하기 때문에 Caml의 어노테이션을 실제로 덜 유용하게 만듭니다.

  • Caml은 SML보다 인터페이스 ( 모듈 유형 또는 서명 이라고 함 )와 (구체적인) 구현 ( 모듈 또는 구조 라고 함) 간에 훨씬 더 건전하고 합리적인 관계를 가지고 있습니다 . SML에서는 거의 모든 것이 진행되며 좋은 규칙을 수립하기 위해 프로그래머에게 의존해야합니다. Caml에서는 컴파일러가 좋은 규칙을 설정하고 적용합니다.

  • SML에서 산술 연산자는 부동 소수점 및 정수 데이터 모두에 적용되도록 오버로드됩니다. Caml에서 연산자는 과부하되지 않습니다. 부동 소수점 연산자는 추가 점으로 표시됩니다.

  • SML에서 프로그래머는 중위 연산자의 우선 순위와 연관성을 제어 할 수 있습니다. Caml에서 이들은 운영자 이름의 첫 번째 문자로 결정됩니다. 이 제한은 자신의 중위 표기법을 정의 할 수있는 이점을 제한합니다.

편집자 의견이 포함 된 더 자세한 분석을 보려면 Adam Chlipala의 비교 페이지를 참조하십시오 .


4
평등 (OCaml에서는 제한되지 않고 안전하지 않음 대 SML에서는 안전하지만 제한적인 평등 유형), 일반화되지 않은 유형 변수 (OCaml에서는 '_a), printf, OCaml에서 파일 이름을 모듈 이름으로 해석, OCaml의 stdlib에서 훨씬 더 커링을 잊어 버렸습니다. 두 번째로 다른 것을 의미 (구현?) 할 때 인터페이스를 두 번 작성했습니다.
JD

1
그리고 OCaml의 or- 패턴과 패턴 매칭의 가드.
JD

1
주석 e : 'a . ty(a)이 가능하고 의미있는 3.12에서는 유형 주석의 유용성에 대한 제한이 다소 완화되었습니다 .

4
당신은 중요한 관찰을합니다 : "Caml 라이브러리는 매우 중요합니다". 이것은 멀티 코어 하드웨어에서 병렬 구현이 매우 어렵거나 불가능 해 보일 정도로 전체 철학에 스며 든 것 같습니다. 이와 대조적으로 Mlton과 Poly / ML의 두 개 이상의 병렬 SML이 있습니다.
Makarius

2
세 번째 요점에 대해, 레코드 이름은 더 이상 OCaml에서 고유성을 요구하지 않습니다.
PatJ 2015


-3

OCaml은 객체 지향 기능을 추가하고 약간의 구문 차이가 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.