Waarom Ada?
                       ===========
                       2020-09-05


Waarom zou  je  in  een  archaïsche  programmeertaal  willen
werken?  Eentje die geassocieerd wordt met  Fortran,  Cobol,
bandplooibroeken en verstandige  leren  schoenen?   Aan  Ada
kleven  een  hoop  vooroordelen,  maar  onder   haar   lange
geschiedenis gaat een verrassend moderne taal schuil die  is
meegegroeid met de tijd en een  hoop  te  bieden  heeft  aan
programmeurs in de jaren twintig.

Ada werd ontworpen in de jaren zeventig in opdracht van  het
Amerikaanse ministerie van defensie (DoD).  Er  zweefden  in
die tijd zoveel verschillende talen rond bij  het  DoD  rond
dat het onwerkbaar werd en daarom groeide de wens om met een
gemeenschappelijke taal te gaan werken.  Na jaren soebatten,
vergaderen en het doornemen van voorstellen kreeg  het  plan
dat was ingediend  door  Honeywell  de  voorkeur.   Ada  was
geboren en kreeg in 1983 een formeel  stempel  met  een  ISO
standaard. In de jaren daarna groeide de populariteit van de
taal en werd  het  ook  buiten  het  militaire  domein  veel
toegepast in gebieden waar veiligheid en betrouwbaarheid van
essentieel  belang  waren:   de   luchtvaart,   ruimtevaart,
spoorwegsystemen en bij medische  toepassingen.   In  andere
sectoren was het korte tijd populair,  maar  het  werd  snel
ingehaald door andere talen en verdween langzamerhand op  de
achtergrond. Ada bleef echter niet stilstaan. In 1995, 2005
en 2012 werden vernieuwde ISO standaarden  gepubliceerd  met
toevoegingen die aansloten  bij  de  programmeerstijlen  die
toen  “en  vogue”  waren.   In  '95  werd  het   de   eerste
ISO-gecertificeerde taal met uitgebreide ondersteuning  voor
objectoriëntatie,  in  2005  werden  er  veel  verbeteringen
toegevoegd voor parallelle en realtime taken en in 2012 kwam
er ondersteuning voor contractgestuurd programmeren bij.  Op
het moment zijn vergadertijgers bezig met het ontwerpen  van
Ada 202x  die  ook  allerhande  hips  en  vernieuwends  moet
toevoegen zoals veilige pointers die  geïnspireerd  zijn  op
Rust.

Ada is kortom niet in de steentijd blijven hangen en als  je
een switch naar een nieuwe taal  overweegt,  omdat  de  oude
begint te vervelen of niet meer voldoet dan is het de moeite
waard om haar iets beter te bekijken.

Ada heeft de volgende eigenschappen waar ik erg gelukkig van
word:

- Het uitgangspunt van Ada is dat je er betrouwbare, veilige
 software mee moet kunnen bouwen  die  ook  nog  eens  goed
 presteert.  In de cultuur rond Ada tref je geen “move fast
 and break stuff”, maar meer een bedachtzame en zorgvuldige
 manier van werken.

- Ada heeft een sterk en  statisch  typesysteem.   Het  gaat
 echter  verder  dan  de  meeste  talen,  want  het   leunt
 aanmerkelijk minder op een handvol primitieve types die je
 kunt gebruiken.  Je kunt eigen types beschrijven,  en  ook
 restricties meegeven.  Je kunt bijvoorbeeld zeggen dat een
 type een natuurlijk getal moet voorstellen dat een  vooraf
 gedefinieerd bereik heeft.  Deze verfijnde aanpak  is  erg
 krachtig en wekt veel vertrouwen in de code die  je  ermee
 opbouwt.

- De syntax van Ada is gebaseerd op de  Algol/Pascal-familie
 van talen.  Dit is puur smaak natuurlijk, maar als  iemand
 met sterke Turbo Pascal roots word ik wel gelukkig van  de
 expliciete “begin” en “ends” in de  code,  in  plaats  van
 alle  accolades  die  je  bij  de  C-achtige  talen  ziet.

