Jump to content

ДжоКамл

ДжоКамл
Парадигмы Мультипарадигмальность : функциональная , императивная.
Семья ML : Caml : OCaml
Разработчик Инрия
Впервые появился 1999 год ; 25 лет назад ( 1999 )
Стабильная версия
4.01 / март 2014 г .; 10 лет назад ( 2014-03 )
ТЫ Кросс-платформенный
Лицензия LGPL
Веб-сайт Жокамль .инрия .fr

ДжоКамл [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

См. также [ править ]

Ссылки [ править ]

  1. ^ Ма, Цинь; Маранге, Люк (2004). «Компиляция сопоставления с образцом в шаблонах соединения». Материалы 15-й Международной конференции по теории параллелизма . ЛНКС. 3170 . Спрингер-Верлаг.
  2. ^ Ма, Цинь; Маранге, Люк (2008). «Алгебраическое сопоставление с образцом в исчислении соединений». Логические методы в информатике . 4 (1). arXiv : 0802.4018 . Бибкод : 2008arXiv0802.4018M . дои : 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.

Внешние ссылки [ править ]


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 699f3f52c0a3c5b6b81e5035e8bb98c4__1715930400
URL1:https://arc.ask3.ru/arc/aa/69/c4/699f3f52c0a3c5b6b81e5035e8bb98c4.html
Заголовок, (Title) документа по адресу, URL1:
JoCaml - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)