【问题标题】:How to run OCaml + Core script?如何运行 OCaml + Core 脚本?
【发布时间】:2013-12-06 20:02:30
【问题描述】:

我正在尝试 Real World OCaml 书。它谈到了安装 OPAM,然后是 OCaml 和 Jane Street Core。我按照书中的说明正确加载了 utop,以便它自动加载 Core。

没有Core,我可以通过ocaml script.ml 运行一个通用的OCaml 脚本而无需编译。但如果脚本使用 Core,这将不起作用。如果我想在不编译的情况下运行基于 Core 的 OCaml 脚本,正确的命令是什么?

【问题讨论】:

    标签: ocaml


    【解决方案1】:

    运行依赖于其他库的脚本需要您告诉编译器在哪里可以找到这些库。您最好的选择是使用ocamlscript,您也可以使用 OPAM 安装它。只需执行opam install ocamlscript。然后阅读 ocamlscript here。这是一个工作示例:

    $ 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,但得到了错误:"Cannot find file topfind." 并且$OCAML_TOPLEVEL_PATH 已经设置好了。你知道如何解决这个问题吗?顺便说一句,我用opam 1.1.0安装了ocamlscript,我的.ocamlinit是这样的:gist.github.com/seckcoder/8234822
    • 这很奇怪。 .ocamlinit 文件仅由交互式顶部循环加载。 OCamlscript 不加载它,所以我不明白为什么要搜索 topfind。您是否完全按照我提供的示例进行了尝试?也可以在这里查看我的答案[1]。 [1]stackoverflow.com/questions/20765452/…
    • OCamlscript 不只是 OCaml 顶级运行时系统的包装器吗?我一直认为OCamlscript 肯定会加载.ocamlinit。不使用topfind,怎么能打开Core.Std等其他库呢?我不熟悉它的实现,所以也许我错了。我在这里也问过类似的问题:stackoverflow.com/questions/20900465/….
    • @WeiLi 不,ocamlscript 不使用顶层。您在脚本的标题中告诉它您需要使用哪些库。然后它使用适当的标志调用 ocaml 编译器。
    • @WeiLi 遇到的错误是由于使用带有 OPAM system 开关的 ocamlscript。如果您执行opam switch 4.02.1 并编译本地编译器,那么它将起作用。该错误已在 ocamlscript 的上游修复,并要求新版本将在 github.com/mjambon/ocamlscript/commit/… 中修复它
    猜你喜欢
    • 1970-01-01
    • 2021-08-19
    • 2022-08-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多