While going through entries for OMGWTF2, one question often crept in our discussions “What would it be like to have to maintain this code?”
Some entries tried to enter our nightmares based on their otherworldly variable and function names, others revealed themselves as colossal-sized horrors with regards to the sheer size of the code base. However, one entry stood out among all the others - Oxin’s entry written in HTML and "Diarescript".
The source is surprisingly compact - the performance - not all that bad. Strange for a so-called "beast", but that’s about as far as the compliments go.
For starters, most programming languages will at the very least attempt to follow some written language. Something that a programmer can relate to internally. But not Diarescript. I mean, just look at it - the syntax flows like the transcript of a drunken hillbilly's rumblings during a fever dream:
<script type="text/diarescript" class="function" name="randinc"> VALUE PLUS RANDBIT SEED VALUE BE THAT </script> <script type="text/diarescript" class="function" name="randint"> VALUE BE 1 RANGE PARAMETER MINUS 1 NUMBERS BE THAT PROCESSOR BE RANDINC PROCESS NUMBERS SEED BE VALUE PROCESSOR BE RANDINT RESULT VALUE </script> <script type="text/diarescript" class="function" name="randomizer"> PROCESSOR BE RANDINT PROCESS 8 TEMP BE THAT TIMES 32 MINUS 1 SEED BE TEMP PROCESSOR BE RANDOMIZER RESULT TEMP </script> <script type="text/diarescript" class="function" name="genyesno"> VALUE BE 0 CALL RANDINC VALUE LOG VALUE VALUE IFZERO DISPLAY YES!! VALUE BE VALUE MINUS 1 LOG VALUE VALUE IFZERO DISPLAY NO!! </script> <script type="text/diarescript" class="function" name="randombox" width="100" height="40"> DRAW IMG BE THAT PROCESSOR BE RANDOMIZER PROCESS IMG.DATA IMG.DATA BE THAT DRAW IMG PROCESSOR BE RANDOMBOX WAITDELAY BE 0 WAIT RANDOMBOX </script> <script type="text/diarescript" class="function" name="start"> LOGGING BE ON BUTTON GENYESNO SEED BE 0 CALL RANDOMBOX </script>
But then you look under the hood...your high-falootin’ math operator symbols? Forget about them! They’re keywords now.
case 'be': genLineStart += '='; break; case 'plus': genLineStart += '+'; break; case 'and': genLineStart += '&&'; break; case 'minus': genLineStart += '-'; break; case 'times': genLineStart += '*'; break; case 'dividedby': genLineStart += '/'; break;
And what about randomness? Two scoops is required because you just can’t trust just one call with the same seed.
case 'randbit': genLineStart += '(function(seed){ return ((Math.sqrt(Math.random(seed)*Math.random(seed))< 0.5) ? 1 : 0)})(';//Math.Random doesn't generate random enough numbers in a single call genLineEnd = ')' + genLineEnd; break;
If I were make my living writing script in Diarescript, I can almost guarantee that my brain would have to become stupider to compensate.
And as to dreaming in code after a long day “hacking” an app written in Diarescript? Well...let’s just not go there...but...if you're curious, give it a read through yourself (download here) and if you're a little insane, post some code in the comments and let the world judge who truly is the best Diarescripter in the land.
Congratulations on winning the Beast of Burden Award for the worst code to maintain.