HOME

TheInfoList



OR:

JoCaml is an experimental
functional programming language In computer science, functional programming is a programming paradigm where programs are constructed by applying and composing functions. It is a declarative programming paradigm in which function definitions are trees of expressions that ...
derived from OCaml. It integrates the primitives of the
join-calculus The join-calculus is a process calculus developed at INRIA. The join-calculus was developed to provide a formal basis for the design of distributed programming languages, and therefore intentionally avoids communications constructs found in other ...
to enable flexible, type-checked
concurrent Concurrent means happening at the same time. Concurrency, concurrent, or concurrence may refer to: Law * Concurrence, in jurisprudence, the need to prove both ''actus reus'' and ''mens rea'' * Concurring opinion (also called a "concurrence"), a ...
and
distributed Distribution may refer to: Mathematics *Distribution (mathematics), generalized functions used to formulate solutions of partial differential equations *Probability distribution, the probability of a particular value or value range of a varia ...
programming. The current version of JoCaml is a re-implementation of the now unmaintained JoCaml made by Fabrice Le Fessant, featuring a modified syntax and improved OCaml compatibility compared to the original. JoCaml was used by team Camls 'R Us to implement a distributed ray tracer, earning 2nd place on the ICFP 2000 programming contest. The name is a reference to
Joe Camel Joe Camel (also called Old Joe) was an advertising mascot used by the R. J. Reynolds Tobacco Company (RJR) for their cigarette brand Camel. The character was created in 1974 for a French advertising campaign, and was redesigned for the America ...
, a cartoon camel used in advertisements for Camel-brand cigarettes.


Example

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" "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 *) ;;
execution $ jocamlc example.ml -o test $ ./test Coffee Tea Refund 5


See also

*
Join-calculus The join-calculus is a process calculus developed at INRIA. The join-calculus was developed to provide a formal basis for the design of distributed programming languages, and therefore intentionally avoids communications constructs found in other ...


References


External links


The join-calculus language

The JoCaml system
Concurrent programming languages OCaml programming language family Programming languages created in the 1990s {{compu-lang-stub