Assembler, Fortran en Cobol. Enkele oudjes onder de programmeertalen winnen aan populariteit. Ook SQL beleeft een revival. Wat is er aan de hand?
We halen de bevindingen uit de recente editie van de Tiobe Index, een van de lijsten die Computable gebruikt voor zijn eigen index.
Al heeft Tiobe de neiging om te mikken op de eerder klassieke benadering van it (en programmeertalen). C staat daar bijvoorbeeld op de eerste plaats, gevolgd door Python (terwijl die bij veel andere de lijst aanvoert) en Java op plek drie.
Assembler
Opvallend zijn de oudjes in hun index. Zo stijgt Assembler in een jaar tijd van veertien naar negen, en rolt dus de top tien binnen. Dat is opvallend voor een taal die echt teruggaat naar de basics van programmeren. Assembler is nauwelijks meer dan een symbolische weergave van machinetaal. Ze ontstond in 1947, en is dus bijna 75 jaar oud.
Seppe Vanden Broucke, professor aan de UGent en KU Leuven, ziet een aantal redenen voor de comeback van Assembler. ‘Assembler wordt gebruikt voor embedded en internet of things-toestellen met vaak weinig stroomverbruik en geheugen’, stelt hij. ‘En dergelijke toepassingen zitten in de lift.’
Een andere reden is dat het een belangrijke hobby-taal is. ‘Bijvoorbeeld voor Arduino-achtige projecten, vaak gerelateerd aan iot. Ook zogenaamde retro-computing platforms, die de laatste tijd in opmars zijn, maken er gebruik van. Projecten als Mega65‘, stelt Vanden Broucke, ook in security een rol voor Assembler ziet. ‘Zo zijn er toch nog veel exploits die Assembler gebruiken voor de kritieke delen.’
Fortran & Cobol
De grootste stijger in de recente Tiobe-lijst van programmeertalen is Fortran. Die gaat op een jaar tijd maar liefst van 37 naar 17 in hun Index. Ook Fortran is een oude krijger. Het was een programmeertaal die in de jaren vijftig ontstond en door IBM werd aangeboden.
Bij Tiobe zelf wijten ze de opmars van Fortran aan ‘de massale behoefte aan getallen kraken’, vaak voor wetenschappelijke projecten. ‘Fortran heeft één duidelijke gebruikstoepassing in machine learning. Onderliggend is er heel veel Fortran-code die daarbij wordt gebruikt’, beaamt Vanden Broucke, die zelf voor it-gebruikersvereniging SAI onlangs een webinar over trends in programmeertalen en dit aanhaalde.
Verder in de lijst houdt ook Cobol behoorlijk stand op plaats nummer 25. Al is dat niet echt een comeback. Traditionele programmeertalen blijven vaak vrij lang aan, door hun legacy. En ook een taal als Cobol, een taal uit de jaren zestig, gaat maar moeilijk weg. Het is zo dat er het voorbije jaar bij een legacy-vernieuwing wel wat Cobol is gebruikt (of opgefrist). ‘Maar dat zijn geen nieuwe projecten’, nuanceert Vanden Broucke.
SQL
Wie ook mooi standhoudt in de lijst is SQL, een querytaal. ‘We hadden de laatste jaren een beetje het gevoel van dat SQL aan het verdwijnen was’, aldus de professor. ‘Maar SQL is het database lingua franca.’
Voor SQL spreekt de professor wél van een opmars. ‘Met de komst van NewSQL, zoals een MongoDB en dergelijke, zien we vandaag zelfs een revival in SQL’, vindt hij. ‘Het idee leeft toch wel dat die oude databanken nog niet zo slecht waren. Ook met de beweging naar cloud gerichte databanken en dataplatformen zoals Dremio en Snowflake, is men SQL terug volledig gaan omarmen als querytaal’, stelt hij.
Is die revival van SQL niet opmerkelijk? ‘Velen beseffen dat ze die taal niet willen missen, want het alternatief wordt niet altijd als beter aanzien. Het zal waarschijnlijk nog vele jaren duren alvorens SQL dood valt te noemen.’
Dan krijgt Forth wellicht straks ook nog een revival. De Next-interpreter van Forth springt naar het adres dat volgt op de assembly code van die interpreter (van Forth-word naar Forth-word totdat hij op een opcode Forth-word terecht komt, een Forth-word dat niet met het Builds-deel van de Builds/Does-constructor is gebouwd. Dan komt ie dus niet meer op een opcode assembly van de Next-Interpreter terecht maar in functionele op-code. Onder Andere Harvard SoftWorks had een compiler/optimizer gebouwd die alle Next opcode verwijderde uit een versie voor deployment en dan kreeg je ongelooflijk snelle op-code waar het resultaat van een C-compiler alleen maar tegenop kon als je wist wat je moest doen om daarmee optimaal snelle code te krijgen. Forth had ook reverse polish notation dat direct aansloot op het push/pull-karakter van CPU’s. Had Intel de smeekbeden van de toenmalige community opgevolgd en een Next-instructie ingebouwd in de CPU, weet ik niet hoe het met Forth gegaan zou zijn.
Als ik met goed herinner kon de optimizer ook nog bepalen of hij sommige code maar repeterend achter elkaar moest zetten of toch opteerde voor een loop (maar dat kan ik er later ook romantisch bij gefantaseerd hebben :-))
Grappig dat Cobol als oude taal wordt gemarkeerd, en C niet, terwijl ze niet zoveel van elkaar in leeftijd verschillen… Maar met C++, Java en C# als direct afgeleiden, oogt C veel moderner (en minder oubollig) dan Cobol, dus ik snap het wel.
SQL is geen taal zoals bv C, het heeft toevoegingen nodig zoals PL/SQL of Transact-SQL om het een volwaardige taal te maken.
SQL is al tijden de voorkeursmethode om iets met data in een database te doen. Dankzij Spark SQL implementaties is het ook mogelijk om in (Databricks) notebooks met SQL op dataframes te werken, bijvoorbeeld tussen de Python statements door.
Ik zou SQL geen taal willen noemen, maar meer een onder woorden gebrachte wiskunde (verzamelingenleer). Het is een gestructureerde manier om te benoemen welke verzamelingen er moeten worden meegenomen in het verkrijgen van een uitkomst.
Met de komst van procedures zijn er meer directieve zaken in de taal gesloten. Maar strikt gesproken zijn procedures geen onderdeel van de ’taal’ SQL. SQL is opgezet en bedoeld als een onafhankelijke manier van uitvragen, procedures zijn door leveranciers aan de taal toegevoegd om teveel dataverkeer tussen applicatie en database te voorkomen. Hier is in de praktijk echter vaak misbruik van gemaakt door het verplaatsen van zuivere applicatie verantwoordelijkheden naar de database. Dit heeft meer dan eens geleid tot het gevreesde ‘vendor lock-in’.
Maar zuiver gesproken is SQL geen taal.
“Maar zuiver gesproken is SQL geen taal.”
Jack, is er niet nog een dooie duitser die hier wat over geschreven heeft ?
SQL is zeker wel een taal, maar of het echt een programmeertaal is… 🙂
Ik programmeer nauwelijks meer, maar als ik wat schrijf is het SQL, heerlijk want functionele taal. Je beschrijft welke uitkomst je wilt hebben in plaats van het imperatieve waarin je zegt wat de computer moet doen.
Iemand al een vertaling van de L in de afkorting SQL gedaan? Prachtig dat Dino rammelt op de deur van Jack en Henri toegeeft dat hij niet meer weet waar de Q en S voor staan in de afkorting want de gesloten vraagstellingen zijn voor een woordkunstaar als een vrije interpretatie van de uitkomst. Cryptisch als altijd gaat het niet om de dode Duitser die ooit eens wat geschreven heeft maar de context waarin hij het geschreven heeft, 5 mei vieren we nog altijd het aantal dooie Duitsers. Of om precies te zijn het aantal foute Duitsers want de tijd leerde dat niet iedereen een stramme rechterarm had. Foute denkbeelden kent in de taal van Jack geen grijs middenveld. Henri probeert een balletje op te gooien met zijn reactie over uitkkomsten maar hij krijgt het balletje recht tussen zijn ogen, wat is namelijk het doel waarop we richten?
@Dino
I stand corrected, SQL is een taal in de zin dat het iets is waarmee je de informatie opvraagt. Mijn fout om het geen taal te noemen.
Maar ik hoop dat je het ermee eens bent dat het in het lijstje van programmeertalen als C, C++, Java, Cobol, etc. niet thuishoort.
“Bijvoorbeeld voor Arduino-achtige projecten, vaak gerelateerd aan iot”
Dit is een voorbeeld van niet weten waar je over praat.
De Arduino is in 2004 bedacht als een kleine single-board computer met een bijbehorende IDE.
Het bordje had een USB-aansluiting en een ingebouwde bootloader voor het programmeren.
De taal waarin je hem moest programmeren heet C++, assembler kent de IDE niet en dat zou ook zijn doel voorbij schieten, want de Arduino was bedoeld voor mensen met weinig programmeerervaring.
Internet of things was nog toekomstmuziek en voor de Arduino onbereikbaar, want daarvoor heb je een TCP/IP stack nodig en die paste niet op het 8-bit computertje met 32k programmageheugen.
@CPT
Je had ook één reactie boven de eerste van jou kunnen kijken, daar leg ik uit wat het verschil is tussen de databasetaal SQL en de volwaardige talen PL/SQL en Transact-SQL.
Oudlid, je opmerkingen zijn niet eens off topic als we in de evolutie van programmeertalen een beweging zien van formele – logische, wiskundige en imperatieve – kunsttalen naar natuurlijke taal.
In tegenstelling tot derde generatietalen (3GL) en vierde generatietalen (4GL) zijn vijfde generatie talen veel sneller te leren omdat deze niet meer gericht zijn op wiskunde en logica, maar op natuurlijke taal.
Een eenvoudig overzicht:
3GL: HOW. Procedureel en datagedreven. Python, Java, etc.
4GL: WHAT. Declaratief. Database vraagtalen (SQL)
5GL: WHY. Declaratief en doelgedreven. DT (Decision Tables)
Tot op zekere hoogte sluit ik aan bij de visie van prof. Jan Vanthienen (KU Leuven):
https://dmcommunity.org/challenge/challenge-june-2021/
SQL kan gezien worden als een wiskundige specificatie van het gewenste resultaat en kan daarmee een zuivere 4GL worden genoemd (gericht op het wat, niet op het hoe). Mijns inziens is het vooral interessant om SQL steeds minder op te nemen binnen 3GL-talen (ofwel het embedden van SQL in procedurele talen) of aan te vullen met andere 3GL-constructies (bijv. PL/SQL) en steeds meer op te nemen binnen 5GL-talen.
Een fraaie challenge om dit aan te tonen is:
https://dmcommunity.org/challenge/challenge-oct-2016/
waar een oplossing met SQL nog steeds ontbreekt
(ofwel: wie gaat deze uitdaging aan)!
———————————————————————————————————————————
Je opmerkingen over de grootste denker ooit zijn bepaald ongemakkelijk;
hier laat ik liever de meest relevante hedendaagse filosoof aan het woord:
https://www.trouw.nl/nieuws/heidegger-de-antisemiet-met-het-grote-licht~b70636d8/
Als we de toeslagenaffaire bij de belastingdienst echter plaatsen in de categorie “misdaden tegen de menselijkheid” gaat het niet om de vraag hoe fout Heidegger was in oorlogstijd, maar hoe fout het technocratische neoliberalisme is in “vredestijd”.