# Hume (llenguatge de programació)

Hume (Higher-order Unified Meta-Environment, ‘meta-entorn unificat d'ordre superior’) és un llenguatge de programació funcional i tipificació forta per a sistemes amb recursos limitats que incorpora elements per assegurar l'execució acotada en temps i espai.
Hume ha estat desenvolupat a la Universitat de Saint Andrews, Escòcia. Amb el nom volen retre homenatge a David Hume, filòsof escocès famós pel seu escepticisme que requeria reiterades proves i bons fonaments per arribar a donar crèdit a les formulacions.
Tanmateix és un treball en-procés, amb parts importants (temporitzadors, excepcions) pendents d'implementar en el compilador, malgrat que funcionin en part en l'intèrpret (més endarrerit en altres aspectes i pres com a demostrador de conceptes).

## Característiques

Hume incorpora concurrència per pas de missatges amb sincronització per encaix de patrons, de manera semblant al Join calculus de JoCaml.
Cada autòmat (clàusula box) presenta una seqüència d'encaixos de patrons sobre una tupla de canals d'entrada. En comptes d'especificar els canals i valors com en altres implementacions del Join calculus, s'especifica un encaix de valors per tota la tupla d'entrada, indicant amb un asterisc els canals ignorats (no consumits).
A cada encaix, amb disponibilitat síncrona dels canals, s'associa un procés que retorna una tupla de sortida de missatges opcionals, especificant asterisc per als no generats.
La instrucció wire (cablejat) descriu els canals destinataris dels missatges de la tupla de sortida, així com la procedència dels missatges i inicialització de la tupla de canals d'entrada.
L'estat d'un autòmat queda en els canals realimentats amb sortides pròpies. L'estat del sistema és el del conjunt de bústies dels canals.
El planificador es basa en un bucle infinit d'avaluació d'autòmats blocant els que no puguin col·locar missatges de sortida a bústies ocupades.
Incorpora excepcions a nivell d'autòmat i global per acotar els cicles en temps (de moment només va a l'intèrpret) i en espai (només al compilador) de l'allotjament dinàmic (HeapOverflow) i de sobreiximent de la pila (StackOverflow), a banda de poder definir excepcions pròpies.
Incorpora un llenguatge d'expressions funcional amb la sintaxi del Haskell però semàntica estricta (avaluació primerenca i ordenada dels operands) (">> Like Standard ML, Hume expressions follow a strict evaluation order"), amb suport de funcions d'ordre superior.
Incorpora un metallenguatge de macros/plantilles que permet generar rèpliques dels autòmats i de les connexions.

## Capes del Hume

Segons el Hume Report, s'identifiquen una sèrie de nivells:

### HW-Hume

    una capa de descripció del maquinari capaç de descriure circuits, siguin síncrons o asíncrons, amb encaixos de patrons per a tuples de bits.

### FSM-Hume

    (FSM: màquina d'estats finits) un llenguatge hard/soft -- HW-Hume més funcions de primer ordre, més condicionals i definicions locals.

### Template-Hume

    un llenguatge per a la programació expressada en plantilles. -- FSM-Hume més funcions de primer ordre predefinides, polimorfisme i estructures de dades inductives sense incloure funcions definides per l'usuari.

### PR-Hume

    Template-Hume més funcions i estructures de dades definides per l'usuari.

### Full-Hume

    Un llenguatge Turing-complet: PR-Hume més recursió sense restriccions a funcions i estructures definides per l'usuari.

## Exemples

Exemple per a l'intèrpret:
Interpretació:
dona com a resultat

## Referències

* ↑ Eekelen, Marko van. Trends in Functional Programming (en anglès). Intellect, 2007. ISBN 978-1-84150-176-5.
* ↑ Join calculus tutorial
* ↑ Traduint el Hume a Java(anglès)
* ↑ document Hume Report de definició del llenguatge Arxivat 2009-02-28 a Wayback Machine. (anglès)

## Enllaços externs

* Hammond/Michaelson/Sun - Programant Sistemes Reactius en Hume (anglès)
* Univ. Heriot-Watt - El projecte Hume (anglès) Web amb les darreres versions del compilador de Hume
* K.Hammond - Is It Time for Real-Time Functional Programming? (anglès)