>_ DevTrendsnl

Taal

Home

Talen

Secties

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

De kunst van code schrijven die onmogelijk te lezen is

Stel je voor dat je een broncodebestand opent en in plaats van de gebruikelijke loops en conditionals zie je ASCII-kunst gevormd als een trein of een wereldkaart. Je voert de compilatie uit en deze "tekening" verandert plotseling in een werkende rekenmachine of een schaakengine. Dit is geen magie — het is IOCCC, de oudste wedstrijd op het internet voor het schrijven van de meest obfuscated code in C.

De winner repository is een enorm archief van alle werken die de International Obfuscated C Code Contest hebben gewonnen sinds 1984. Het is niet zomaar een verzameling vreemde bestanden, maar een ware encyclopedie van de donkere hoeken van de C-standaard en menselijke vindingrijkheid.

Waar het idee vandaan kwam om code te kwellen

Het begon allemaal in maart 1984. Landon Curt Noll en Larry Bassel werkten bij National Semiconductor en probeerden bugs te verhelpen in de oude Bourne shell-code en de finger utility. De code was zo verschrikkelijk, overladen met macro's en ongestructureerd, dat Landon zich afvroeg: wat als mensen expres slechte code gingen schrijven?

Zo ontstond de wedstrijd, met twee doelen. Ten eerste om door contrast te laten zien waarom codecleanliness belangrijk is. Ten tweede om de grenzen van compilers en kennis van taalnuances te testen. De auteurs noemen het "satirisch programmeren".

Wat je in dit archief kunt vinden

Binnen de repository zijn de mappen georganiseerd per jaar. Elke map bevat bronbestanden voor programma's, een Makefile voor het bouwen, en bestanden met uitleg van de jury.

Puzzelprogramma's

Veel inzendingen zien eruit als een willekeurige set tekens. Je kijkt naar de code en begrijpt niet wat het doet totdat je het compileert. Een programma kan bijvoorbeeld Pi berekenen, terwijl de brontekst zelf visueel is opgemaakt als een cirkel.

Macro's tot het uiterste gebruiken

Deelnemers gebruiken de C-preprocessor vaak op zo'n manier dat deze de programmalogica volledig herschrijft vóór compilatie. Dit is een geweldige manier om te leren hoe #define eigenlijk werken en hoe ze kunnen worden misbruikt.

Non-obvious C-regels exploiteren

Het archief zit vol met voorbeelden die operator precedence gebruiken waar de meeste ontwikkelaars niet eens van weten. Dit dwingt je om in de taalstandaard te duiken en uit te zoeken waarom a[i] hetzelfde is als i[a], en hoe deze kennis helpt om logica te verbergen.

Hoe deze meesterwerken bestuderen

Gewoon een bestand openen in VS Code en proberen te lezen is een slecht idee. Hoogstwaarschijnlijk zie je een warboel van variabelen met één letter en vreemde constanten. De juryleden van de wedstrijd suggereren hun eigen algoritme voor onderzoek.

Ten eerste moet je de code door de preprocessor halen. Een commando als gcc -E prog.c zal alle comments verwijderen en macro's uitbreiden. Het wordt iets duidelijker, maar niet veel.

De volgende stap is het gebruiken van formatteringshulpmiddelen (beautifiers). Maar wees voorzichtig: sommige programma's zijn zo slim geschreven dat formatters gewoon crashen of de logica breken als deze gekoppeld is aan macro's die block structure definiëren.

De meest betrouwbare methode is om de code uit te voeren. Elke map heeft instructies over welke argumenten je moet doorgeven en welke output je kunt verwachten. Soms vereist het programma specifieke compiler flags die in de Makefile zijn gespecificeerd.

Wat is het praktische nut voor een normale ontwikkelaar

Het lijkt misschien vreemd waarom je naar code zou kijken die alle regels van fatsoen schendt? Eigenlijk is het een geweldige trainingsplaats.

  1. Diepgaand begrip van de taal. Door IOCCC-winnaars te analyseren, leer je over side effects, type promotion rules en memory management meer dan uit elk tekstboek.
  2. Debuggen en refactoren. Als je kunt begrijpen hoe een 512-byte programma, opgemaakt als het Linux-logo, werkt, dan zal gewone "legacy" code op het werk voor jou een kinderfeestje zijn.
  3. Begrijpen hoe compilers werken. Je ziet welke optimalisaties moderne compilers uitvoeren en op welke constructies ze struikelen.

Moet je in deze repository kijken

Als je van puzzels houdt en je C-kennis tot het uiterste wilt testen — absoluut ja. Het is als een museum voor digitale kunst waar de tentoonstellingsstukken kunnen (en moeten) worden uitgevoerd.

Probeer deze stijl alleen niet te kopiëren in je werkprojecten. De auteurs van het project waarschuwen zelf: "Schrijf alsjeblieft geen code in deze stijl!". Deze repository bestaat om een uiterste te tonen en dit nooit te benaderen in het echte leven.

Het beste is om te beginnen met bestuderen vanaf de vroege jaren, bijvoorbeeld 1984 of 1985. De programma's daar zijn nog relatief kort en gemakkelijker te decompileren in je hoofd. Hoe dichter bij de moderne tijd, hoe geavanceerder de obfuscation-technieken worden.

Gerelateerde projecten