JoCaml [1] [2] es un lenguaje de programación funcional experimental derivado de OCaml . Integra las primitivas del cálculo de combinación para permitir una programación distribuida y concurrente con verificación de tipos . La versión actual de JoCaml es una reimplementación del JoCaml [3] ahora sin mantenimiento realizado por Fabrice Le Fessant, que presenta una sintaxis modificada y una compatibilidad OCaml mejorada en comparación con el original.
Desarrollador (es) | INRIA |
---|---|
Lanzamiento estable | 4.01 / marzo de 2014 |
Sistema operativo | Multiplataforma |
Tipo | Lenguaje de programación |
Licencia | LGPL |
Sitio web | http://jocaml.inria.fr/ |
JoCaml fue utilizado por el equipo Camls 'R Us para implementar un trazador de rayos distribuido , [4] obteniendo el segundo lugar en el concurso de programación ICFP 2000.
El nombre es una referencia a Joe Camel , un camello de dibujos animados utilizado en anuncios de cigarrillos de la marca Camel .
Ejemplo
tipo monedas = Níquel | Dime y bebidas = Café | Té y botones = BCoffee | BTea | BCancel ;; (* def define una cláusula de conjunto de alternativas de patrón de unión * '&' en el lado izquierdo de '=' significa unión (sincronismo de canal) * '&' en el lado derecho es procesamiento paralelo * sincronía_sincrónica: == "respuesta" [ x] "a" channel_name * los canales síncronos tienen tipos de función (`a ->` b) * mientras que los asincrónicos tienen el tipo `a Join.chan * solo la última declaración en un patrón rhs expresión puede ser un mensaje asincrónico * 0 en una posición de mensaje asíncrono significa STOP ("ningún mensaje enviado" en terminología CSP). *) def poner ( s ) = print_endline s ; 0 (* DETENER *) ;; (* poner: cadena Join.chan *) def dar ( d ) = emparejar d con Café -> poner ( "Café" ) | Té -> poner ( "Té" ) ;; (* dar: beber Join.chan *) def devolución ( v ) = sea s = Printf . sprintf "Reembolso% d" v en put ( s ) ;; (* reembolso: int Join.chan *) let new_vending dar reembolso = 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 ) y responder a moneda o moneda ( Dime ) y valor ( v ) = valor ( v + 10 ) y responder a moneda o botón ( BCoffee ) & valor ( v ) = dejar should_give , resto = vender 10 v in ( si should_give, luego dar ( Coffee ) else 0 (* STOP *) ) & value ( resto ) & responder al botón o botón ( BTea ) & valor ( v ) = dejar should_give , resto = vender 5 v in ( si should_give, luego dar ( Tea ) else 0 (* STOP *) ) & value ( resto ) & responder al botón o botón ( BCancel ) & valor ( v ) = reembolso ( v ) & valor ( 0 ) & responder al botón en el valor de generación ( 0 ) ; moneda , botón (* moneda, botón: int -> unidad *) ;; (* new_vending: beber Join.chan -> int Join.chan -> (int-> unit) * (int-> unit) *) dejar que ccoin , CButton = new_vending dar reembolso en ccoin ( níquel ); ccoin ( níquel ); ccoin ( moneda de diez centavos ); Unix . dormir ( 1 ); cbutton ( BCoffee ); Unix . dormir ( 1 ); cbutton ( BTea ); Unix . dormir ( 1 ); cbutton ( BCancel ); Unix . sleep ( 1 ) (* deja que aparezca el último mensaje *) ;;
ejecución
$ jocamlc example.ml -o test $ ./test Coffee Tea Reembolso 5
Ver también
Referencias
- ^ Qin Ma y Luc Maranget (2004). "Compilación de coincidencia de patrones en patrones de unión". Proc. De la XV Conferencia Internacional sobre Teoría de la Concurrencia . LNCS. Springer-Verlag. 3170 .
- ^ Ma, Qin; Maranget, Luc (2008). "Coincidencia de patrones algebraicos en cálculo de unión". Métodos lógicos en informática . 4 (1). arXiv : 0802.4018 . Código bibliográfico : 2008arXiv0802.4018M . doi : 10.2168 / LMCS-4 (1: 7) 2008 .
- ^ Conchon, S .; Le Fessant, F. (1999). "Jocaml: Agentes móviles para Objective-Caml" . Actas. Primer y Tercer Simposio Internacional sobre Aplicaciones de Sistemas de Agentes y Agentes Móviles . págs. 22-29. doi : 10.1109 / ASAMA.1999.805390 . ISBN 0-7695-0342-X.
- ^ Louis Mandel; Luc Maranget. "Programación en JoCaml" . Informe de investigación de Inria 6261.