>_ DevTrendsnl

Taal

Home

Talen

Secties

Frontend Backend Mobiel DevOps AI / ML GameDev Blockchain Embedded Beveiliging
Java

EOLANG en het concept van de puurste OOP zonder types, klassen of loops

Wat als je klassen, overerving, statische methoden en types uit je favoriete programmeertaal zou verwijderen? En daarmee ook null, operators, type casting en controlestructuren zoals if of for. Het klinkt gek, maar dat is precies wat EOLANG (of simpelweg EO) is — een experimentele taal gecreëerd door het Objectionary-team onder leiding van Yegor Bugayenko.

De makers van het project zijn ervan overtuigd dat populaire talen zoals Java, C++, Python en C# helemaal niet objectgeoriënteerd zijn. Het zijn hybriden waarbij procedurele code zich verschuilt achter klassen en utility-methoden. Zelfs Smalltalk of Self, aldus de auteurs van EO, zijn niet puur genoeg.

Om deze situatie te verhelpen besloten de ontwikkelaars een taal vanaf nul te ontwerpen, gebaseerd op een formeel wiskundig model — $\phi$-calculus (phi-calculus).

Wat zit erin? Alleen objecten en decoratie

EO heeft geen traditionele klassen. In plaats daarvan gebruikt het zogenaamde abstracte objecten die tot leven komen wanneer argumenten aan hen worden doorgegeven. Alle entiteiten zijn standaard immutable.

Je kunt hergebruik van code niet implementeren via traditionele overerving — die bestaat hier simpelweg niet. Het enige compositiemechanisme is decoratie. Een object bevat een speciaal attribuut @ (phi) dat naar een ander object verwijst. Alle aanroepen die niet door het huidige object worden afgehandeld, worden transparant doorgestuurd naar de gewrapte entiteit.

Zo ziet een eenvoudig begroetingsscript eruit:

[args] > app stdout > @ "Hello, world!\n"

Hier is app een abstract object. Het decoreert het object stdout en geeft het argument "Hello, world!\n" door. De syntax is gebaseerd op twee spaties inspringing, enigszins vergelijkbaar met Python, hoewel horizontale notatie via brackets ook beschikbaar is: stdout "Hello, world!".

Maar hoe schrijf je loops zonder while of for? In EO worden loops geconstrueerd als reguliere objecten. Neem een kijkje bij het voorbeeld voor het afdrukken van een kwadraattabel:

malloc.empty > [args] > app seq * > [x] >> x.put 2 while x.as-number.lt 6 > [i] >> seq * > [i] >> stdout "%d x %1$d = %d\n".printf * x x.as-number.times x x.put x.as-number.plus 1 true

Het ziet er onbekend uit. De code combineert objecten seq (sequentie), while en expressies zoals x.as-number.plus 1. Er zijn geen rekenkundige operators + of * — in plaats daarvan worden methoden van de corresponderende objecten aangeroepen.

Architectural Punk: XML en XSLT 2.0 onder de motorkap

Het meest verrassende aan het project is niet alleen de semantiek van de taal, maar de architectuur van de compiler.

De meeste compilers bouwen een abstract syntax tree (AST) in het geheugen en doorlopen deze met visitors in Java of C++. De EO-ontwikkelaars kozen een andere aanpak. De parser zet code om naar XMIR — een intermediate representatie gebaseerd op XML.

Dan begint de XSLT-magie. Alle syntaxtransformaties, controles en vertaling naar doelcode worden geïmplementeerd als een set XSLT 2.0-stylesheets. De README van het project bevat zelfs een benchmark die laat zien hoeveel milliseconden elk .xsl bestand kost om te verwerken tijdens module builds. Zo wordt er bijvoorbeeld meer dan 30% van de tijd besteed aan to-java.xsl.

De build-pipeline is direct ingebed in Apache Maven via eo-maven-plugin. Modules en bibliotheken van derden worden niet gedownload als kant-en-klare JAR-bestanden van Maven Central. In plaats daarvan haalt het MjPull-tool EO-broncode op uit Objectionary's Git-repository en compileert deze samen met je project.

Hoe kun je de taal zelf uitproberen?

Je hebt Java SE en npm nodig om te beginnen. De CLI-utility wordt geïnstalleerd met één commando:

npm install -g [email protected]

Daarna kun je een eenvoudig bestand compileren en uitvoeren:

eoc --easy link
eoc --easy --alone dataize app

Is er enig praktisch nut voor dit alles?

Het is onwaarschijnlijk dat iemand momenteel productiediensten in EOLANG zal schrijven. De taal blijft een onderzoeksexperiment. Het mist conventionele optimalisaties en de compilatieketen via XSLT presteert langzamer dan traditionele oplossingen.

Maar EO dient als een uitstekende mentale oefening. Het dwingt je om gewoontes te heroverwegen die je in de loop der jaren hebt gevormd door met Java, C# of Python te werken. Wanneer je wordt beroofd van null, mutabiliteit en types, moet je opnieuw leren hoe je componentconnectiviteit ontwerpt en decorators gebruikt.

Als je geïnteresseerd bent in theorie over programmeertalen, formele modellen zoals de $\phi$-calculus, of ongebruikelijke compiler-architecturen — de objectionary/eo-repository verdient zeker je aandacht.

Gerelateerde projecten