2011-09-29 4 views
2
$ cat hello.ml 
#!/usr/bin/env ocamlrun ocaml 

let rec main = print_string "Hello World!\n" 

$ ./hello.ml 
Hello World! 

$ ocaml hello.ml 
Hello World! 

$ ocamlc -o hello hello.ml 
File "hello.ml", line 1, characters 0-1: 
Error: Syntax error 

$ ocamlopt -o hello hello.ml 
File "hello.ml", line 1, characters 0-1: 
Error: Syntax error 

Erlang과 유사하게 OCaml은 스크립트 모드에서는 shebang을 허용하지만 컴파일 모드에서는 borks를 허용합니다. 컴파일 중에 구문 오류를 유발하지 않는 OCaml에 더 관용적 인 표현이 있습니까?OCaml shebang 구문 오류

답변

1

전 처리기로 sed 만 사용하면됩니다. 첫 번째 줄에 오두막을 제거하려면, 발견하는 경우, 통과 :

-pp 'sed "1 s/^#\!.*$//"' 

ocamlc 또는 ocamlopt에.

+0

감사합니다. OCaml 사용자가 shebang 행을 처리하기 위해 특별한 컴파일 플래그를 사용하도록 요구하고 싶지는 않겠지 만,이 작업을하게되어 기쁩니다. – mcandre

+0

컴파일러가 자동으로 약자를 제거하면 멋질 것입니다. 어쩌면 향상 요청 일 수도 있습니다. –

+0

그들에게 물어봐도 될까요? 너는 더 많은 것을 알기 때문에 그들은 당신의 말을 듣는다. – mcandre

3

최상위 컴파일러와 OCaml 컴파일러 모두에서 작동하는 지시어는 없지만 중간 옵션으로 ocamlscript를 사용할 수 있습니다.

http://martin.jambon.free.fr/ocamlscript.html

ocamlscript는 실행시 (재) 코드를 컴파일의 배경에 ocamlfind + ocamlopt를 사용합니다.

#!/usr/bin/env ocamlscript 

그것은 당신에게 직접 최상위 호환성을 제공하지 않습니다,하지만 당신은 많은 프로그램과 별도의 컴파일 단계를 피할 수 있습니다 : ocamlscript 설치, 당신은 사용할 수 있습니다. 이 웹 사이트에는 적절한 문서와 예제가 있습니다.

+0

바, Mac OS X에서 ocamlscript가 컴파일되지 않습니다. 오류 : 'ocamlfind'를 찾을 수 없습니다. – mcandre

+1

ocamlfind가 설치되어 있습니까? ocamlscript에 필요합니다. – hcarty

+0

OCaml의 표준 인 ocamlfind를 꼭 갖고 있어야하며 항상 가지고 있어야합니다. Mac에서는 항상 문제없이 ocamlscript를 사용합니다. –