Join Java es un lenguaje de programación basado en el patrón de unión que extiende el lenguaje de programación estándar de Java con la semántica de unión del cálculo de unión . Fue escrito en la Universidad de Australia del Sur dentro del Laboratorio de Computación Reconfigurable por el Dr. Von Itzstein.
Paradigma | Procesal , reflexivo |
---|---|
Diseñada por | G. Stewart von Itzstein |
Apareció por primera vez | 2000 |
Sitio web | joinjava.unisa.edu.au |
Influenciado por | |
Java |
Características del idioma
La extensión Join Java presenta tres nuevas construcciones de lenguaje:
- Métodos de unión
- Métodos asincrónicos
- Modificadores de clase de orden para determinar el orden en que se hacen coincidir los patrones
La concurrencia en los lenguajes de programación más populares se implementa mediante construcciones como semáforos y monitores. Están surgiendo bibliotecas (como la biblioteca de concurrencia de Java JSR-166) que proporcionan semántica de concurrencia de alto nivel. Los procesos secuenciales de comunicación (CSP), el cálculo de sistemas de comunicación (CCS) y Pi tienen comportamientos de sincronización de nivel superior definidos implícitamente a través de la composición de eventos en las interfaces de procesos concurrentes. El cálculo de uniones, por el contrario, tiene una sincronización explícita basada en una conjunción localizada de eventos definidos como reglas de reducción. La semántica de unión intenta proporcionar expresiones explícitas de sincronización sin violar la idea de modularización orientada a objetos, incluida la creación dinámica y la destrucción de procesos y canales.
El lenguaje Join Java puede expresar prácticamente todos los patrones de simultaneidad publicados sin recurrir explícitamente a llamadas de monitor de bajo nivel. En general, los programas Join Java son más concisos que sus equivalentes Java. La sobrecarga introducida en Join Java por las expresiones de nivel superior derivadas del cálculo de Join es manejable. Las expresiones de sincronización asociadas con los monitores (esperar y notificar) que normalmente se encuentran en el cuerpo de los métodos se pueden reemplazar por las expresiones Join Java (los métodos Join) que forman parte de la firma del método.
Métodos de unión
Un método de unión se define mediante dos o más fragmentos de unión. Un método Join se ejecutará una vez que se hayan llamado todos los fragmentos del patrón Join. Si el tipo de retorno es un tipo estándar de Java, el fragmento principal bloqueará a la persona que llama hasta que se complete el patrón de unión y se ejecute el método. Si el tipo de retorno es de tipo señal , el fragmento inicial regresará inmediatamente. Todos los fragmentos finales son asincrónicos, por lo que no bloquearán a la persona que llama.
Ejemplo:
class JoinExample { int fragment1 () & fragment2 ( int x ) { // devolverá el valor de x // al llamador de fragment1 return x ; } }
Modificadores de pedidos
Los fragmentos de unión se pueden repetir en varios patrones de unión, por lo que puede darse el caso de que se completen varios patrones de unión cuando se llama a un fragmento. Tal caso podría ocurrir en el ejemplo siguiente si se llama a B (), C () y D () y luego A (). El fragmento A () final completa tres de los patrones, por lo que hay tres métodos posibles que se pueden llamar. El modificador de clase ordenada se usa aquí para determinar qué método Join se llamará. El valor predeterminado y cuando se usa el modificador de clase desordenada es elegir uno de los métodos al azar. Con el modificador ordenado, los métodos se priorizan según el orden en que se declaran.
Ejemplo:
Clase ordenada SimpleJoinPattern { void A () & B () { } void A () & C () { } void A () & D () { } señal D () & E () { } }
Métodos asincrónicos
Los métodos asincrónicos se definen mediante el tipo de retorno de señal . Tiene las mismas características que el tipo void excepto que el método regresará inmediatamente. Cuando se llama a un método asincrónico, se crea un nuevo hilo para ejecutar el cuerpo del método.
Ejemplo:
class ThreadExample { subproceso de señal ( SomeObject x ) { // este código se ejecutará en un nuevo subproceso } }
Idiomas relacionados
Polyphonic C sostenido es el lenguaje relacionado más cercano.
Cω el sucesor de Polyphonic C sostenido.
Hardware Unirse al lenguaje Java ampliado Unirse a Java para implementar la semántica del hardware. Este lenguaje extendió la semántica de Join Java a las aplicaciones FPGA .
Referencias
- von Itzstein, G. Stewart. y Jasiunas, M (2003). Sobre la implementación de la concurrencia de alto nivel en Java. Avances en la arquitectura de sistemas informáticos 2003, Aizu Japón, Springer Verlag.
- von Itzstein, G. Stewart. y D. Kearney (2002). Aplicaciones de Join Java. Actas de la Séptima Conferencia de Arquitectura de Sistemas de Computadoras de Asia Pacífico ACSAC'2002. Melbourne, Australia, Sociedad Australiana de Computación: 1-20.
- von Itzstein, G. Stewart. y D. Kearney (2004). La expresión de patrones de simultaneidad comunes en Join Java. Conferencia internacional sobre técnicas y aplicaciones de procesamiento paralelo y distribuido, Las Vegas.
- Hopf, J., von Itzstein, G, Stewart y col. (2002). Hardware Join Java: un lenguaje de alto nivel para el desarrollo de hardware reconfigurable. Conferencia internacional sobre tecnología programable de campo, Hong Kong.