Esterel es un lenguaje de programación sincrónico para el desarrollo de sistemas reactivos complejos. El imperativo estilo de programación de Esterel permite la simple expresión de paralelismo y preferencia . Como consecuencia, es muy adecuado para diseños de modelos dominados por el control.
El desarrollo del idioma comenzó a principios de la década de 1980 y fue llevado a cabo principalmente por un equipo de Ecole des Mines de Paris e INRIA dirigido por Gérard Berry en Francia. Los compiladores actuales toman programas de Esterel y generan implementaciones de código C o hardware (RTL) ( VHDL o Verilog ).
El lenguaje aún está en desarrollo, con varios compiladores fuera. La versión comercial de Esterel es el entorno de desarrollo Esterel Studio . La empresa que lo comercializa ( Synfora ) inició un proceso de normalización con el IEEE en abril de 2007 sin embargo el grupo de trabajo (P1778) se disolvió en marzo de 2011. El Manual de Referencia Esterel v7 Versión v7 30 - propuesta inicial de normalización del IEEE está disponible públicamente.
La noción multiforme del tiempo
La noción de tiempo utilizada en Esterel se diferencia de la de lenguajes no sincrónicos de la siguiente manera: La noción de tiempo físico es reemplazada por la noción de orden. Solo se consideran la simultaneidad y la precedencia de los eventos. Esto significa que el tiempo físico no juega ningún papel especial. A esto se le llama noción multiforme de tiempo. Un programa de Esterel describe una secuencia totalmente ordenada de instantes lógicos. En cada instante, ocurre un número arbitrario de eventos (incluido 0). Las ocurrencias de eventos que ocurren en el mismo instante lógico se consideran simultáneas. Otros eventos se ordenan como sus instancias de ocurrencias. Hay dos tipos de declaraciones: las que toman tiempo cero (se ejecutan y terminan en el mismo instante) y las que demoran un número determinado de ciclos.
Señales
Las señales son el único medio de comunicación. Hay señales valoradas y no valoradas. Además, se clasifican como señales de entrada, salida o locales. Una señal tiene la propiedad de estar presente o ausente en un instante. Las señales valoradas también contienen un valor. Las señales se transmiten a través del programa, y eso significa que cualquier proceso puede leer o escribir una señal. El valor de una señal valorada se puede determinar en cualquier instante, incluso si la señal está ausente. El estado predeterminado de una señal está ausente. Las señales permanecen ausentes hasta que se establecen explícitamente para presentarse utilizando la instrucción emit. La comunicación es instantánea, es decir, una señal emitida en un ciclo es visible de inmediato. Tenga en cuenta que uno puede comunicarse de un lado a otro en el mismo ciclo.
Reglas de coherencia de señales
- Cada señal solo está presente o ausente en un ciclo, nunca ambas.
- Todos los escritores corren antes que los lectores.
Por lo tanto
presente A otra cosa emitir Afinal
es un programa erróneo : el escritor "emit A" debe ejecutarse antes que el lector "presente A", pero la semántica del lenguaje requiere que el "presente A" se ejecute primero, resultando en un conflicto en la semántica del programa. [ aclaración necesaria ]
El lenguaje construye
Declaraciones de Esterel primitivo
Pure Esterel tiene once declaraciones primitivas. [1]
nothing | Termina inmediatamente sin ningún otro efecto. |
pause | Bloquea el flujo de control en el ciclo actual para reanudarlo en el ciclo siguiente. |
p ; q | Ejecuta p hasta que termina y luego, en la misma reacción, comienza q . |
p || q | Ejecuta p y q en paralelo |
loop pag end | Reinicie el cuerpo p tan pronto como termine. Cada ruta a través del cuerpo del bucle debe contener al menos una pause declaración para evitar bucles ilimitados dentro de una sola reacción. |
signal S in p end | Declara señal local. |
emit S | Hacer presente la señal S en el instante actual. Una señal está ausente a menos que se emita. |
present S then p else q end | Si la señal S está presente en el instante actual, ejecute inmediatamente p , de lo contrario ejecute q . |
suspend p when S | Suspende la ejecución del cuerpo en instantes en los que S está presente. |
trap T in p end | Declare un bloque de escape etiquetado. |
exit T | Salta al final del bloque de escape con la etiqueta T más interno . |
Declaraciones de Esterel derivadas
Esterel tiene varias construcciones derivadas: [2] [3]
Declaración derivada | Expansión |
---|---|
halt | loop pause end |
sustain s | loop emit s; pause end |
present s then p end | present s then p else nothing end |
await s | trap T in loop pause; present s then exit T end end loop end |
await immediate s | trap T in loop present s then exit T end; pause end loop end |
suspend p when immediate s | suspend present s then pause end; p when s |
abort p when (immediate) s | trap T in suspend p when (immediate) s ; exit T || await (immediate) s; exit T; end |
weak abort p when (immediate) s | trap T in p ; exit T || await (immediate) s; exit T; end |
loop s | loop abort p ; halt when s end loop |
every (immediate) s do p end every | await (immediate) s ; loop p each s |
Otras declaraciones de Esterel
El lenguaje Esterel completo también tiene declaraciones para declarar y crear instancias de módulos, para variables, para llamar a procedimientos externos y para señales valoradas.
Ejemplo (ABRO)
El siguiente programa emite la salida O tan pronto como se hayan recibido las entradas A y B. Restablezca el comportamiento siempre que se reciba la entrada R.
módulo ABRO:entrada A, B, R;salida O;círculo [espera A || esperar B]; emitir Ocada Rmódulo final
Ventajas de Esterel
- El modelo de tiempo le da al programador un control preciso
- Concurrencia conveniente para especificar sistemas de control
- Completamente determinista
- Lenguaje de estados finitos
- Tiempo de ejecución predecible
- Mucho más fácil de verificar formalmente
- Se puede implementar tanto en hardware como en software
Desventajas de Esterel
- La naturaleza de estado finito del lenguaje limita la flexibilidad (pero la expresividad es suficiente para el campo de aplicación elegido)
- Desafíos semánticos
- Evitar las violaciones de causalidad suele ser difícil
- Difícil de compilar en el caso general, pero existen criterios de corrección simples
Ver también
- Lustre , un primo lenguaje de programación
- SIGNAL , un lenguaje síncrono orientado al flujo de datos que permite especificaciones de múltiples relojes
- Esterel Technologies , desarrollador de Esterel Studio y otras herramientas
- Modelo de programación paralela
Referencias
- ^ Berry, Gérard (1999). "La semántica constructiva de Pure Esterel". CiteSeerX 10.1.1.46.2076 . Cite revista necesita
|journal=
( ayuda ) - ^ Berry, Gérard (junio de 2000). "El manual del lenguaje de Esterel v5". Ecole des Mines e INRIA. CiteSeerX 10.1.1.3.1177 . Cite revista necesita
|journal=
( ayuda ) - ^ Berry, Gérard ; Gonthier, Georges (noviembre de 1992). "El lenguaje de programación síncrono de Esterel: diseño, semántica, implementación". Ciencia de la Programación de Computadores . 19 (2): 87-152. CiteSeerX 10.1.1.17.5606 . doi : 10.1016 / 0167-6423 (92) 90005-V .
enlaces externos
- El idioma Esterel en Inria
- Esterel Web en archive.org
- El compilador de Columbia Esterel un compilador de código abierto