El cálculo de unión es un cálculo de procesos desarrollado en el INRIA . El cálculo de unión se desarrolló para proporcionar una base formal para el diseño de lenguajes de programación distribuidos y, por lo tanto, evita intencionalmente las construcciones de comunicaciones que se encuentran en otros cálculos de procesos, como las comunicaciones de encuentro , que son difíciles de implementar en un entorno distribuido. [1] A pesar de esta limitación, el cálculo de unión es tan expresivo como el cálculo π completo . Se han demostrado codificaciones del cálculo π en el cálculo de unión, y viceversa. [2]
El cálculo de unión es un miembro de la familia de cálculos π de cálculos de proceso y puede considerarse, en esencia, un cálculo π asincrónico con varias restricciones importantes: [3]
- La restricción del alcance, la recepción y la recepción replicada se fusionan sintácticamente en una única construcción: la definición ;
- La comunicación se produce únicamente mediante nombres definidos;
- Para cada nombre definido hay exactamente una recepción replicada.
Sin embargo, como lenguaje de programación, el cálculo de unión ofrece al menos una ventaja sobre el cálculo π, a saber, el uso de patrones de unión multidireccionales y la capacidad de coincidir con mensajes de múltiples canales simultáneamente. [4]
Implementaciones
Lenguajes basados en el cálculo de unión
El lenguaje de programación join-calculus es un nuevo lenguaje basado en el proceso join-calculus. Se implementa como un intérprete escrito en OCaml y admite programación distribuida con tipos estáticos, comunicación remota transparente, movilidad basada en agentes y cierta detección de fallos. [5]
- Aunque no se basa explícitamente en el cálculo de unión, el sistema de reglas de CLIPS lo implementa si cada regla elimina sus entradas cuando se activa (retracta los hechos relevantes cuando se activa).
Muchas implementaciones del cálculo de unión se realizaron como extensiones de lenguajes de programación existentes:
- JoCaml es una versión de OCaml extendida con primitivas de cálculo de unión
- El C# polifónico y su sucesor Cω extienden C#
- MC# y Parallel C# amplían Polyphonic C#
- Unirse a Java extiende Java
- Una propuesta básica concurrente que utiliza el cálculo de unión
- JErlang (la J es para Join, erjang es Erlang para JVM) [6]
Incrustaciones en otros lenguajes de programación
Estas implementaciones no cambian el lenguaje de programación subyacente, pero introducen operaciones de cálculo de unión a través de una biblioteca personalizada o DSL:
- Las bibliotecas ScalaJoins y Chymyst están en Scala
- JoinHs de Einar Karttunen y syallop/Join-Language de Samuel Yallop son DSL para el cálculo de uniones en Haskell
- Joinads: varias implementaciones del cálculo de uniones en F#
- CocoaJoin es una implementación experimental en Objective-C para iOS y Mac OS X
- La biblioteca Join de Python en Python 3 [7]
- C++ vía Boost [8] (para boost desde 2009, aproximadamente v. 40, la actual (diciembre de 2019) es 72).
Referencias
- ^ Cedric Fournet, Georges Gonthier (1995). "El CHAM reflexivo y el cálculo de uniones". , pág. 1
- ^ Cedric Fournet, Georges Gonthier (1995). "El CHAM reflexivo y el cálculo de uniones". , pág. 2
- ^ Cedric Fournet, Georges Gonthier (1995). "El CHAM reflexivo y el cálculo de uniones". , pág. 19
- ^ Petricek, Tomas. "TryJoinads (IV.) - Concurrencia mediante cálculo de uniones". tomasp.net . Consultado el 24 de enero de 2023 .
- ^ Cedric Fournet, Georges Gonthier (2000). "El cálculo de unión: un lenguaje para la programación móvil distribuida": 268–332.
- ^ "JErlang: Erlang con uniones". Archivado desde el original el 8 de diciembre de 2017. Consultado el 18 de abril de 2015 .
- ^ Join Python, Cálculo de uniones para Python por Mattias Andree
- ^ Yigong Liu - Biblioteca de coordinación y concurrencia de mensajes asincrónicos de unión
Enlaces externos
- INRIA, Únete a la página de inicio de Cálculo
- Microsoft Research, The Join Calculus: un lenguaje para programación móvil distribuida