Top Qs
Tijdlijn
Chat
Perspectief

Programmeertaal l33t

Van Wikipedia, de vrije encyclopedie

Remove ads

l33t is een esoterische programmeertaal ontwikkeld door Stephen McGreal en Alex Mole. Het is vergelijkbaar met Brainfuck. De bedoeling was een taal te maken waarmee je in het internetdialect leet kan programmeren, meer amusant dan serieus. Opzettelijk is het zelfwijzigend en kun je een verbinding opzetten via sockets. In theorie kun je ermee hacken of een virus schrijven, hoewel dat in minimalistische talen een heidens karwei is.

Remove ads

Overzicht

Samenvatten
Perspectief

Broncode typ je in l33t sP34k, en de interpreter vertaalt elk woord (reeks tekens gescheiden door spatie of 'nieuwe regel') als volgt naar een getal: De waarde van een woord wordt bepaald door aanwezige cijfers bij elkaar op te tellen, bv. l33t = 3 + 3 = 6. Alle andere tekens laat hij buiten beschouwing. Woorden zonder cijfers of met uitsluitend nullen krijgen de waarde 0. Je kunt l33t schrijven met enkel cijfers, maar sommige interpreters straffen je genadeloos af als je je deze onbeleefde actie permitteert. Het spreekt vanzelf dat l33T niet hoofdlettergevoelig is.

De taal beslaat een blokje geheugen van 64 kB en twee registers (een voor het geheugen en een voor de opdracht). De l33t-interpreter zet alle woorden in het bronprogramma om naar een serie instructies en zet ze in volgorde vanaf byte 0 in het geheugenblok. Het opdrachtregister begint op byte 0, en voert de instructie daar uit. Elke instructie afgezien van END zorgt voor verandering van het opdrachtregister, zoals je hierna ziet. Het geheugenregister begint met het eerste byte na de instructies. Het geheugen loopt oneindig door. Wanneer het geheugenregister over 64k heen gaat begint het weer bij 0 en andersom. Het opdrachtregister gedraagt zich ook zo.

Het is toegestaan het geheugenregister naar een adres te laten verwijzen dat eerst door instructies was bezet en zo de code zelfmodificerend te maken. Het opdrachtregister loopt op of springt op en neer, totdat het een bestaande of dynamisch gecreëerde END (zie hieronder) tegenkomt. Zo niet, dan loopt het programma door, totdat de stroom uitvalt.

Remove ads

Instructies

Samenvatten
Perspectief
Meer informatie Value, Opdracht ...

Let er op dat de woorden voor de instructies (NOP, WRT, enz.) niets anders zijn dan gewoon handige afspraken om de onderdelen van de l33t-pseudo-code te verduidelijken. INC in je broncode opnemen doet niets (vertaling naar 0, NOP). Als je daarentegen “pH34r” schrijft, gebeurt er wel iets (genereert 7, INC).

Remove ads

Eigenaardigheden

Samenvatten
Perspectief

Puntjes om op bedacht te zijn:

  • Elke instructie > 10 geeft een foutmelding, maar het programma gaat verder. Het mag, maar je maakt je een beetje belachelijk als de standaard l33t-foutkreet "j00 4r3 teh 5ux0r" verschijnt... Wanneer waardes > 10 als argument voor FWD, BAK, INC of DEC voorkomen gebeurt dat niet.
  • l33t interpreteert elk gebruik van 3 en 4 als haakjes, zelfs als ze als gegevens zijn bedoeld! Hoewel “pH34r m3!” naar verwachting het actuele byte met 3 verhoogt, zal een volgende EIF (als het actuele byte onder het geheugenregister niet 0 is) terugspringen naar “m3!”. Wanneer het geheugenregister niet in staat is het overeenkomstige haakje te vinden, zijn de resultaten onvoorspelbaar: je loopt de kans dat het programma stukloopt en een beledigende opmerking maakt over je onbenulligheid.
  • Getallen in het geheugen hebben geen teken, zodat ze circulair zijn: 255 + 1 = 0, and 0 - 1 = 255. Interpreters dienen bij voorkeur, maar zijn dat niet verplicht, de situatie af te vangen dat woorden in de l33t-broncode het getal 255 overschrijden en navenant overlappen. Het is, afgezien van moedwil, onwaarschijnlijk dat je hier tegenaan loopt.

In het algemeen is de uitkomst niet te voorspellen.

  • De grens van 64k voor het geheugen is arbitrair, maar zo gekozen in verband met overdraagbaarheid en minimalisme. l33t-interpreters kunnen een andere geheugenomvang gebruiken, maar standaard beveelt men 64k aan. In ieder geval dienen geheugen- en opdrachtregisters gegevenstypes te hebben die in staat zijn elk byte van het geheugenblok te adresseren.

Voor 64k een geheel getal groter of gelijk aan 0 (dat zijn 16 bits).

Voorbeelden

ASCII-tabel

Het nu volgende programma is het eerste werkende programma ooit geschreven in l33t. Het loopt voor eeuwig en brengt alle 255 ASCII-tekens in beeld, terwijl het eruitziet als een minder vleiende uitspraak over geeks:

ph34r my l3Et 5kIlLZ!!!!!!
nErDs 41n't cool 3v3ry1!!!
y0u b1g g33kS r teh g33kY sux0rs!
PHE4R! LOLOLOLOLOLOL!!!
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads