Synchrone programmeertaal - Synchronous programming language
Een synchrone programmeertaal is een computerprogrammeertaal die is geoptimaliseerd voor het programmeren van reactieve systemen . Computersystemen kunnen worden onderverdeeld in drie hoofdklassen: (1) transformationele systemen die bepaalde inputs gebruiken, deze verwerken, hun outputs afleveren en de uitvoering ervan beëindigen; een typisch voorbeeld is een compiler; (2) interactieve systemen die continu in wisselwerking staan met hun omgeving, in hun eigen tempo; een typisch voorbeeld is het web; en (3) reactieve systemen die continu in wisselwerking staan met hun omgeving, met een snelheid opgelegd door de omgeving; een typisch voorbeeld is het automatische vluchtcontrolesysteem van moderne vliegtuigen. Reactieve systemen moeten daarom binnen strikte tijdslimieten reageren op prikkels uit de omgeving. Om deze reden worden ze ook vaak real-time systemen genoemd , en worden ze vaak aangetroffen in embedded systemen .
Synchroon programmeren (ook synchroon reactief programmeren of SRP ) is een computerprogrammeringsparadigma dat wordt ondersteund door synchrone programmeertalen. Het principe van SRP is om voor programmeertalen dezelfde abstractie te maken als de synchrone abstractie in digitale schakelingen. Synchrone circuits zijn inderdaad ontworpen op een hoog abstractieniveau waarbij de timingkarakteristieken van de elektronische transistors worden verwaarloosd. Elke poort van het circuit (of, en, ...) wordt daarom verondersteld het resultaat onmiddellijk te berekenen, elke draad wordt verondersteld zijn signaal onmiddellijk te verzenden. Een synchroon circuit wordt geklokt en bij elke tik van zijn klok berekent het onmiddellijk zijn outputwaarden en de nieuwe waarden van zijn geheugencellen (latches) uit zijn inputwaarden en de huidige waarden van zijn geheugencellen. Met andere woorden, het circuit gedraagt zich alsof de elektronen oneindig snel stromen. De eerste synchrone programmeertalen werden in de jaren tachtig in Frankrijk uitgevonden: Esterel , Luster en Signal . Sindsdien zijn er veel andere synchrone talen ontstaan.
De synchrone abstractie maakt redeneren over tijd in een synchroon programma een stuk eenvoudiger, dankzij het begrip logische tikken : een synchroon programma reageert op zijn omgeving in een reeks tikken, en berekeningen binnen een vinkje worden verondersteld onmiddellijk te zijn, dwz als als de processor die ze uitvoert oneindig snel was. De verklaring " a || b " wordt daarom geabstraheerd als het pakket " ab " waar " a " en " b " gelijktijdig zijn. Om een concreet voorbeeld te nemen, specificeert de Esterel-instructie " elke 60 seconden zendminuut " dat het signaal " minuut " exact synchroon loopt met het 60ste optreden van het signaal " seconde ". Op een meer fundamenteel niveau elimineert de synchrone abstractie het niet-determinisme dat het gevolg is van de vervlechting van gelijktijdig gedrag. Dit maakt deterministische semantiek mogelijk, waardoor synchrone programma's vatbaar zijn voor formele analyse, verificatie en gecertificeerde codegeneratie, en bruikbaar zijn als formele specificatieformalismen .
Daarentegen kan in het asynchrone rekenmodel op een sequentiële processor de instructie " a || b " worden geïmplementeerd als " a; b " of als " b; a ". Dit staat bekend als het op interleaving gebaseerde niet-determinisme . Het nadeel van een asynchroon model is dat het intrinsiek deterministische semantiek (bv. Race conditions) verbiedt, wat formeel redeneren zoals analyse en verificatie complexer maakt. Desalniettemin zijn asynchrone formalismen erg handig om gedistribueerde systemen te modelleren, ontwerpen en verifiëren, omdat ze intrinsiek asynchroon zijn.
Ook in tegenstelling zijn systemen met processen die in principe synchroon samenwerken . Een voorbeeld hiervan zijn systemen die zijn gebouwd op basis van het communicerende sequentiële processen (CSP) -model, dat ook een niet-deterministische keuze mogelijk maakt.
Synchrone talen
- Argos
- Atom (een domeinspecifieke taal in Haskell voor harde realtime embedded programmeren)
- Averest
- Blech
- ChucK (een synchrone reactieve programmeertaal voor audio)
- Esterel
- LabVIEW
- LEA
- Glans
- PLEXIL
- SIGNAL (een dataflow-georiënteerde synchrone taal die multi-clock specificaties mogelijk maakt)
- SOL
- SyncCharts
Zie ook
Referenties
- Nicolas Halbwachs. ‘Synchroon programmeren van reactieve systemen’. Kluwer Academic Publishers, 1993. http://www-verimag.imag.fr/~halbwach/newbook.pdf
Externe links
- De synchrone groep in het Verimag-lab.
- De programmeertaal SIGNAL .
- Unificatie van synchrone en asynchrone modellen voor parallelle programmeertalen — Stelt parallelle talen voor op basis van C , stelt programmeurs in staat parallellisme op een breed scala aan computerarchitecturen te specificeren en te beheren.