Ada Resource Association
Ada Overview
Ada è un moderno linguaggio di programmazione progettato per applicazioni di grandi dimensioni e di lunga durata – e sistemi embedded in particolare – in cui affidabilità ed efficienza sono essenziali. È stato originariamente sviluppato nei primi anni 1980 (questa versione è generalmente conosciuta come Ada 83) da un team guidato dal Dr. Jean Jeanbiah presso CII-Honeywell-Bull in Francia. Il linguaggio è stato rivisto e migliorato in modo compatibile verso l’alto nei primi anni 1990, sotto la guida di Tucker Taft di Intermetrics negli Stati Uniti. Il linguaggio risultante, Ada 95, è stato il primo linguaggio orientato agli oggetti standardizzato a livello internazionale (ISO). Sotto gli auspici dell’ISO, un’ulteriore revisione (minore) è stata completata come emendamento allo standard; questa versione del linguaggio è nota come Ada 2005. Una revisione più significativa è stata completata (incluso il supporto per le annotazioni del programma) ed è nota come Ada 2012. Un’altra revisione significativa dovrebbe essere completata nel 2022.
Il nome “Ada” non è un acronimo; e ‘ stato scelto in onore di Augusta Ada Lovelace (1815-1852), un matematico che a volte è considerato come il primo programmatore del mondo a causa del suo lavoro con Charles Babbage. Era anche la figlia del poeta Lord Byron.
Ada sta vedendo un utilizzo significativo in tutto il mondo in domini ad alta integrità / critici per la sicurezza / ad alta sicurezza, tra cui l’avionica degli aerei commerciali e militari, il controllo del traffico aereo, i sistemi ferroviari e i dispositivi medici. Con la sua incarnazione dei moderni principi di ingegneria del software, Ada è un eccellente linguaggio di insegnamento sia per i corsi di informatica introduttiva che avanzata, ed è stato oggetto di significative ricerche universitarie soprattutto nell’area delle tecnologie in tempo reale.
Panoramica della lingua
Ada è multiforme. Da un punto di vista è un linguaggio generico classico basato su stack, non legato a nessuna metodologia di sviluppo specifica. Ha una sintassi semplice, istruzioni di controllo strutturate, strutture di composizione dei dati flessibili, forte controllo del tipo, caratteristiche tradizionali per la modularizzazione del codice (“sottoprogrammi”) e un meccanismo per rilevare e rispondere a condizioni di runtime eccezionali (“gestione delle eccezioni”).
Ma include anche molto di più:
Intervalli scalari
A differenza dei linguaggi basati sulla sintassi C (come C++, Java e C#), Ada consente al programmatore di specificare in modo semplice ed esplicito l’intervallo di valori consentiti per variabili di tipi scalari (interi, a virgola mobile, a virgola fissa o tipi di enumerazione). Il tentativo di assegnazione di un valore fuori intervallo causa un errore di runtime. La possibilità di specificare i limiti di intervallo rende esplicito l’intento del programmatore e rende più facile rilevare una fonte importante di errori di codifica e input dell’utente.
Programmazione nel grande
Il design originale di Ada 83 ha introdotto il costrutto del pacchetto, una funzionalità che supporta l’incapsulamento (“information hiding”) e la modularizzazione, e che consente allo sviluppatore di controllare lo spazio dei nomi accessibile all’interno di una determinata unità di compilazione. Ada 95 ha introdotto il concetto di “unità figlio”, aggiungendo una notevole flessibilità e facilitando la progettazione di sistemi molto grandi. Ada 2005 ha esteso le strutture di modularizzazione del linguaggio consentendo riferimenti reciproci tra le specifiche dei pacchetti, rendendo così più facile l’interfaccia con linguaggi come Java.
Modelli generici
Una chiave per i componenti riutilizzabili è un meccanismo per parametrizzare i moduli rispetto ai tipi di dati e ad altre entità del programma, ad esempio un pacchetto stack per un tipo di elemento arbitrario. Ada soddisfa questo requisito attraverso una struttura nota come” generici”; poiché la parametrizzazione viene eseguita in fase di compilazione, le prestazioni in fase di esecuzione non sono penalizzate.
Object-Oriented Programming (OOP)
Ada 83 era basato su oggetti, consentendo il partizionamento di un sistema in moduli corrispondenti a tipi di dati astratti o oggetti astratti. Il supporto OOP completo non è stato fornito poiché, in primo luogo, sembrava non essere richiesto nel dominio in tempo reale che era l’obiettivo primario di Ada e, in secondo luogo, l’apparente necessità di una garbage collection automatica in un linguaggio OO avrebbe interferito con prestazioni prevedibili ed efficienti.
Tuttavia, i grandi sistemi in tempo reale hanno spesso componenti come GUI che non hanno vincoli in tempo reale e che potrebbero essere sviluppati in modo più efficace utilizzando le funzionalità OOP. In parte per questo motivo, Ada 95 fornisce un supporto completo per OOP, attraverso la sua funzione “tagged type”: classi, polimorfismo, ereditarietà e associazione dinamica. Ada 95 non richiede la garbage collection automatica, ma piuttosto fornisce funzionalità definitive che consentono allo sviluppatore di fornire operazioni di recupero dello storage specifiche del tipo (“finalizzazione”). Ada 2005 ha fornito funzionalità OOP aggiuntive, tra cui interfacce simili a Java e notazione tradizionale di invocazione delle operazioni.
Ada è metologicamente neutrale e non impone un “overhead distribuito” per OOP. Se un’applicazione non ha bisogno di OOP, le funzionalità OOP non devono essere utilizzate e non vi è alcuna penalità in fase di esecuzione.
Programmazione concorrente
Ada fornisce una struttura strutturata di alto livello per la concorrenza. L’unità di concorrenza è un’entità di programma nota come ” attività.”Le attività possono comunicare implicitamente tramite dati condivisi o esplicitamente tramite un meccanismo di controllo sincrono noto come rendezvous. Un elemento di dati condiviso può essere definito astrattamente come un “oggetto protetto” (una funzionalità introdotta in Ada 95), con operazioni eseguite sotto esclusione reciproca quando invocate da più attività. Sono supportate anche le interazioni asincrone delle attività, in particolare i timeout e la terminazione delle attività. Tale comportamento asincrono viene differito durante determinate operazioni, per impedire la possibilità di lasciare i dati condivisi in uno stato incoerente. Le versioni più recenti di Ada includono meccanismi leggeri per sfruttare le architetture multicore, consentendo un calcolo parallelo altamente efficiente, preservando la portabilità e rimanendo all’interno del modello di concorrenza Ada sicuro e ben definito.
Programmazione sistemi
Sia nel linguaggio “core” che nell’Allegato Programmazione Sistemi, Ada fornisce le caratteristiche necessarie per consentire al programmatore di avvicinarsi all’hardware. Ad esempio, è possibile specificare il layout di bit per i campi in un record, definire l’allineamento e le dimensioni, posizionare i dati in indirizzi macchina specifici ed esprimere sequenze di codice specializzate o time-critical in linguaggio assembly. È inoltre possibile scrivere gestori di interrupt in Ada, utilizzando la funzione di tipo protetto.
Programmazione in tempo reale
Le funzioni di tasking di Ada consentono di esprimere idiomi comuni in tempo reale (attività periodiche, attività basate su eventi) e l’allegato in tempo reale fornisce diverse funzionalità che consentono di evitare inversioni di priorità illimitate. Viene definito un criterio di blocco degli oggetti protetto che utilizza massimali di priorità; ciò ha un’implementazione particolarmente efficiente in Ada (non sono richiesti mutex) poiché le operazioni protette non sono autorizzate a bloccare. Ada 95 ha definito una politica di invio delle attività che richiede fondamentalmente l’esecuzione delle attività fino a quando non è stata bloccata o anticipata e Ada 2005 ne ha introdotte diverse altre, inclusa la prima scadenza.
Sistemi ad alta integrità
Con la sua enfasi sui principi di ingegneria del software suono Ada supporta lo sviluppo di applicazioni ad alta integrità, compresi quelli che devono essere certificati rispetto agli standard di sicurezza come DO-178B e standard di sicurezza come i criteri comuni. Ad esempio, la digitazione forte significa che i dati destinati a uno scopo non saranno accessibili tramite operazioni inappropriate; errori come il trattamento dei puntatori come numeri interi (o viceversa) sono impediti. E il controllo dei limiti dell’array di Ada impedisce le vulnerabilità del buffer overrun comuni in C e C++.
Tuttavia, il linguaggio completo è inappropriato in un’applicazione critica per la sicurezza, poiché la generalità e la flessibilità possono interferire con i requisiti di tracciabilità / certificazione. Ada risolve questo problema fornendo una direttiva del compilatore, pragma Restrictions, che consente di vincolare le funzionalità del linguaggio a un sottoinsieme ben definito (ad esempio, escludendo le strutture OOP dinamiche).
L’evoluzione di Ada ha visto il continuo aumento del supporto per applicazioni critiche e ad alta sicurezza. Ada 2005 ha standardizzato il profilo Ravenscar, una raccolta di funzionalità di concorrenza abbastanza potenti per la programmazione in tempo reale ma abbastanza semplici da rendere pratica la certificazione. Ada 2012 ha introdotto strutture di annotazione per l’aggiunta di pre-condizioni, post-condizioni e invarianti ai programmi. Ada 2022 li estende con annotazioni aggiuntive per le condizioni iniziali predefinite, le proprietà stabili, il non blocco e l’utilizzo globale degli oggetti. Questi possono servire sia per il controllo in fase di esecuzione che come input per strumenti di analisi statica.
Ada Riepilogo dei Vantaggi
- Consente di design sicuro e affidabile di codice
- Riduce i costi di sviluppo
- Supporta nuove tecnologie
- Facilita lo sviluppo di programmi complessi
- Aiuta a rendere il codice leggibile e portatile
- Riduce i costi di certificazione per la sicurezza-software critico
Ada Dispone di Riepilogo
- programmazione orientata agli Oggetti
- tipizzazione Forte
- Astrazioni per adattarsi a un programma di dominio
- programmazione Generica/templates
- Eccezione trattamento
- Servizi per l’organizzazione modulare del codice
- librerie Standard di I/O, gestione di stringhe, calcolo numerico, contenitori
- Sistemi di programmazione
- programmazione Concorrente
- programmazione in tempo Reale
- sistemi Distribuiti di programmazione
- elaborazione Numerica
- Interfacce per altri linguaggi (C, COBOL, Fortran)
In breve, Ada è standardizzato a livello internazionale di lingua combinazione di programmazione object-oriented, caratteristiche, ben progettate concorrenza di strutture per l’assistenza in tempo reale, e built-in affidabilit. Uno strumento appropriato per affrontare i problemi reali che devono affrontare gli sviluppatori di software oggi, Ada è utilizzato in un certo numero di importanti settori per progettare software che protegge le imprese e la vita.
Leave a Reply