Синтаксическая ошибка OCaml Shebang - PullRequest
2 голосов
/ 29 сентября 2011
$ 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 разрешает шебанги в режиме сценариев, но не работает в режиме компиляции. Есть ли в OCaml более идиоматический шебанг, который не вызывает синтаксическую ошибку во время компиляции?

Ответы [ 2 ]

3 голосов
/ 29 сентября 2011

Нет известной мне директивы, которая бы работала как с компилятором верхнего уровня, так и с компиляторами OCaml, но вы можете использовать ocamlscript в качестве промежуточного параметра.

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

ocamlscript использует ocamlfind + ocamlopt в фоновом режиме для (повторной) компиляции кода при его выполнении. С установленным ocamlscript вы можете использовать:

#!/usr/bin/env ocamlscript

Это не дает вам прямой совместимости на верхнем уровне, но позволяет вам избежать отдельного этапа компиляции со многими программами. На сайте есть достойная документация и примеры.

1 голос
/ 01 октября 2011

Просто используйте sed в качестве препроцессора. Чтобы удалить шебанг в первой строке, если он найден, передайте:

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

до ocamlc или ocamlopt.

...