如何运行OCaml+;核心脚本?
我正在尝试真实世界的OCaml书籍。它讨论了如何安装OPAM,然后是OCaml和Jane Street Core。我按照书中的说明正确加载了utop,这样它就能自动加载核心如何运行OCaml+;核心脚本?,ocaml,Ocaml,我正在尝试真实世界的OCaml书籍。它讨论了如何安装OPAM,然后是OCaml和Jane Street Core。我按照书中的说明正确加载了utop,这样它就能自动加载核心 没有Core,我可以通过OCaml script.ml运行一个通用的OCaml脚本,而无需编译。但是,如果脚本使用核心,则这不起作用。如果要在不编译的情况下运行基于核心的OCaml脚本,正确的命令是什么?运行依赖于其他库的脚本需要告诉编译器在哪里可以找到库。最好的选择是使用ocamlscript,也可以使用OPAM安装。只需
没有Core,我可以通过
OCaml script.ml
运行一个通用的OCaml脚本,而无需编译。但是,如果脚本使用核心,则这不起作用。如果要在不编译的情况下运行基于核心的OCaml脚本,正确的命令是什么?运行依赖于其他库的脚本需要告诉编译器在哪里可以找到库。最好的选择是使用ocamlscript
,也可以使用OPAM安装。只需执行opam安装ocamlscript。然后阅读有关ocamlscript的内容。下面是一个工作示例:
$ cat a.ml
#! /usr/bin/env ocamlscript
Ocaml.ocamlflags := ["-thread"];
Ocaml.packs := [ "core" ]
--
open Core.Std
let () = print_endline "hello"
确保a.ml
设置了可执行位。然后运行它:
$ ./a.ml
hello
另外,
ocamlscript
还编译为本机代码,因此您可以获得高性能的脚本。我尝试了ocamlscript
,但出现了错误:“找不到文件topfind。”
并且$OCAML\u topflevel\u路径已设置。你知道怎么解决这个问题吗?顺便说一句,我用opam1.1.0安装了ocamlscript
,我的.ocamlinit
是这样的:这很奇怪。.ocamlinit文件仅由交互式toploop加载。OCamlscript没有加载它,所以我不明白为什么要搜索topfind。你试过我提供的例子吗?在这里也可以看到我的答案[1]。[1] OCamlscript
难道不是OCaml顶级运行时系统的包装器吗?我一直认为OCamlscript
肯定会加载.ocamlinit
。如果不使用topfind,它如何打开其他库,如Core.Std?我不熟悉它的实现,所以可能我错了。我在这里也问了一个类似的问题:。@WeiLi不,ocamlscript不使用顶级。在脚本的标题中告诉它需要使用哪些库。然后,它使用适当的标志调用ocaml编译器。@WeiLi遇到的错误是由于使用带有OPAMsystem
开关的ocamlscript造成的。如果您执行opam开关4.02.1
并编译一个本地编译器,那么它就会工作。该bug已在ocamlscript的上游修复,并请求了一个新版本,将在中修复它