ДжоКамл
В данной статье поднимается несколько вопросов. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Парадигмы | Мультипарадигмальность : функциональная , императивная. |
---|---|
Семья | ML : Caml : OCaml |
Разработчик | Инрия |
Впервые появился | 1999 год |
Стабильная версия | 4.01
/ март 2014 г |
ТЫ | Кросс-платформенный |
Лицензия | LGPL |
Веб-сайт | Жокамль |
ДжоКамл [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 (*СТОП*)
;; (* put: string Join.chan *)
def Give ( d ) = сопоставить d с
Coffee -> put ( «Coffee» )
| Чай -> поставить ( "Чай ;;
" (* Give: Drink Join.chan *)
def return ( v ) = let s = Printf . sprintf "Возврат %d" v in put ( s )
;; (* возврат: int Join.chan *)
let new_vending дать возврат =
пусть vend ( стоимость : int ) ( кредит : int ) = если кредит >= стоимость,
то ( истина , кредит - стоимость )
иначе ( ложь , кредит )
в
def монете ( Никель ) & стоимость ( v ) = стоимость ( v + 5 ) и ответ на монету
или монету ( дайм ) & value ( v ) = значение ( v + 10 ) & ответ на монету
или кнопку ( BCoffee ) & value ( v ) =
let must_give , остаток = vend 10 v in
( если must_give, то дайте ( Coffee ) else 0 (* STOP *) )
& value ( остаток ) & ответ на кнопку
или кнопку ( BTea ) & value ( 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) *)
let ccoin , cbutton = new_vending вернуть деньги в
ccoin ( никель ); ccoin ( никель ); ccoin ( Дайм );
Юникс . спать ( 1 ); кнопка ( BCoffee );
Юникс . спать ( 1 ); cкнопка ( BTea );
Юникс . спать ( 1 ); кнопка c ( BCCancel );
Юникс . Sleep ( 1 ) (* пусть появится последнее сообщение *)
;;
исполнение
$ jocamlc example.ml -o тест
$ ./test
Кофе
Чай
Возврат 5
См. также [ править ]
Ссылки [ править ]
- ^ Ма, Цинь; Маранге, Люк (2004). «Компиляция сопоставления с образцом в шаблонах соединения». Материалы 15-й Международной конференции по теории параллелизма . ЛНКС. 3170 . Спрингер-Верлаг.
- ^ Ма, Цинь; Маранге, Люк (2008). «Алгебраическое сопоставление с образцом в исчислении соединений». Логические методы в информатике . 4 (1). arXiv : 0802.4018 . Бибкод : 2008arXiv0802.4018M . дои : 10.2168/LMCS-4(1:7)2008 . S2CID 15873901 .
- ^ Кончон, С.; Ле Фессант, Ф. (1999). «Jocaml: Мобильные агенты для Objective-Caml» . Материалы Первого и Третьего международного симпозиума по приложениям агентских систем и мобильным агентам . стр. 22–29. дои : 10.1109/ASAMA.1999.805390 . ISBN 0-7695-0342-Х . S2CID 14355301 .
- ^ Луи Мандель; Люк Маранге. «Программирование в JoCaml» . Отчет об исследовании Инрии 6261.
Внешние ссылки [ править ]
- Языки программирования высокого уровня
- Функциональные языки
- Объектно-ориентированные языки программирования
- Параллельные языки программирования
- Семейство языков программирования OCaml
- Языки программирования, созданные в 1999 году.
- Программное обеспечение, использующее лицензию LGPL
- Незавершенные темы по языку программирования