Loading article…
| パラダイム | マルチパラダイム:機能的、命令的 |
|---|---|
| 家族 | ML : Caml : OCaml |
| 開発者 | インリア |
| 初登場 | 1999年 |
| 安定リリース | 4.01 / 2014年3月 |
| OS | クロスプラットフォーム |
| ライセンス | LGPL |
| Webサイト | jocaml.inria.fr |
JoCaml [1] [2]は、 OCamlから派生した実験的な汎用、高水準、マルチパラダイム、関数型、オブジェクト指向 プログラミング言語です。結合計算のプリミティブを統合し、柔軟で型チェックされた並行分散プログラミングを可能にします。JoCamlの現在のバージョンは、Fabrice Le Fessantによって作成された、現在はメンテナンスされていないJoCaml [3]の再実装であり、オリジナルと比較して構文が変更され、OCamlとの互換性が向上しています。
JoCamlはCamls 'R Usチームによって分散レイトレーサーの実装に使用され、[4] ICFP 2000プログラミングコンテストで2位を獲得しました。
この名前は、キャメルブランドのタバコの広告に使用されている漫画のラクダ、ジョー・キャメルに由来しています。
例
タイプ コイン = Nickel | Dime
、 ドリンク = Coffee | Tea
、 ボタン = BCoffee | BTea | BCancel ;;
(* def は Join パターンの代替セット句を定義します
* '=' の左側の '&' は join (チャネル同期) を意味します
* 右側の '&' は並列処理です
* synchronized_reply :== "reply" [x] "to" channel_name
* 同期チャネルは関数のような型 (`a -> `b) を持ちます
* 一方、非同期チャネルは型 `a Join.chan を持ちます
* パターンの rhs 式の最後のステートメントのみが非同期メッセージになることができます
* 非同期メッセージの位置にある 0 は STOP (CSP 用語では「送信されたメッセージなし」) を意味します。
*)
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 reply ( v ) = let s = Printf . sprintf "Refund %d" v in put ( s )
;; (* reply: int Join.chan *)
let new_vending give reply =
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
または coin ( Dime ) & value ( v ) = value ( v + 10 ) & reply to coin
または、 ボタン( BCoffee ) & value ( v ) =
let should_give 、 remainder = vend 10 v in
( if should_give then give ( Coffee ) else 0 (* STOP *) )
& value ( remainder ) & ボタンに返信
または、 ボタン( BTea ) & 値( v ) =
let should_give 、 remainder = vend 5 v in
( if should_give then give ( Tea ) else 0 (* STOP *) )
& 値( remainder ) & ボタンに返信
または、 ボタン( BCancel ) & 値( v ) = 払い戻し( v ) & 値( 0 ) & spawnのボタンに返信 値( 0 ) ;コイン、ボタン(* coin, button: int -> unit *) ;; (* new_vending: drink Join.chan -> int Join.chan -> (int->unit)*(int->unit) *)
let ccoin , cbutton = new_vending give fund 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 ) ( *最後のメッセージが表示されるようにする* ) ;;
実行
$ jocamlc example.ml -o test $ ./test
コーヒー紅茶返金 5
参照
参考文献
- ^ Ma, Qin; Maranget, Luc (2004)。「結合パターンでのパターンマッチングのコンパイル」。第 15 回国際並行性理論会議の議事録。LNCS。3170。Springer -Verlag。
- ^ Ma, Qin; Maranget, Luc (2008). 「Join Calculus における代数パターンマッチング」。Logical Methods in Computer Science . 4 (1). arXiv : 0802.4018 . Bibcode :2008arXiv0802.4018M. doi :10.2168/LMCS-4(1:7)2008. S2CID 15873901.
- ^ Conchon, S.; Le Fessant, F. (1999). 「Jocaml: Objective-Caml のモバイルエージェント」。エージェントシステムアプリケーションとモバイルエージェントに関する第 1 回および第 3 回国際シンポジウムの議事録。pp . 22–29。doi :10.1109/ ASAMA.1999.805390。ISBN 0-7695-0342-X. S2CID 14355301。
- ^ ルイ・マンデル;リュック・マランジェ。 「JoCamlでのプログラミング」。インリア研究報告書6261。
外部リンク
- 公式サイト
- 結合計算言語
