2017-03-10 1 views
0

소스 코드에서 Ocaml을 컴파일 할 때 /boot/ocamlc을 사용하여 .ml 파일을 컴파일합니다.ocaml 소스에서`/ boot/ocamlc` 파일의 출처는 어디입니까?

그래서 ocaml은 자체적으로 ocamlc를 사용하여 빌드합니다. 첫 번째 ocamlc 파일의 출처는 어디입니까? 첫 번째 ocamlc 바이너리를 /boot/ocamlc없이 컴파일하려면 어떻게해야합니까?

답변

4

OCaml은 오랜 역사를 가지고 있으며 항상 OCaml이 아니 었습니다. 이전에는 CAML이었고, 아마도 이전에는 다른 것이 었습니다. 어쨌든,이 모든 언어를 OCaml의 이전 형식으로 호출하면이 이야기는 대략 비슷하게 보입니다. (참고 : 필자는 거기에 없었지만 한 번 컴파일러를 만들었습니다.)

오래 전 일부 OCaml 컴파일러는 OCaml 이외의 다른 언어로 첫 번째 OCaml 컴파일러를 작성했습니다. OCaml을 가상 머신의 바이트 코드로 컴파일했습니다. 이 고대인들은 OCaml에서 컴파일러를 다시 작성하고 첫 번째 OCaml 컴파일러를 사용하여 두 번째 컴파일러 (OCaml로 작성)를 컴파일했습니다. 이로써 OCaml 컴파일러의 바이트 코드 표현이 가능해졌습니다. 그것은 본질적으로 boot/ocamlc에 있습니다.

OCaml이 아닌 다른 언어로 가상 머신 구현을 작성한다면 (C에서는 말하기를) C 컴파일러가있는 모든 시스템에서 VM을 빌드하고 실행하고 바이트 코드 OCaml 컴파일러를 실행할 수 있습니다. 따라서 C 컴파일러를 사용하는 모든 시스템에서 OCaml을 구현할 수 있습니다.

실제로 C로 코딩 된이 가상 시스템이 존재하며 ocamlrun이라고합니다.

새로운 기능을 너무 빨리 사용하지 않도록 조심한다면 OCaml로 코딩 된 두 번째 OCaml 컴파일러를 수정하고 새로운 기능을 추가 할 수 있습니다. 이전의 OCaml 컴파일러로 다시 컴파일 한 다음, 다시 컴파일하여 (개선 사항을 이용하기 위해). 이 두 컴파일 후에 컴파일러 자체를 구현하기위한 새로운 기능을 사용할 수 있습니다.

나중에이 방법으로 컴파일러를 확장하고 향상시킬 수 있으므로 보통 대상 언어의 작은 하위 집합에 대한 컴파일러부터 시작합니다. 그렇게하면 원래 언어로 많은 작업을 수행 할 필요가 없습니다. OCaml에서 코딩 된 컴파일러를 얻은 후에는 원래 컴파일러를 버려야하므로 필요 이상으로 복잡하게 만드는 것은 의미가 없습니다.

boot/ocamlc를 사용하고 싶지 않다면, 사용 가능한 다른 언어로 처음부터 자신의 OCaml-bytecode 컴파일러를 작성해야 할 것처럼 보입니다. ocamlrun으로 바이트 코드를 실행할 수 있습니다.

원래의 부트 스트랩 컴파일러 (다른 언어로 작성된 것, 아마도 오늘날의 OCaml의 아주 작은 하위 집합)를 찾아내는 것은 대개 꽤 어렵습니다. 어쩌면 어딘가에있을 수도 있습니다 ....

+1

Xavier Leroy의 작품은 모두 "고대"라고해야하며 커밋 [61bd8ace6] (https://github.com/ocaml/ocaml/commit/)에서 시작됩니다. 61bd8ace6). – Drup

+0

미안하지만, 나는 신화적인 효과를 얻으려고했다. Xavier Leroy의 놀라 울 정도로 훌륭한 작품을 의도하지 않았습니다. –

+0

대단히 감사합니다! –

관련 문제