2014-06-11 2 views
0

매개 변수가없는 변형의 경우 변형없이 OCaml 정수로 저장되며 정수는 내에서 의 오름차순으로 오름차순으로 저장됩니다.OCaml에서 변형에 대한 메모리 표현

type t1 = Apple | Orange;; 

다음 peek Apple;;0peek Orange;; 반환합니다 반환합니다 나는 유형을 정의

let peek x = ((Obj.magic (Obj.repr x)):int);; 

: 예를 들어

,의는 변형의 실제 정수 값을 볼 수있는 기능 peek를 정의 할 수 1. 나는 2 유형을 정의하는 경우

그러나

type t2 = Empty | Node;; 

는 다시 peek Empty;;peek Node에 대한 01를 반환합니다.


기본적으로 변형에 대한 정수의 증가는 전역 적입니다.

그때 질문이 :

  1. OCaml의 런타임 중에 타입 정보를 유지하지 않습니다 때문에, 어떻게 정수가 정상 정수 또는 매개 변수없이 변형되는 알고 런타임 수 있습니까?

  2. OCaml 런타임은 실제로 다른 유형에 속하는 두 변종 간의 차이점을 어떻게 표현합니까? 예를 들어, 차이점을 알려주는 방법은 무엇입니까? 비어 있음은 둘 다 0이므로?

+0

예외, 열기 유형 및 다형성 변형이 서로 다릅니다. – nlucaroni

+0

@nlucaroni'open-types'은 무엇을 의미합니까? –

+0

ocaml 4.02의 새로운 기능 - http://caml.inria.fr/mantis/view.php?id=5584 – nlucaroni

답변

4

런타임은 0, AppleEmpty의 차이를 만들 수 있지만 필요하지 않습니다. 컴파일러는 Apple이 형식 t1이고 항상 t2 또는 int이 아닌 형식을 사용하도록 형식을 확인합니다. 컴파일러에서 유형을 확인한 후에는 다른 의미와 함께 사용하지 말고 Apple이라는 정수로 0이라는 정수를 사용했음을 확신하기 때문에 더 이상 필요하지 않습니다.