stringtranslate.com

ДжоКамл

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

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

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

Пример

тип  монеты  =  Никель  |  Десять центов и  напитки  =  Кофе  |  Чай и  пуговицы  =  BCoffee  |  BTea  |  BОтмена ;; (* def определяет предложение набора альтернатив шаблона соединения  * '&' в левой части '=' означает соединение (синхронизация каналов)  * '&' в правой части означает параллельную обработку  * synchronous_reply :== "reply" [ x] "to" имя_канала  * синхронные каналы имеют функциональные типы (`a -> `b)  * асинхронные имеют тип `a Join.chan  * только последний оператор в шаблонном выражении rhs может быть асинхронным сообщением  * 0 в позиции асинхронного сообщения означает STOP («сообщение не отправлено» в терминологии CSP  * ). def  put ( s )  =  print_endline  s  ;  0  (*СТОП*)  ;;  (* вставьте: строка Join.chan *) def  Give ( d )  =  сопоставить  d  с  Coffee  ->  put ( «Кофе» )  |  Чай  ->  поставить ( "Чай " ;;  (*дайте: выпить Join.chan *)  def  return ( v )  =  let  s  =  Printf . sprintf  "Возврат %d"  v  in  put ( s )  ;;  (*возврат: int Join.chan *) let  new_vending  дать  возврат  =  let  vend  ( стоимость : int )  ( кредит : int )  =  если  кредит  >=  стоимость  , то  ( истина ,  кредит  -  стоимость )  иначе  ( ложь ,  кредит )  в  монете def  ( никель ) & value ( v ) = стоимость ( v + 5 ) & ответ на монету или монету ( Dime ) & значение ( v ) = значение ( v + 10 ) и ответ на монету                    или  кнопка ( BCoffee )  &  значение ( v )  =  let  must_give ,  остаток  =  продать  10  v  in  ( если  must_give  тогда  дать ( Coffee )  else  0  (* STOP *) )  &  value ( остаток )  и  ответить  на  кнопку  или  кнопка ( BTea )  &  значение ( v )  =  let  must_give ,  остаток  =  vend  5  v  in  ( если  must_give  тогда  дайте ( Tea )  else  0  (* STOP *) )  &  value ( остаток )  и  ответ  на  кнопку  или  кнопка ( BCancel )  и  значение ( v )  =  возврат (  v )  и  значение ( 0 )  и  ответ  на  кнопку  в  значении появления  ( 0 ) ; coin , button (* coin, button: int -> unit *) ;; (* new_vending: Drink Join.chan -> int Join.chan -> (int->unit)*(int->unit) *)       пусть  ccoin ,  cbutton  =  new_vending  вернут  деньги  в  ccoin ( никель );  ccoin ( никель );  ccoin ( Дайм );  Юникс . спать ( 1 );  кнопка ( BCoffee );  Юникс . спать ( 1 );  cкнопка ( BTea );  Юникс . спать ( 1 );  кнопка c ( BCCancel );  Юникс . Sleep ( 1 )  (* пусть появится последнее сообщение *)  ;;

исполнение

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

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

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

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

Внешние ссылки