Hume (lenguaje de programación) - Enciclopedia

Hume es un lenguaje de programación basado en funciones desarrollado en la Universidad de St Andrews y la Universidad de Heriot-Watt en Escocia desde el año 2000. El nombre del lenguaje es tanto un acrónimo que significa 'Meta-Entorno Unificado de Orden Superior' como un homenaje al filósofo del siglo XVIII David Hume. Se dirige a sistemas embebidos de computación en tiempo real, buscando producir un diseño que sea tanto altamente abstracto, como permite una extracción precisa de los costos de ejecución en tiempo y espacio. Esto permite garantizar las demandas limitadas de tiempo y espacio de ejecución de programas.

Hume combina ideas de programación funcional con ideas de autómatas de estado finito. Los autómatas se utilizan para estructurar programas comunicantes en una serie de "cajas", donde cada caja mapea entradas a salidas de manera puramente funcional utilizando coincidencia de patrones a alto nivel. Está estructurado como una serie de niveles, cada uno de los cuales expone diferentes propiedades de la máquina.

Modelo de Diseño
El diseño del lenguaje Hume intenta mantener las propiedades y características esenciales requeridas por el dominio de los sistemas embebidos (especialmente para costos transparentes de tiempo y espacio) mientras incorpora el mayor nivel posible de abstracción de programas. Busca tener como objetivo aplicaciones que van desde microcontroladores simples a sistemas de tiempo real complejos como los smartphones. Este ambicioso objetivo requiere incorporar tanto conceptos de bajo nivel como manejo de interrupciones, como conceptos de alto nivel de abstracción de estructuras de datos, etc. Tales sistemas se programan de manera muy diferente, pero el diseño del lenguaje debe adaptarse a tales requisitos variables.

Hume es un lenguaje de tres capas: una capa externa (estática) de declaración/metaprogramación, una capa intermedia de coordinación que describe una disposición estática de procesos dinámicos y los dispositivos asociados, y una capa interna que describe cada proceso como un mapeo (dinámico) de patrones a expresiones. La capa interna es sin estado y puramente funcional.

En lugar de intentar aplicar técnicas de modelado de costos y prueba de corrección a un marco de lenguaje existente directamente o alterando un lenguaje más general (como en el caso de RTSJ, por ejemplo), el enfoque adoptado por los diseñadores de Hume es diseñar Hume de manera que se puedan construir modelos formales y pruebas de manera segura. Hume está estructurado como una serie de niveles de lenguaje superpuestos, donde cada nivel agrega expresividad a la semántica de expresión, pero pierde alguna propiedad deseable o aumenta la dificultad técnica de proporcionar modelos formales/costos de corrección.

Características
Las versiones del intérprete y el compilador difieren un poco.

el intérprete (probador de conceptos) admite timeouts y excepciones personalizadas.
el compilador admite la limitación de costos en pila y heap, pero las excepciones solo imprimen el nombre de la excepción.
El sistema de coordinación conecta cajas en un estilo de programación de flujo de datos.
El lenguaje de expresión es similar a Haskell.
El sistema de passing de mensajes de concurrencia recuerda los patrones de unión de JoCaml o acordes de C Sharp Polifónico, pero con todos los canales asincrónicos.
Hay un planificador integrado que verifica continuamente la coincidencia de patrones a través de todas las cajas en turno, manteniendo en espera las cajas que no pueden copiar salidas a destinos de entrada ocupados.

Ejemplos


= Máquina expendedora =


Referencias


Leer más
Patai, Gergely; Hanak, Peter (2007). "Programación Funcional Embebida en Hume" (PDF). Archivado desde el original (PDF) el 23 de diciembre de 2016.


Enlaces externos
Sitio web del Lenguaje de Programación Hume
Proyecto Hume en la Universidad de Heriot-Watt
Proyecto EmBounded, certifica código limitado en recursos en Hume
Hume y Multicore