JoCaml это диалект OCaml с встроенными в язык примитивами join calculus -- модели описания конкурентных процессов. Начиная с версии 3.10 jocaml был переписан с упором на бинарную совместимость с "родителем" (для этого пришлось пожертвовать "перемещаемостью кода" между процессами). Зато теперь лёгким движением руки можно собирать любой проект jocaml'ем и начинать экспериментировать.
Шаги:
-
замена компиляторов, ocamlopt -> jocamlopt итп. (todo у ocamlbuild есть ключ -use-jocaml, проверить)
-
Новые ключевые слова - def reply и spawn (а также переопределённые or и &) - возможно придётся поправить код в некоторых местах чтобы избежать конфликтов.
-
При компиляции по умолчанию включены модули threads и unix, поэтому если они уже используются в проекте - будет конфликт с феерической ошибкой : Error: Files /usr/lib/ocaml/unix.cmxa and /usr/lib/ocaml/unix.cmxa both define a module named Unix
-
camlp4 не знает про новые синтаксические конструкции поэтому использовать jocaml вместе с синтаксическими расширениями не получится, но можно использовать camlp4 для файлов проекта которые не используют jocaml-синтаксис (благодаря бинарной совместимости). К сожалению простым способом "обучить" camlp4 синтаксису jocaml невозможно.
FIXME пример myocamlbuild.ml
jocaml исопльзует рантайм ocaml поэтому все ограничения касательно многопоточности остаются в силе. FIXME пример кода Асинхронные каналы реализуются с помощью дополнительных потоков. FIXME как отображается высокоуровневый код на системные потоки? - см. jocaml-list. FIXME примеры использования (wide-finder, ray tracer, всё?)