如何运行OCaml+;核心脚本?

如何运行OCaml+;核心脚本?,ocaml,Ocaml,我正在尝试真实世界的OCaml书籍。它讨论了如何安装OPAM,然后是OCaml和Jane Street Core。我按照书中的说明正确加载了utop,这样它就能自动加载核心 没有Core,我可以通过OCaml script.ml运行一个通用的OCaml脚本,而无需编译。但是,如果脚本使用核心,则这不起作用。如果要在不编译的情况下运行基于核心的OCaml脚本,正确的命令是什么?运行依赖于其他库的脚本需要告诉编译器在哪里可以找到库。最好的选择是使用ocamlscript,也可以使用OPAM安装。只需

我正在尝试真实世界的OCaml书籍。它讨论了如何安装OPAM,然后是OCaml和Jane Street Core。我按照书中的说明正确加载了utop,这样它就能自动加载核心


没有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遇到的错误是由于使用带有OPAM
system
开关的ocamlscript造成的。如果您执行opam开关4.02.1
并编译一个本地编译器,那么它就会工作。该bug已在ocamlscript的上游修复,并请求了一个新版本,将在中修复它