소스 코드에서 Ocaml을 컴파일 할 때 /boot/ocamlc
을 사용하여 .ml
파일을 컴파일합니다.ocaml 소스에서`/ boot/ocamlc` 파일의 출처는 어디입니까?
그래서 ocaml은 자체적으로 ocamlc를 사용하여 빌드합니다. 첫 번째 ocamlc
파일의 출처는 어디입니까? 첫 번째 ocamlc
바이너리를 /boot/ocamlc
없이 컴파일하려면 어떻게해야합니까?
소스 코드에서 Ocaml을 컴파일 할 때 /boot/ocamlc
을 사용하여 .ml
파일을 컴파일합니다.ocaml 소스에서`/ boot/ocamlc` 파일의 출처는 어디입니까?
그래서 ocaml은 자체적으로 ocamlc를 사용하여 빌드합니다. 첫 번째 ocamlc
파일의 출처는 어디입니까? 첫 번째 ocamlc
바이너리를 /boot/ocamlc
없이 컴파일하려면 어떻게해야합니까?
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의 아주 작은 하위 집합)를 찾아내는 것은 대개 꽤 어렵습니다. 어쩌면 어딘가에있을 수도 있습니다 ....
Xavier Leroy의 작품은 모두 "고대"라고해야하며 커밋 [61bd8ace6] (https://github.com/ocaml/ocaml/commit/)에서 시작됩니다. 61bd8ace6). – Drup
미안하지만, 나는 신화적인 효과를 얻으려고했다. Xavier Leroy의 놀라 울 정도로 훌륭한 작품을 의도하지 않았습니다. –
대단히 감사합니다! –