JoCaml - JoCaml

JoCaml
Разработчики)INRIA
Стабильный выпуск
4.01 / март 2014 г.
Операционная системаКроссплатформенность
ТипЯзык программирования
ЛицензияLGPL
Интернет сайтhttp://jocaml.inria.fr/

JoCaml[1][2] экспериментальный функциональный язык программирования происходит от OCaml. Он объединяет примитивы соединительное исчисление для обеспечения гибкости, проверенный тип одновременный и распределен программирование. Текущая версия JoCaml - это повторная реализация ныне не поддерживаемой JoCaml.[3] разработан Fabrice Le Fessant, отличается измененным синтаксисом и улучшенной совместимостью с OCaml по сравнению с оригиналом.

JoCaml использовался командой Camls 'R Us для реализации распределенного трассировщик лучей,[4] 2-е место на соревнованиях по программированию ICFP 2000.

Название является ссылкой на Джо Кэмел, мультфильм верблюд используется в рекламе для Сигареты марки Camel.

Пример

тип монеты = Никель | Дайми напитки = Кофе | Чайи кнопки = BCoffee | BTea | BCancel;; (* def определяет предложение набора альтернатив шаблона соединения   * '&' в левой части '=' означает соединение (синхронность канала)   * '&' в правой части означает параллельную обработку   * synchronous_reply: == "ответ" [x] "на" имя_канала   * синхронные каналы имеют функционально-подобные типы (`a ->` b)   * в то время как асинхронные имеют тип `a Join.chan   * только последний оператор в выражении rhs шаблона может быть асинхронным сообщением   * 0 в позиции асинхронного сообщения означает STOP («сообщение не отправлено» в терминологии CSP).   *) def положить(s) = print_endline s ; 0 (* ОСТАНОВКА *)   ;; (* положите: строка Join.chan *) def дайте(d) = матч d с                 Кофе -> положить("Кофе")                 | Чай -> положить("Чай")              ;; (* дать: выпить Join.chan *) def возврат(v) = позволять s = Printf.спринт «Возврат% d» v в положить(s)     ;; (* возврат: int Join.chan *) позволять new_vending дайте возврат =  позволять продавать (Стоимость:int) (кредит:int) = если кредит >= Стоимость                      тогда (истинный, кредит - Стоимость)                      еще (ложный, кредит)  в  def монета(Никель) & ценить(v) = ценить(v+5) & Ответить к монета  или же монета(Дайм) & ценить(v) = ценить(v+10) & Ответить к монета   или же кнопка(BCoffee) & ценить(v) =      позволять should_give, остаток = продавать 10 v в     (если should_give тогда дайте(Кофе) еще 0 (* ОСТАНОВКА *))              & ценить(остаток) & Ответить к кнопка   или же кнопка(BTea) & ценить(v) =      позволять should_give, остаток = продавать 5 v в     (если should_give тогда дайте(Чай) еще 0 (* ОСТАНОВКА *))              & ценить(остаток) & Ответить к кнопка   или же кнопка(BCancel) & ценить(v) = возврат( v) & ценить(0) & Ответить к кнопка  в порождать ценить(0) ;  монета, кнопка  (* монета, кнопка: int -> unit *)  ;; (* new_vending: drink Join.chan -> int Join.chan -> (int-> unit) * (int-> unit) *) позволять ccoin, cbutton = new_vending дайте возврат в  ccoin(Никель); ccoin(Никель); ccoin(Дайм);   Unix.спать(1); cbutton(BCoffee);   Unix.спать(1); cbutton(BTea);   Unix.спать(1); cbutton(BCancel);  Unix.спать(1) (* пусть появится последнее сообщение *)  ;;

исполнение

$ jocamlc example.ml -o тест$ ./тестКофеЧайВозврат 5

Смотрите также

Рекомендации

  1. ^ Цинь Ма и Люк Маранге (2004). «Компиляция сопоставления с образцом в образцах соединения». Proc. 15-й Международной конференции по теории параллелизма. LNCS. Springer-Verlag. 3170.
  2. ^ Ма, Цинь; Маранге, Люк (2008). «Алгебраическое сопоставление с образцом в исчислении соединений». Логические методы в информатике. 4 (1). arXiv:0802.4018. Bibcode:2008arXiv0802.4018M. Дои:10.2168 / LMCS-4 (1: 7) 2008 г..
  3. ^ Conchon, S .; Ле Фессан, Ф. (1999). "Jocaml: мобильные агенты для Objective-Caml". Ход работы. Первый и Третий международные симпозиумы по приложениям агентских систем и мобильным агентам. С. 22–29. Дои:10.1109 / ASAMA.1999.805390. ISBN  0-7695-0342-X.
  4. ^ Луи Мандель; Люк Маранге. «Программирование в JoCaml». Отчет об исследовании Inria 6261.

внешняя ссылка