【问题标题】:How to use Jane Street's Core with Reason?如何使用 Jane Street 的 Core with Reason?
【发布时间】:2016-09-27 00:52:11
【问题描述】:

我是 OCaml 的新手,我正在尝试 (:P) Facebook Reason 语法。我找不到编译的方法,因为如果找不到核心模块(已经安装了 opam)。

我正在尝试从 Real World OCaml 编译示例程序

open Core.Std;

let rec read_and_accumulate accum => {
  let line = In_channel.input_line In_channel.stdin;
  switch line {
    | None => accum
    | Some x => read_and_accumulate (accum +. Float.of_string x)
  }
};

let () = printf "Total: %F\n" (read_and_accumulate 0.);

这是我用于编译的命令:rebuild accum.native

当我在_tags 中有这个时(来自https://janestreet.github.io/installation.html 中的说明)

true: package(core,ppx_jane)
true: thread,debug

我的错误发生了变化,但我仍然不知道该怎么办:

File "_tags", line 1, characters 6-28:
Warning: tag "package" does not expect a parameter, but is used with parameter "core,ppx_jane"
File "_tags", line 1, characters 6-28:
Warning: the tag "package(core,ppx_jane)" is not used in any flag or dependency declaration, so it will have no effect; it may be a typo. Otherwise you can use `mark_tag_used` in your myocamlbuild.ml to disable this warning.
+ /Users/David/.opam/4.02.3/bin/ocamldep.opt -modules -pp refmt -impl accum2.re | tee accum2.re.depends accum2.ml.depends
accum2.re: Core Float In_channel
+ /Users/David/.opam/4.02.3/bin/ocamlc.opt -c -g -thread -pp '-g -thread' -pp refmt -o accum2.cmo -intf-suffix .rei -impl accum2.re
File "accum2.re", line 1, characters 5-13:
Error: Unbound module Core
Command exited with code 2.
Compilation unsuccessful after building 2 targets (0 cached) in 00:00:00.

我必须做些什么才能将 Core 与 Reason 一起使用?

采用语法非常简单,我只阅读了几个小时,但关于如何为非 OCaml 用户使用 Reason 的文档为零。

【问题讨论】:

  • 问这个问题后你有没有编译过?我目前正在努力解决同样的问题。
  • 恐怕不行。仍然坚持相同的步骤。如果不深入了解 OCaml 工具,这是不可能的。这与重建的内容有关,但它是一个 bash 脚本,围绕 ocamlbuild 做了很多事情,所以我不知道大部分输出的含义。 :(

标签: ocaml ocamlbuild reason


【解决方案1】:

基本上https://janestreet.github.io/installation.html 中指示的标签必须添加加上三个用于这种情况的标志和值:

  • -linkpkg 我假设的静态链接
  • -pp refmt 表示 ReasonML 预处理器
  • -impl file.re 告诉你要读取什么文件

因此,如果文件名为 accum.re,则可以使用以下命令将其编译为本机二进制文件:

ocamlfind ocamlc -g -thread -package ppx_jane -package core -pp refmt -linkpkg -o accum.native -impl accum.re

【讨论】:

    【解决方案2】:

    Reason 存储库中似乎最近出现了bug fix 的问题。基本上,由于rebuild 原来是reasonbuild 的包装,因此可以通过直接运行reasonbuild 来解决该错误:

    env OCAMLFIND_COMMANDS="ocamlc=$(which reopt)" reasonbuild -use-ocamlfind accum.native
    

    事实上,reasonbuild -use-ocamlfind accum.native 也适用于此。

    【讨论】:

    • 这是从头开始的吗?或者这是稳定的?在 0.6 中我认为它仍然不起作用
    • 从 GitHub repo 看来这目前仅在 master 中,可以使用 OPAM 从这个提交中安装原因,例如opam pin add -y reason 'https://github.com/facebook/reason.git#44aa9f4695e14c247c29c4fbc98ca10dcf332eab',但由于这不是一个版本,因此可能不推荐
    【解决方案3】:

    我猜rebuild 是 ocamlbuild 的封装。只需使用参数-use-ocamlfind 调用它即可。

    【讨论】:

    • 这确实是我的想法,但这并不是一个解决方案。如果您能提供真正的迹象,将不胜感激。我尝试使用-pkg core 也使用-use-ocamlfind 没有任何运气。
    猜你喜欢
    • 2013-10-22
    • 2018-03-15
    • 1970-01-01
    • 2019-12-18
    • 2018-11-19
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多