使用 VScode 和终端进行 OCaml 交互式开发的适当做法

Appropirate practices for OCaml interactive development using VScode and the terminal

我想知道在 Ocaml(在 MAC 中)编程是一种舒适的方式。

我目前正在使用 VSCode 来检测语法和类型错误,但后来我使用在线解释器来编译(它创建 ml)并在其上生成 运行 示例;我的意思是,实例化变量,测试示例等。例如,我使用在线: https://try.ocamlpro.com/.

我知道这不是最好的方法:例如,如果一个包没有集成(假设 num),我无法 opam install num 打开它。

所以我想知道哪个是同时拥有 (1) 像 VSCode 这样的酷界面和 (2) 即时编译 + 测试东西的合适选择。

我想我接近下一个选项:我在终端中输入 ocaml 然后打开一个模式:

OCaml version 4.10.2
#
#
#

...

在那里,我可以写:#open Num;; #open List;; #let...但我不知道如何加载文件。

也有人告诉我有一个叫“utop”的东西,我看过了,对我来说似乎很高级。

感谢任何帮助!

dune that offers dune utop 命令完全支持这种开发模式,该命令将自动构建您的项目,link 它以顶层启动,并使用所有可用的模块(和外部依赖项)启动它。

现在,如果您还没有使用 dune,您可能想知道如何开始使用它。虽然 dune 文档很好而且详尽,但没有人愿意花几个小时学习 Dune,如果他们唯一想要的就是玩 OCaml。所以这是快速提示,要创建一个准备好 运行 OCaml 代码,请使用 dune init,例如,

dune init proj play 

这将创建一个 play 文件夹,其中包含完全可以使用的完整 OCaml 项目框架。那么让我们进入吧,

cd play

现在我们可以轻松构建和运行我们的项目,

dune exec play

我们在 lib 文件夹中也有 play 库。它是空的,但您可以在那里创建任何文件,它们将在您的 bin/main.mldune utop 中可用,例如,让我们创建一个简单的模块,

(* file lib/say.ml *)

let hello () = print_endline "Hi!"

然后我们可以在我们的可执行文件中使用它,

(* file bin/main.ml *)

let () = Play.Say.hello ()

我们可以使用我们的库在 OCaml 顶层进行游戏,例如,

$ dune utop 

然后在 utop shell

utop # Play.Say.hello ();;
Hi!
- : unit = ()

那么vscode呢?到目前为止,我们在控制台中进行了操作,但是 vscodeocaml-platform 可以在不离开您的编辑器的情况下完成此操作。您甚至可以 select 段代码并发送顶层(默认键绑定是 Shift-Enter),从而实现交互式和迭代、自下而上的开发。