ДжоКамл
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Парадигмы | Мультипарадигмальность : функциональная , императивная. |
---|---|
Семья | ML : Caml : OCaml |
Разработчик | Инрия |
Впервые появился | 1999 год |
Стабильная версия | 4.01
/ март 2014 г |
ТЫ | Кросс-платформенный |
Лицензия | LGPL |
Веб-сайт | Жокамль |
ДжоКамл [1] [2] — экспериментальный универсальный , высокоуровневый , мультипарадигмальный , функциональный и объектно-ориентированный язык программирования , производный от OCaml . Он объединяет примитивы исчисления соединений , чтобы обеспечить гибкое с проверкой типов параллельное и распределенное программирование . Текущая версия JoCaml представляет собой повторную реализацию уже не поддерживаемого JoCaml. [3] созданный Фабрисом Ле Фессаном, с измененным синтаксисом и улучшенной совместимостью с OCaml по сравнению с оригиналом.
JoCaml использовался командой Camls'R Us для реализации распределенной трассировки лучей . [4] занял 2-е место на олимпиаде по программированию ICFP 2000.
Название является отсылкой к Джо Кэмелу , мультяшному верблюду, который использовался в рекламе сигарет марки Camel .
Пример [ править ]
type coins = Nickel | Dime
and drinks = Coffee | Tea
and buttons = BCoffee | BTea | BCancel;;
(* def defines a Join-pattern alternatives set clause
* '&' in the left side of '=' means join (channel synchronism)
* '&' in the right hand side is parallel processing
* synchronous_reply :== "reply" [x] "to" channel_name
* synchronous channels have function-like types (`a -> `b)
* while asynchronous ones have type `a Join.chan
* only the last statement in a pattern rhs expression can be an asynchronous message
* 0 in an asynchronous message position means STOP ("no sent message" in CSP terminology).
*)
def put(s) = print_endline s ; 0 (* STOP *)
;; (* put: string Join.chan *)
def give(d) = match d with
Coffee -> put("Coffee")
| Tea -> put("Tea")
;; (* give: drink Join.chan *)
def refund(v) = let s = Printf.sprintf "Refund %d" v in put(s)
;; (* refund: int Join.chan *)
let new_vending give refund =
let vend (cost:int) (credit:int) = if credit >= cost
then (true, credit - cost)
else (false, credit)
in
def coin(Nickel) & value(v) = value(v+5) & reply to coin
or coin(Dime) & value(v) = value(v+10) & reply to coin
or button(BCoffee) & value(v) =
let should_give, remainder = vend 10 v in
(if should_give then give(Coffee) else 0 (* STOP *))
& value(remainder) & reply to button
or button(BTea) & value(v) =
let should_give, remainder = vend 5 v in
(if should_give then give(Tea) else 0 (* STOP *))
& value(remainder) & reply to button
or button(BCancel) & value(v) = refund( v) & value(0) & reply to button
in spawn value(0) ;
coin, button (* coin, button: int -> unit *)
;; (* new_vending: drink Join.chan -> int Join.chan -> (int->unit)*(int->unit) *)
let ccoin, cbutton = new_vending give refund in
ccoin(Nickel); ccoin(Nickel); ccoin(Dime);
Unix.sleep(1); cbutton(BCoffee);
Unix.sleep(1); cbutton(BTea);
Unix.sleep(1); cbutton(BCancel);
Unix.sleep(1) (* let the last message show up *)
;;
исполнение
$ jocamlc example.ml -o test
$ ./test
Coffee
Tea
Refund 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
- Незавершенные темы по языку программирования