This is a web mirror of my Gopher log. For the best experience, please visit my gopher site at: gopher://sdf-eu.org/1/users/jelleke/ ------------------------------------------------------------

<-- Home



                        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