Skip to content

Latest commit

 

History

History
42 lines (35 loc) · 3.07 KB

JoCaml.md

File metadata and controls

42 lines (35 loc) · 3.07 KB

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, всё?)

См. также