Atom es un lenguaje específico de dominio (DSL) en Haskell , para diseñar software integrado en tiempo real .
Paradigma | funcional , síncrono , reactivo |
---|---|
Diseñada por | Thomas Hawkins |
Apareció por primera vez | 2007 |
Disciplina de mecanografía | estático , fuerte |
SO | portátil |
Licencia | BSD3 |
Sitio web | http://hackage.haskell.org/package/atom/ |
Influenciado por | |
Bluespec , Confluencia, Haskell |
Historia
Originalmente concebido como un lenguaje de descripción de hardware de alto nivel , Atom se creó a principios de 2007 y se lanzó en código abierto en abril del mismo año. [1] Inspirado por TRS [2] y Bluespec , Atom compiló descripciones de circuitos, que se basaban en operaciones atómicas protegidas, o reescritura de términos condicional , en listas de red Verilog para simulación y síntesis lógica . Como compilador de hardware, el objetivo principal de Atom era maximizar el número de operaciones, o reglas, que se pueden ejecutar en un ciclo de reloj determinado sin violar la semántica de la operación atómica. Al emplear las propiedades de reglas libres de conflictos y componibles secuencialmente, [2] Atom redujo la maximización de la concurrencia de ejecución a una optimización de conjunto de arco de retroalimentación de un gráfico de dependencia de datos de reglas. Este proceso fue similar al algoritmo original de James Hoe . [2]
Cuando el autor de Atom cambió de carrera a fines de 2007 del diseño lógico a la ingeniería de software integrado , Atom fue rediseñado de un HDL a un lenguaje específico de dominio dirigido a aplicaciones integradas en tiempo real . Como resultado, el objetivo principal del compilador de Atom cambió de maximizar la concurrencia de reglas a equilibrar la carga de procesamiento y minimizar la latencia de tiempo en el peor de los casos . En septiembre de 2008, Atom se presentó en CUFP, [3] y en abril de 2009, se lanzó como código abierto en su nueva forma. [4]
Descripción general
Atom es un lenguaje de programación concurrente destinado a aplicaciones integradas. Atom presenta programación de tareas en tiempo de compilación y genera código con tiempo de ejecución determinista y consumo de memoria, lo que simplifica el análisis del tiempo de ejecución en el peor de los casos para aplicaciones que requieren un rendimiento estricto en tiempo real. El modelo de concurrencia de Atom es el de acciones atómicas protegidas , lo que elimina la necesidad y los problemas de usar bloqueos mutex .
Al eliminar la programación de tareas en tiempo de ejecución y el bloqueo de mutex, dos servicios que tradicionalmente ofrece un RTOS, Atom puede eliminar la necesidad y la sobrecarga de un RTOS en las aplicaciones integradas.
Ejemplos de
Limitaciones
Para proporcionar garantías de tiempo de ejecución determinista y consumo de memoria, Atom impone varias restricciones al cálculo. Primero, los diseños de Atom son siempre de estado finito: todas las variables son globales y se declaran en tiempo de compilación y no se permite la asignación de memoria dinámica . En segundo lugar, Atom no proporciona funciones ni construcciones de bucle. En cambio, las actualizaciones de las variables de estado son funciones combinacionales puras del estado actual.
Referencias
- ^ ANN: Atom - Otro Haskell HDL
- ^ a b c Síntesis de descripciones de hardware centradas en la operación . James C. Hoe y Arvind. Conferencia Internacional sobre Diseño Asistido por Computadora (ICCAD), noviembre de 2000.
- ^ "Control de vehículos híbridos con Haskell" . Archivado desde el original el 4 de julio de 2008 . Consultado el 5 de diciembre de 2009 .
- ^ ANN: atom-0.0.2