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