开始使用OCaml
编辑教程开始使用OCaml
在Windows上安装(本机)
前提
这些说明显示了在Windows中安装本机OCaml二进制文件的过程。如果你的操作系统是Windows 10 (Insider Preview) build 14316 或更高版本,你也可以在Windows上的Ubuntu上通过Bash安装OCaml。在这种情况下,请按照说明在Ubuntu上安装OCaml。
安装OCaml和Opam
下载OCaml官方发行版 。它包含OCaml编译器和Opam数据包管理器。假设您已在C:/OCaml 安装了该软件。为了确保你已经正确安装了OCaml open cmd.exe 并输入ocaml 。
如果您看到消息'ocaml' is not recognized as an internal or external command, operable program or batch file ,则需要将C:/OCaml/bin 到路径(环境变量)。
将OCaml二进制文件添加到路径
在Control Panel > System and Security > System > Advanced system settings (on the left) > Environment Variables ,然后选择System Variable 选项卡中的Path ,然后选择Edit 。
添加C:/OCaml/bin; 到列表。
安装Cygwin
没有Cygwin你就不能使用Opam。事实上,如果你尝试在cmd.exe 打开Opam输入opam ,它会显示一条消息: Fatal error: exception Unix.Unix_error(20, "create_process", "cygcheck") 。
下载Cygwin并启动安装程序。请务必检查以下包裹:
- Automake
- Diffutils
- libreadline
- send
- M4
- mingw64-x86_ GCC core of 64
- mingw64-x86_ 64 - GMP
- mingw64-x86_ 64, OpenSSL
- mingw64-x86_ - PKG configuration of 64
- mingw64-x86_ 64 - SQLite3
- patch
- rlwrap
- Open the zipper
- WGet's
假设您已在C:/cygwin ( C:/cygwin64 for 64bit版本)中安装了该软件。打开cmd 并键入wget (或C:/cygwin/bin 存在的可执行文件之一)以检查是否可以使用Cygwin可执行文件。如果可执行文件无法打开,请将C:/cygwin/bin 到Path(环境变量)。
配置Opam
打开cmd.exe 并键入opam init 以配置Opam。
然后安装ocamlfind (OCaml编译器的一部分)
opam install ocamlfind
opam config env
检查是否安装了ocamlfind ,在cmd.exe 键入它。
命令opam config env 用于将opam 的可执行文件目录添加到环境路径。如果在注销后你无法再访问ocamlfind ,你可以手动添加它添加到路径中的以下行: C:/Users/
安装包
使用命令opam install xyz 通过Opam安装软件包,其中xyz 是软件包的名称。
安装UTop
尝试运行命令opam install utop 。如果没有错误,则键入utop 将打开可执行文件。
如果你看到了这条消息
[ERROR] The compilation of zed failed at "ocaml setup.ml -build".
你必须手动安装单个包。再试一次输入:
opam install zed
opam install lambda-term
opam install utop
lambda-term 和utop 可能无法安装。请参阅“疑难解答”部分。
安装Core 您可以使用opam install core 安装core 软件包。在Windows 64位版本(和64位Cygwin)上,您将看到以下错误:
[ERROR] core is not available because your system doesn't comply with os != "win32" & ocaml-version = "4.02.3".
疑难解答:无法创建常规文件 如果名称为xyz.10.1 软件包无法安装(其中xyz是软件包的名称,其版本为10.1),并显示以下消息:
install: cannot create regular file '/cygdrive/c/Users/<your user>/Documents/.opam/system/bin/<something>': File exists
你必须进入这个目录:
C:\Users\<your user>\Documents\.opam\repo\default\packages\<xyz>\<xyz.10.1>\files
并删除文件xyz.10.1.install 。
疑难解答:无法加载共享库 如果你试图打开一些Opam的包(例如: utop ),你会看到这个错误:
Fatal error: cannot load shared library dlllwt-unix_stubs
Reason: The specified module could not be found.
再次运行opam config env 并尝试重新打开可执行文件。
安装或设置
安装OPAM OPAM是OCaml的包管理器。它可以轻松地为您构建和管理编译器版本和OCaml库。
在操作系统上安装OPAM的最简单方法是使用系统的软件包管理器。例如apt-get,yum或homebrew。
Mac OSX安装说明
更新自制程序并安装OPAM。
brew update
brew install opam
Ubuntu安装说明
add-apt-repository ppa:avsm/ppa
apt-get update
apt-get install ocaml opam
从源代码编译
wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz
tar xf ocaml-4.03.0.tar.gz
cd ocaml-4.03.0
./configure -prefix installation_path
make world.opt
make install
初始化OPAM
安装OPAM后,运行opam init 并按照说明操作。
完成后,您应该能够从shell运行OCaml解释器。
$ ocaml
OCaml version 4.03.0
#
你在OCaml的第一个项目
既然OCaml发行版可以在您最喜欢的操作系统上使用,我们可以在OCaml中创建您的第一个程序:Hello World!
我们有不同的方式来启动OCaml程序。
REPL(顶级)
您可以使用顶层以 交互方式执行代码。使用OCaml toplevel ,您可以编写和执行OCaml代码,作为UNIX shell。之后, 顶层会立即检查您的代码类型。因此,您可以快速轻松地测试代码的某些部分,而无需编译和执行。
您可以使用ocaml 命令启动顶层 。然后,你可以写一个OCaml 句子结束;; 立即评估。 toplevel显示表达式的类型和值, 紧接着 :
# "Hello Worlds!";;
- : string = "Hello Worlds!"
也可以在文件上启动顶层 。你可以看到这个解释 。
为了方便您在顶层输入,你可以像使用工具ledit 或rlwrap 提供了一些功能(如输入历史):
$ ledit ocaml
$ rlwrap ocaml
编译为字节码
我们有两个不同的编译器,一个编译为字节码 ,另一个编译为本机代码。第一个与Java虚拟机的字节码相同。因此, 字节码效率较低,但更便携。
我们有一些OCaml编译器使用的扩展文件:
延期 | 定义 |
---|---|
.ml | 源代码(以C表示.c ) |
.mli | 接口(如C中的.h ) |
.cmo | 由ocamlc 在字节码中编译的源代码 |
.cmi | 接口代码由ocamlc 编译 |
.cmx 和.o | 由ocamlopt 在本机代码中编译的源代码 |
.cma | 字节码中的库(一些*.cmo 桶) |
.cmxa 和.a | 本机代码中的库 |
.cmxs | 本机代码中的库(加载动态) |
字节码编译器是ocamlc 。
您有不同的常见选项:
-c :编译没有链接过程的源文件(生成可执行文件)。因此,命令ocaml -c foo.ml 生成.cmo 文件。与不需要编译头文件的C不同,在OCaml中编译.mli 文件是必要的: ocaml -c foo.mli 。 您需要先编译接口。之后编译源文件时,OCaml会尝试检查实现是否与接口匹配。
.mli 文件不是强制性的。如果编译没有.ml 文件的.mli 文件,OCaml将自动生成.cmi 文件。
-o :将一些.cmo 文件编译为可执行文件。例如: ocamlc -o program foo.cmo bar.cmo 。这些文件需要由第一个文件没有依赖关系的依赖项排列。
-I :表示编译器可以找到编译所需文件的其他目录(如接口或源代码)。它与C编译器中的-I 相同。
我们还有很多其他选择。您可以查看手册以获取更多信息。
因此,您现在可以编写hello.ml ,并使用ocamlc -o hello hello.ml 编译此文件以生成字节码程序:
let () = print_endline "Hello World!"
let () = ... 是程序的第一个条目(就像C中的main 一样)。之后,我们使用函数print_endline (由标准库提供)和参数"Hello World!" 使用标准输出中的换行符打印Hello Worlds 。
编译之后,您将获得编译器和程序hello 自动生成的.cmo 文件和.cmi 文件。您可以打开您的程序,在此文件的顶部,您可以看到:
#!/usr/local/bin/ocamlrun
这意味着您的程序需要ocamlrun 程序(由发行版提供)来执行字节码 (如JVM)。
编译到本机代码
我们有另一个生成本机代码的编译器。编译器是: ocamlopt 。但是,生成的可执行文件无法在大多数其他体系结构上运行。
ocamlopt 使用与ocamlc 相同的选项,因此您可以执行ocamlopt -o hello hello.ml 。之后,您可以看到.cmx 和.o 文件。
最后,从您的字节码 /本机代码程序中,您可以执行:
$ ./hello
Hello World!
$
选择支付方式:
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间