Ada (ohjelmointikieli)

**Ada** on ohjelmointikieli, jonka kehitystyön Yhdysvaltain puolustusministeriö aloitti vuonna 1974. Puolustusministeriö rahoitti uuden ohjelmointikielen kehitystyön, minkä seurauksena Ada-kieli standardoitiin vuonna 1983 (MIL-STD-1815). Alkuperäisestä Ada-kielestä käytetään nykyisin nimeä Ada 83. Ada 83:n määrittely muutettiin ISO-standardiksi ISO 8652 vuonna 1987. Ada on nimetty Ada Lovelacen mukaan, jota pidetään ensimmäisenä tietokoneohjelmoijana.

Päivitetyn kieliversion kehitystyö alkoi vuonna 1988, ja ensimmäinen versio uuden kielen vaatimuksiksi julkaistiin vuonna 1990. Lopullinen versio uudesta standardista julkaistiin helmikuussa 1995, joten nykyisin käytössä olevasta kielen versiosta käytetään nimitystä Ada 95. Ada 95 on ensimmäinen ISO-standardoitu oliokieli. Se on määritetty ISO-standardissa ISO/IEC 8652:1995(E). Useista muista ohjelmointikielistä poiketen Ada-kielen standardi on saatavilla ilmaiseksi. Ada 2005-kieleen on lisätty mm. Java-kielestä tutut rajapintaluokat sekä geneeriset säiliöluokat. 

Adan standardi ISO/IEC 8652:2012 julkaistiin joulukuussa 2012 
ja sen korjattu versio ISO/IEC 8652:2012/Cor 1:2016 on julkaistu vuonna 2016.

Adan pohjalta on kehitetty nykyään digitaalisuunnittelussa laajassa käytössä oleva laitteistokuvauskieli VHDL.

Adaa varten on kehitetty paketinhallintaohjelmisto, jonka nimi on *Alire*.

## Ada 95:n ominaisuudet

Yksi tärkeimmistä Ada 95:n suunnitteluperiaatteista oli ylläpidettävyys. Kielen syntaksi on suunniteltu helppolukuiseksi ja selkeäksi, koska varsinkin suurten ohjelmistojen kohdalla lähdekoodia luetaan huomattavasti useammin kuin kirjoitetaan. 

Ada 95:een lisättiin olio-ohjelmointi, jonka ansiosta Ada-ohjelmoinnin konsepti muuttui samankaltaiseksi kuten C++. Tosin osa olio-ohjelmoinnin ominaisuuksista ovat olleet osa Adaa jo ensimmäisistä versioista asti. Vasta Ada 95 virallisesti antoi tuen olio-ohjelmoinnille. Esimerkiksi yksi Adan ominaisuuksista on kielen mahdollisuus käyttää "alatyyppejä" () jo hyvin ensimmäisissä versioissa, missä koodilla on yksi peruste "supertyyppi" (), ja uusia ominaisuuksia voidaan määritellä alatyypeissä ilman että tarvitsisi määritellä uutta supertyyppiä Tätä konseptia laajennettiin kun Ada 95-versio julkaistiin. Toisin sanoen, Ada oli varsin edistynyt ohjelmointi kieli verrattuna muihin kieliin samoilla vuosikymmenillä. 

Koska Adan aiempien versioiden ominaisuudet olivat tarpeeksi lähellä olio-ohjelmoinnin perusteita, Ada 95:n muutos oli lähinnä vain "merkittyjen tyyppien"  () lisäys. Ennen, kaikki ohjelman alatyypit ja ominaisuudet piti olla yhden menettelyn () sisällä jotta supertyyppi pystyi käyttämään niitä, mutta uuden merkittyjen tyyppien järjestelmä antaa ohjelmalle mahdollisuuden käyttää menettelyjä jotka ovat merkityn tyypin ulkopuolella, samalla tavalla kuten Javassa pystytään käyttämään erillisiä methodeja. Yksi toinen tärkeä lisäys oli kokonaisen luokan kokoisia tyyppejä (*[[Englannin kieli|engl:]]* *Classwide type*). Tällä tavalla menetelmät jotka ovat yhden luokan sisällä on aina merkattu sen luokan tyypiksi, eikä niitä tarvitse yksitellen määritellä olevan osa luokkaa**<sup>.</sup>** Tämä oli se viimeinen lisäys mitä Ada tarvitsi täyteen olio-ohjelmointi käyttöön. 

Muita Ada 95:n peruskieleen sisältyviä ominaisuuksia:
* vahva tyypitys
* keskeytysten käsittely
* kielessä määritelty tuki rinnakkaisuudelle
* geneeriset tyypit
* helppo liitettävyys C-, Cobol- ja Fortran-koodiin
* tuki laitteistoläheiselle ohjelmoinnille

Ada-kieltä käytetään pääasiallisesti ilmailuun, avaruuteen tai lääkinnällisiin laitteisiin tarkoitetuissa ohjelmistoissa, joissa suuri luotettavuus on ehdottoman tärkeää.

## Esimerkkiohjelma
Yleinen esimerkki ohjelmointikielen syntaksista on Hello World -ohjelma:


```ada
with Ada.Text_IO; use Ada.Text_IO;
 procedure Hello_World is
 begin
     Put_Line("Hello World!");
 end Hello_World;
```


Tämän esimerkkiohjelman voi kääntää GNU-projektin GNAT-kääntäjällä, joka on osa GCC-kääntäjäkokoelmaa. Kaupallisiakin Ada-kääntäjiä on myös saatavilla.

Ohjelman alun **with**-lauseella kerrotaan kääntäjälle Hello_Worldin käyttävän Ada.Text_IO-pakkausta (package). Pakkauksessa määritellyt proseduurit ja funktiot tuodaan näkyviin **use**-lauseella. Varsinaisen Hello_World-ohjelman runko on avainsanojen **begin** ja **end** välissä. Ada ei ota kantaa avainsanojen eikä tunnisteiden kirjainkokoon.

## Standardeja
* ISO/IEC 8652: Information technology—Programming languages—Ada
* ISO/IEC 15291: Information technology—Programming languages—Ada Semantic Interface Specification 
* ISO/IEC 18009: Information technology—Programming languages—Ada: Conformity assessment of a language processor 
* IEEE Standard 1003.5b-1996, POSIX-Ada liitos

## Katso Myös
* Rust, eräs toinen käännettävä ohjelmointikieli, joka Adan tapaan keskittyy takaamaan muistinhallinnan turvallisuuden.

## Lähteet

## Aiheesta muualla
* Laaja wiki-artikkeli Ada-kielestä.  
* Ada Reference Manual ISO/IEC 8652:1995(E). 
* Ada 95 Quality and Style Guide. 
* Alkuperäinen kielen määrittely, ns. Steelman-raportti. 
* ANSI/MIL-STD-1815A-1983 EverySpec.com -sivustolla