- Ada heeft geen garbage collector.  Geheugenbeheer gaat dus
 handmatig. In de ogen van veel moderne programmeurs is dit
 een deal breaker, maar het helpt bij de prestaties van  je
 programma's.  In tegenstelling tot bij C/C++ betekent  het
 ontbreken van een GC echter niet dat je maar de hele  tijd
 geheugen aan het alloceren en  het  bevrijden  bent.   Ada
 heeft  door   middel   van   het   “access”   type   ruime
 mogelijkheden om op een betrouwbare manier met geheugen om
 te gaan.   Daarnaast  is  het  mogelijk  om  objecten  van
 dynamische grootte op de stack  te  definiëren  waarna  ze
 automatisch verdwijnen als ze uit de scope raken.  Er zijn
 dus   ook    aanmerkelijk    minder    situaties    waarin
 geheugenbeheer een zorg is.

- Je kunt in Ada bij functies en procedures aangeven  of  je
 variabelen als input, output of beide wil gebruiken.  Hier
 heb je ook geen pointers voor nodig.

- Ada heeft in de taal zelf door  middel  van  “tasks”  hele
 goede ondersteuning voor parallel programmeren.   Je  kunt
 ook  objecten  aanmerken  als  “protected”,   wat   gemene
 problemen kan voorkomen zoals je die vaak tegenkomt als je
 met  meerdere  threads  dezelfde   data   wil   benaderen.

- Ada heeft vrij goede prestaties,  vergelijkbaar  met  C++.
 Het  heeft   ook   goede   ondersteuning   voor   embedded
 programmeren.  Als je dat wil kun je heel  specifiek  zijn
 over  geheugenlayout  en  de  hoeveelheid  bits   die   je
 variabelen innemen.   Dit  opent  ook  mogelijkheden  voor
 datageörienteerd programmeren zoals dat gebruikt wordt bij
 moderne game-ontwikkeling.

- Vanaf Ada 2012 kun je ook  contractgestuurd  programmeren.
 Je kunt pre- en postcondities definiëren  en  deze  worden
 automatisch gecheckt door de compiler.  Deze zijn ook  een
 belangrijk middel voor de ultraveilige  Spark  subset  van
 Ada.  Deze zustertaal van Ada wordt gebruikt voor  uiterst
 kritieke software en kan ook samenwerken met software  die
 formele  eigenschappen   van   je   code   kan   bewijzen.

- Ada heeft een levendige online gemeenschap en er zijn veel
 open source bibliotheken beschikbaar.  Het  blijft  echter
 een niche en veel van het echte  werk  gebeurt  achter  de
 schermen  bij  bedrijven  die  gesloten  software   maken.
 Desalniettemin wordt er veel gedeeld en is ook de leidende
 compiler (Gnat)  beschikbaar  als  vrije  en  open  source
 software.

- Er is geen standaard package manager beschikbaar voor Ada.
 Het is misschien maf om dit als voordeel te  noemen,  maar
 we  hebben  aan  de  NodeJS   wereld   gezien   waar   een
 wijdverbreid  ecosysteem  vol  packages   met   onderlinge
 afhankelijkheden  toe  kan  leiden.   Vaak  betekent   het
 toevoegen van een  afhankelijkheid  aan  een  package  het
 installeren van talloze. Al snel raak je dan het overzicht
 kwijt over  welke  software  nou  eigenlijk  jouw  project
 aansturen en voel je je al snel als een  kapitein  op  het
 topje van een drijvende ijsberg des doods.  Vergeef me  de
 hyperbool, maar ik geloof echt in het  beteugelen  van  je
 software en een populair package systeem  kan  dit  aardig
 dwarszitten. Als de taalcultuur niet een standaard package
 manager   voorschrijft   en   mensen   gewend   zijn    om
 afhankelijkheden handmatig te beheren, dan zal je nooit de
 explosie   van   complexiteit   zien   zoals   bij   Node.

