Linguaggio di programmazione sincrono - Synchronous programming language
Un linguaggio di programmazione sincrono è un linguaggio di programmazione per computer ottimizzato per la programmazione di sistemi reattivi . I sistemi informatici possono essere ordinati in tre classi principali: (1) sistemi di trasformazione che prendono alcuni input, li elaborano, forniscono i loro output e terminano la loro esecuzione; un tipico esempio è un compilatore; (2) sistemi interattivi che interagiscono continuamente con il loro ambiente, alla loro velocità; un tipico esempio è il web; e (3) sistemi reattivi che interagiscono continuamente con il loro ambiente, a una velocità imposta dall'ambiente; un tipico esempio è il sistema di controllo automatico del volo dei moderni aeroplani. I sistemi reattivi devono quindi reagire agli stimoli dall'ambiente entro limiti di tempo rigorosi. Per questo motivo sono spesso chiamati anche sistemi real-time e si trovano spesso nei sistemi embedded .
La programmazione sincrona (anche programmazione reattiva sincrona o SRP ) è un paradigma di programmazione per computer supportato da linguaggi di programmazione sincroni. Il principio di SRP è fare la stessa astrazione per i linguaggi di programmazione dell'astrazione sincrona nei circuiti digitali. I circuiti sincroni sono infatti progettati ad un alto livello di astrazione dove le caratteristiche di temporizzazione dei transistor elettronici sono trascurate. Si presume quindi che ogni gate del circuito (o, e, ...) calcoli il suo risultato istantaneamente, si presume che ogni filo trasmetta il suo segnale istantaneamente. Un circuito sincrono è sincronizzato e ad ogni tick del suo clock, calcola istantaneamente i suoi valori di output ei nuovi valori delle sue celle di memoria (latch) dai suoi valori di input e dai valori correnti delle sue celle di memoria. In altre parole, il circuito si comporta come se gli elettroni fluissero infinitamente veloci. I primi linguaggi di programmazione sincroni furono inventati in Francia negli anni '80: Esterel , Lustre e Signal . Da allora sono emersi molti altri linguaggi sincroni.
L'astrazione sincrona rende molto più semplice il ragionamento sul tempo in un programma sincrono, grazie alla nozione di tick logici : un programma sincrono reagisce al suo ambiente in una sequenza di tick e si presume che i calcoli all'interno di un tick siano istantanei, cioè come se il processore che li esegue fosse infinitamente veloce. L'affermazione " a || b " è quindi astratta come il pacchetto " ab " dove " a " e " b " sono simultanei. Per fare un esempio concreto, l'affermazione dell'Esterel " ogni 60 secondi emette minuti " specifica che il segnale " minuto " è esattamente sincrono con la 60esima occorrenza del segnale " secondo ". A un livello più fondamentale, l'astrazione sincrona elimina il non determinismo derivante dall'interleaving di comportamenti concorrenti. Ciò consente la semantica deterministica , rendendo quindi i programmi sincroni suscettibili di analisi formale, verifica e generazione di codice certificato e utilizzabili come formalismi di specifica formale.
Al contrario, nel modello di calcolo asincrono, su un processore sequenziale, l'istruzione " a || b " può essere implementata come " a; b " o come " b; a ". Questo è noto come non determinismo basato sull'interleaving . Lo svantaggio di un modello asincrono è che proibisce intrinsecamente la semantica deterministica (ad esempio, le condizioni di gara), il che rende più complesso il ragionamento formale come l'analisi e la verifica. Tuttavia, i formalismi asincroni sono molto utili per modellare, progettare e verificare sistemi distribuiti, perché sono intrinsecamente asincroni.
In contrasto sono anche i sistemi con processi che sostanzialmente interagiscono in modo sincrono . Un esempio potrebbero essere i sistemi costruiti sulla base del modello di comunicazione dei processi sequenziali (CSP) , che consente anche una scelta non deterministica.
Linguaggi sincroni
- Argos
- Atom (un linguaggio specifico del dominio in Haskell per la programmazione embedded hard realtime)
- Averest
- Blech
- ChucK (un linguaggio di programmazione reattivo sincrono per l'audio)
- Esterel
- LabVIEW
- LEA
- Lustro
- PLEXIL
- SIGNAL (un linguaggio sincrono orientato al flusso di dati che abilita le specifiche multi-clock)
- SOL
- SyncCharts
Guarda anche
Riferimenti
- Nicolas Halbwachs. "Programmazione sincrona di sistemi reattivi". Kluwer Academic Publishers, 1993. http://www-verimag.imag.fr/~halbwach/newbook.pdf
link esterno
- Il gruppo sincrono di Verimag lab.
- Il linguaggio di programmazione SIGNAL .
- Unificazione di modelli sincroni e asincroni per linguaggi di programmazione paralleli: propone linguaggi paralleli basati su C , consente ai programmatori di specificare e gestire il parallelismo su un'ampia gamma di architetture di computer.