**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.

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ä" (engl. *subtypes*) jo hyvin ensimmäisissä versioissa, missä koodilla on yksi peruste "supertyyppi" (engl. *supertype*), 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" (engl. *tagged type*) lisäys. Ennen, kaikki ohjelman alatyypit ja ominaisuudet piti olla yhden menettelyn (engl. *procedure*) 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ä (*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**.** 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:

```
 with Ada.Text\_IO; use Ada.Text\_IO;
 procedure Hello\_World is
 begin
     Put\_Line("Hello World!");
 end Hello\_World;

```

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

Lähteet
-------

1. ↑  Ada 2012 Language Standard Approved by ISO Ada Resource Association.  (englanniksi)
2. ↑  ISO/IEC 8652:2012/COR 1:2016 ISO. Viitattu 30.8.2019. (englanniksi)
3. ↑  What Is Subtyping? - Definition from Techopedia *Techopedia.com*. Viitattu 21.2.2023. (englanniksi)
4. ↑  "learn.adacore.com" *learn.adacore.com*. Viitattu 21.2.2023. (englanniksi)

Aiheesta muualla
----------------

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

|  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * n
* k
* m
Yleisimmät ohjelmointikielet |
| --- |
|  |
| Tuotantokäytössä | 
* Ada
* APL
* Assembly
* AWK
* C
* C++
* C#
* COBOL
* Dart
* Delphi
* Eiffel
* Erlang
* Forth
* Fortran
* Go
* Java
* JavaScript
* Kotlin
* Lisp
* Lua
* Objective-C
* Pascal
* Perl
* PHP
* PostScript
* Python
* R
* Ruby
* Rust
* Smalltalk
* Swift
* Tcl
* TypeScript
* Visual Basic

 |
|  |
| Akateemiset | 
* CLU
* Haskell
* Logo
* ML
* OCaml
* Prolog
* Scheme

 |
|  |
| Historialliset | 
* ALGOL
* BASIC
* Modula-3
* MUMPS
* Plankalkül
* PL/I
* Simula

 |
|  |
| Luettelo yleisimmistä ohjelmointikielistä |

 |

|  |  |  |
| --- | --- | --- |
| 

|  |  |
| --- | --- |
| Auktoriteettitunnisteet: Kansalliset Muokkaa Wikidatassa | 
* Espanja
* Saksa
* Israel
* Yhdysvallat
* Latvia
* Tšekki

 |

 |