Er   kleven   natuurlijk   ook   wat   nadelen   aan    Ada:

- Het Adawereldje blijft een  niche.   Eentje  die  al  lang
 bestaat en een  focus  op  veiligheid  en  betrouwbaarheid
 heeft, maar toch kan dit een nadeel zijn.  Er zijn  minder
 online bronnen beschikbaar met info over hoe  je  bepaalde
 dingen aanpakt en er zijn minder  softwarebibliotheken  te
 vinden voor alles wat je wil kunnen doen in je software en
 je niet per se zelf wil programmeren.

- Ada is een grote taal.  Als je Ada wil leren dan  betekent
 dit dat je je wat moet schrapzetten.  Ze is  gelukkig  wat
 minder schijnbaar lukraak en organisch gegroeid  dan  veel
 andere  talen,  maar  toch  kan   de   omvang   van   alle
 taalconstructen wat intimiderend zijn.

- De syntax zijn voor mensen die gehecht zijn aan het  typen
 van  accolades  nogal  teleurstellend.    Je   toetsenbord
 verslijt ook een stuk sneller dan  bij  de  meeste  andere
 talen, want Ada is nogal verbaal.  Het  leidende  argument
 binnen de Ada-scene is natuurlijk dat broncode vaker wordt
 gelezen dan geschreven en dat leesbaarheid  daarom  voorop
 moet staan. Mij is het persoonlijk om het even en ligt het
 meer aan smaak.

- Ada heeft toch wel een zweem van grootvaders  technologie.
 Hoezeer  er  ook  gemoderniseerd  is,  gebeurt  de  meeste
 Ada-ontwikkeling  toch  in  vrij  conservatieve  sectoren.
 Persoonlijk prefereer ik mijn technologie wat aan de saaie
 en  betrouwbare  kant,  maar  je   gaat   met   Ada   geen
 hipheidspunten scoren.  Je kunt dan beter afslaan richting
 Rust.  Die taal deelt veel van de waardes  van  Ada,  maar
 daarmee kun je aanmerkelijk de beter de blits maken op  de
 “socials”.

- Ada compilers  zijn  vrij  streng.   Met  de  Franse  slag
 programmeren zit er niet in.  Je wordt gedwongen exact  te
 zijn over wat je wil zeggen.  Hier loop je zeker  tegenaan
 als je met Spark gaat werken.   Voor  de  fans  van  Harry
 Potter: Ada  is  meer  een  professor  Anderling  dan  een
 Hagrid.

Ergo:

Ada is een interessante  moderne  programmeertaal  die  veel
probeert te doen om je  leven  als  programmeer  zo  prettig
mogelijk te maken.  Prettig betekent in deze  zin  wel  iets
meer het soort van verstandige prettig dat je  krijgt  nadat
je braaf je groentjes eet en iets minder van het soort Dukes
of Hazzard soort cowboyprettig, maar  laten  we  wel  wezen:
kwaliteit en betrouwbaarheid van onze software is ontzettend
belangrijk.  Onze leefwereld wordt bevolkt door steeds  meer
software en niet allemaal software van goede kwaliteit.  Ada
is geen panacea tegen slechte software, maar biedt wel  heel
veel  aanknopingspunten  om   goede   code   te   schrijven.

Ik ben geen evangelist en geloof dat het mogelijk  is  goede
software te maken in bijna elke programmeertaal.  Toch  denk
ik dat het gebruik van een taal als Ada enorm kan helpen. In
toekomstige blogberichten wil ik  een  aantal  eigenschappen
verder napluizen en ook verwijzen naar wat anderen  allemaal
voor   boeiende   dingen    over    Ada    gezegd    hebben.


-----------------------------------------------------------
                  Tags: ada, nederlands