OCamlНачало работы с OCaml


замечания

В этом разделе представлен обзор того, что такое ocaml, и почему разработчик может захотеть его использовать.

Следует также упомянуть о любых крупных предметах в рамках ocaml и ссылаться на связанные темы. Поскольку документация для ocaml нова, вам может потребоваться создать начальные версии этих связанных тем.

Установка на Windows (родной)

посылка

В этой инструкции показана процедура установки собственных исполняемых файлов OCaml в Windows. Если ваша операционная система - Windows 10 (Insider Preview) build 14316 или более поздняя Windows 10 (Insider Preview) build 14316 вы также можете установить OCaml через Bash на Ubuntu в Windows . В этом случае следуйте инструкциям по установке OCaml на Ubuntu.

Установите 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 затем выберите вкладку « Path в System Variable », затем « Edit .

Добавить C:/OCaml/bin; к списку.

Установка Cygwin

Без Cygwin вы не можете использовать Opam. На самом деле, если вы попытаетесь открыть Opam, набрав opam в cmd.exe появится сообщение: Fatal error: exception Unix.Unix_error(20, "create_process", "cygcheck") .

Загрузите Cygwin и запустите программу установки. Обязательно проверьте следующие пакеты:

  • Automake
  • Diffutils
  • libreadline
  • делать
  • m4
  • mingw64-x86_64-GCC-жильный
  • mingw64-x86_64-ГМФ
  • mingw64-x86_64-OpenSSL
  • mingw64-x86_64-PKG-конфигурации
  • mingw64-x86_64-sqlite3
  • пластырь
  • rlwrap
  • расстегнуть молнию
  • Wget

Предположим, вы установили программное обеспечение в C:/cygwin ( C:/cygwin64 для 64-битной версии). Откройте cmd и введите wget (или один из исполняемых файлов, присутствующих в C:/cygwin/bin ), чтобы проверить, можете ли вы использовать исполняемые файлы Cygwin. Если исполняемый файл не открывается, добавьте C:/cygwin/bin в свой путь (переменная среды).

Настройка Opam

Откройте cmd.exe и введите opam init для настройки Opam.

Затем установите ocamlfind (часть компилятора OCaml) с помощью

opam install ocamlfind
opam config env
 

Проверьте, установлен ли ocamlfind введя его в cmd.exe .

Команда opam config env используется для добавления opam исполняемых файлов opam в путь opam . Если после выхода из системы вы больше не можете достичь ocamlfind , вы можете вручную добавить его, добавив путь к следующей строке: C:/Users/<your user>/Documents/.opam/system/bin/ .

Установка пакетов

Пакеты устанавливаются через Opam с помощью команды opam install xyz где 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 . В 64-битной версии Windows (и 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

Обновите формулы homebrew и установите 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 и следуйте инструкциям.

После этого вы сможете запустить интерпретатор OCaml из своей оболочки.

$ ocaml
        OCaml version 4.03.0

#
 

Ваша первая программа в OCaml

Теперь, когда дистрибутив OCaml доступен в вашей любимой операционной системе, мы можем создать вашу первую программу в OCaml: Hello World!

У нас есть разные способы запуска программы OCaml.

REPL (toplevel)

Вы можете выполнить свой код в интерактивном режиме с помощью верхнего уровня . С OCaml toplevel вы можете писать и выполнять OCaml-код, как оболочку UNIX. После этого топлевел немедленно проверяет тип вашего кода. Таким образом, вы можете быстро и легко протестировать некоторые части кода без компиляции и выполнения.

Вы можете запустить TopLevel с ocaml команды. Затем вы можете написать предложение OCaml закончилось по ;; который оценивается немедленно. Топлел отображает тип и значение вашего выражения сразу после:

# "Hello Worlds!";;
- : string = "Hello Worlds!"
 

Также возможно запустить полный файл в вашем файле. Вы можете увидеть это объяснение .

Чтобы облегчить ввод в верхний уровень , вы можете использовать инструмент, например, ledit или rlwrap который предоставляет некоторые функции (например, историю ввода):

 $ ledit ocaml

 $ rlwrap ocaml
 

Компиляция к байт-коду

У нас есть два разных компилятора, один из которых компилируется на байт-код, а другой - на собственный код. Первый такой же, как байт-код виртуальной машины Java. Таким образом, байт-код менее эффективен, но более портативен.

У нас есть файлы расширений, используемые компиляторами OCaml:

расширение определение
.ml Исходный код (как .c в C)
.mli Интерфейс (как .h в C)
.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 файл .cmi .

  • -o : скомпилировать некоторые .cmo файлы в исполняемый файл. Например: ocamlc -o program foo.cmo bar.cmo . Эти файлы должны быть организованы зависимостями, для которых первый файл не имеет никакой зависимости.

  • -I : указать другой каталог, в котором компилятор может найти необходимые файлы для компиляции (например, интерфейс или исходный код). Это то же самое, что и -I от компилятора C.

У нас есть много других вариантов. Дополнительную информацию вы можете найти в руководстве .

Итак, теперь вы можете написать hello.ml и скомпилировать этот файл с помощью ocamlc -o hello hello.ml для создания программы байт-кода :

let () = print_endline "Hello World!"
 

let () = ... является первой записью вашей программы (например, main в C). После этого мы используем функцию print_endline (предоставленную стандартной библиотекой) с аргументом "Hello World!" для печати Hello Worlds с новой строкой в ​​стандартном выпуске.

После компиляции, у вас есть .cmo файл и .cmi файл автоматически производится компилятором и вашей программы hello . Вы можете открыть свою программу, и в верхней части этого файла вы можете увидеть:

#!/usr/local/bin/ocamlrun
 

Это означает, что вашей программе нужна программа ocamlrun (предоставляемая дистрибутивом) для выполнения байт-кода (например, JVM).

Компиляция с нативным кодом

У нас есть еще один компилятор, который создает собственный код. Компилятор: ocamlopt . Однако полученный исполняемый файл не может работать на большинстве других архитектур.

ocamlopt использует те же параметры, что и ocamlc поэтому вы можете выполнить ocamlopt -o hello hello.ml . После этого вы можете увидеть .cmx и .o .

Наконец, из вашей программы байт-кода / нативного кода вы можете выполнить:

$ ./hello
Hello World!
$