El cálculo de uniones es un cálculo de procesos desarrollado en INRIA . El cálculo de combinació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 combinación es tan expresivo como el cálculo de π completo . Se han demostrado codificaciones del cálculo π en el cálculo combinado y viceversa. [2]
El cálculo de combinación es un miembro de la familia de cálculos de proceso π-cálculo , y se puede considerar, en esencia, un cálculo π asincrónico con varias restricciones fuertes: [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 ocurre solo en nombres definidos;
- Por cada nombre definido hay exactamente una recepción replicada.
Sin embargo, como lenguaje de programación, el cálculo de combinación ofrece al menos una conveniencia sobre el cálculo π, es decir, el uso de patrones de combinación de múltiples vías , la capacidad de hacer coincidir mensajes de múltiples canales simultáneamente.
Implementaciones
Idiomas basados en el cálculo combinado
El lenguaje de programación de join-calculus es un nuevo lenguaje basado en el proceso de cálculo de join-calculus. Se implementa como un intérprete escrito en OCaml y admite programación distribuida de tipo estático, comunicación remota transparente, movilidad basada en agentes y detección de fallas. [4]
- Aunque no se basa explícitamente en el cálculo de uniones, 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 combinación se realizaron como extensiones de los lenguajes de programación existentes:
- JoCaml es una versión de OCaml extendida con primitivas de cálculo de combinación
- Polyphonic C # y su sucesor Cω extienden C #
- MC # y Parallel C # extienden Polyphonic C #
- Unirse a Java extiende Java
- Una propuesta de Concurrent Basic que utiliza Join-calculus
- JErlang (la J es para Join, erjang es Erlang para JVM) [5]
Incrustaciones en otros lenguajes de programación
Estas implementaciones no cambian el lenguaje de programación subyacente, pero introducen operaciones de cálculo de combinació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 Join en Haskell
- Joinads: varias implementaciones del cálculo de combinación en F #
- CocoaJoin es una implementación experimental en Objective-C para iOS y Mac OS X
- La biblioteca Join Python está en Python 3
- C ++ vía Boost [6] (para boost desde 2009, ca. v. 40, actual (diciembre de 19) es 72).
Referencias
- ^ Cedric Fournet, Georges Gonthier (1995). "El CHAM reflexivo y el cálculo de juntas" . Cite journal requiere
|journal=
( ayuda ), pág. 1 - ^ Cedric Fournet, Georges Gonthier (1995). "El CHAM reflexivo y el cálculo de juntas" . Cite journal requiere
|journal=
( ayuda ), pág. 2 - ^ Cedric Fournet, Georges Gonthier (1995). "El CHAM reflexivo y el cálculo de juntas" . Cite journal requiere
|journal=
( ayuda ), pág. 19 - ^ Cedric Fournet, Georges Gonthier (2000). "El cálculo de unión: un lenguaje para la programación móvil distribuida" . Cite journal requiere
|journal=
( ayuda ) - ^ "JErlang: Erlang con uniones" . Archivado desde el original el 8 de diciembre de 2017 . Consultado el 18 de abril de 2015 .
- ^ Yigong Liu - Biblioteca de simultaneidad y coordinación de mensajes asíncronos de unión
enlaces externos
- INRIA, página de inicio de Join Calculus
- Microsoft Research, El cálculo de unión: un lenguaje para la programación móvil distribuida