Mensen hebben Doom overgezet naar alles, van rekenmachines tot kassa's van McDonald's. Onlangs is er een poging geweest om de software te gebruiken op platforms die niet over de daadwerkelijke verwerkingskracht beschikken, waarbij PDF- en Word-documenten de nieuwste voorbeelden zijn. Deze methoden zijn natuurlijk erg traag, maar ongelooflijk genoeg kan het spel zelfs op niet-computerplatforms worden uitgevoerd.
Mensen hebben Doom overgezet naar alles, van rekenmachines tot kassa's van McDonald's. Onlangs is er een poging geweest om de software te gebruiken op platforms die niet over de daadwerkelijke verwerkingskracht beschikken, waarbij PDF- en Word-documenten de nieuwste voorbeelden zijn. Deze methoden zijn natuurlijk erg traag, maar ongelooflijk genoeg kan het spel zelfs op niet-computerplatforms worden uitgevoerd.
Software-ingenieur Dmitri Mitropoulos heeft het werk van het porten van Doom naar niet-computerplatforms naar een geheel nieuw niveau getild. Deze programmeur slaagde erin Doom te laten draaien binnen het typesysteem van TypeScript, dat zo complex was dat het hem een heel jaar kostte om deze prestatie te voltooien.
TypeScript is een door Microsoft ontwikkelde taal die statische typecontrole aan JavaScript toevoegt om codeerfouten op te sporen voordat deze worden uitgevoerd. Zie het als een spelling- of grammaticacontrole voor uw code, die ervoor zorgt dat functies en variabelen correct worden ingevoerd. Ontwikkelaars gebruiken het vaak om grote JavaScript-applicaties te bouwen.
Het uitvoeren van games binnen het typesysteem van TypeScript wordt als "onmogelijk" beschouwd. Mitropoulos merkte zelfs op dat hij het project startte om ‘snel’ te bewijzen waarom het niet kon worden gedaan. Naarmate hij echter dieper in zijn onderzoek verdiepte, raakte hij geobsedeerd door het te laten werken. Uiteindelijk waren zelfs ervaren TS-ontwikkelaars onder de indruk van hem en hadden ze niets te zeggen.
Mitropoulos' versie van Doom draaide 3,5 biljoen rijen typen en verbruikte maar liefst 177 TB. Het duurt 12 dagen om één frame te compileren, wat resulteert in een ongelooflijk trage 0,0000009645 frames per seconde. De TypeScript-typetracker moet 20 miljoen type-instanties per seconde verwerken om uitvoer te produceren, wat resulteert in extreem lage framesnelheden.
Ondanks de kosten gelooft Mitropoulos dat prestatieverbeteringen mogelijk zijn. In het Michigan TypeScript Discord-kanaal suggereerde hij dat met verdere optimalisaties de compileertijden konden worden teruggebracht tot "1 tot 12 uur". Hij heeft gebieden geïdentificeerd waar hij zijn snelheid kan verbeteren.
Om dit mogelijk te maken, bouwde hij een virtuele machine die volledig gebruik maakte van TypeScript-typen, inclusief de logische implementatie van alle 116 WebAssembly-instructies die nodig zijn om Doom uit te voeren. Elk element van een functionerende computer - geheugen, schijfruimte, zelfs de L1 CPU-cache - moet nauwgezet opnieuw worden gemaakt in het typesysteem. Omdat TypeScript alleen iteratie van tekenreeksen vanaf de linkerkant toestaat, moet hij het binaire algoritme in omgekeerde volgorde typen.
Voor het uitvoeren van het programma is een aangepaste WebAssembly-runtime vereist die alles in de TypeScript-editor afhandelt. Bovendien moest de TypeScript-compiler worden aangepast om de enorme omvang van het project aan te kunnen, aangezien de type tracker alleen al tijdens de uitvoering meer dan 90 GB RAM verbruikte.
Mitropoulos omschreef het werk als een enorme uitdaging. Hij schreef 12.364 handgeschreven tests, leerde meerdere programmeertalen en schatte aanvankelijk dat het project 1,25 PB nodig zou hebben voordat het kon worden geoptimaliseerd. Op een gegeven moment vereiste het samenstellen van een raamwerk een continue instantiatie gedurende drie maanden. Hij zei dat kunstmatige intelligentie niet kan helpen.
"Oh, de AI kan daar niets aan doen", zei Mitropoulos in zijn korte video-uitleg van zeven minuten. "Het is zo laag, er zitten geen arrays of objecten of strings of booleans in de engine, alleen maar binaire getallen, en Doom gebruikt alleen 64-bits en 32-bits gehele getallen, dat is alles. Oh, en die gehele getallen zijn niet ondertekend of niet-ondertekend. Het kostte me de hele dag om daar achter te komen."
Het kostte een heel jaar om deze zware taak te voltooien, waarbij hij 18 uur per dag werkte. Andere TS-ontwikkelaars hebben veel vragen over het project gehad, dus Mitropoulos is van plan nog twee video's uit te brengen waarin de zeer technische details en zijn motivaties worden uitgelegd. Nu hebben we nog een bewijsstuk dat Doom op alles kan draaien, inclusief dingen die het spel helemaal niet kunnen draaien.