all caps and mistyped spelling 


UIm Cakcling!!!

@SuricrasiaOnline wow you put a lot of effort into compiling the data for this one :o


@SuricrasiaOnline yo this owns

typo fix: PHP's fractal of bad desgin -> bad design

@monorail @SuricrasiaOnline i will prove that this ethernet cable will fry anything you plug into it, but in a way that doesn't let you know anything about it or replicate that proof to anyone else

@SuricrasiaOnline oh i just realized i didn't think of "monads are like burritos"

@SuricrasiaOnline notable for not actually being a real analogy the author was making

@monorail @SuricrasiaOnline

Apparently, you can enrage a Haskell programmer by saying, "Monads are just a hack to get the compiler to run a bunch of instructions in order."

@SuricrasiaOnline If anything, numbers that begin with zero are converted *from* octal. Maybe it's clearer to say they're considered octal.

@clacke changed it to "numbers that start with zero are interpreted as octal"

@SuricrasiaOnline oh oh I've actually had to deal with GPS maximum speed in real-world applications?

it wasn't missiles.

it may have been... missile-adjacent.

@SuricrasiaOnline Also I think I missed whatever you did for topic collection/sorting?

@SuricrasiaOnline to be fair "I no longer trust the constants" is a valid case

@SuricrasiaOnline ok 100% f this for reminding me of the existence of hotjava, I needed those neurons for literally anything else

@SuricrasiaOnline I’d forgotten about nasal demons. It’s good to see them again

@SuricrasiaOnline wait how is "moth jammed in a relay" all the way down in the abyss here? I thought literally everyone knew that story??

@SuricrasiaOnline though of course moths are in the order lepidoptera rather than hemiptera, and thus not,, taxonomically,,, "true bugs",,,,,,,

@SuricrasiaOnline god i wish I could click on each of these and it would bring up details of each I could spend hours here

@SuricrasiaOnline I kinda want links to read up on those I don't already know 😆

@SuricrasiaOnline This is awesome. I will gift our engineering slack channel at work with this image. :-)

@SuricrasiaOnline update suggestion -- all links to have target="_blank" added, so that each item opens in a new tab?

@SuricrasiaOnline !!

One of my first thoughts looking a the page was ‘if these were all links I’d probably spend half a day on this page’

@SuricrasiaOnline i just did a lot of reading on a lot of things that my brain is not large enough to understand

@SuricrasiaOnline this is an amazing resource, thank you. I will be spending a lot of time on this.

@SuricrasiaOnline oh fuck yeah I spent my morning yesterday looking some of those up thanks!!

@SuricrasiaOnline Reading about "OpenOffice doesn't print on Tuesdays" reminded me of "You can't code PHP in Turkish" bugs.php.net/bug.php?id=18556

@SuricrasiaOnline I just spent like two and a half hours delving the iceberg with my partner who knows much more CS than I do.

And I learned so so many things.

But the NIST publishing pre-broken crypto -- and folks being suspicious that they'll do it again -- is gonna haunt my ass forever.

@SuricrasiaOnline it took me longer than I'd like to admit before I realised this...

@SuricrasiaOnline "number redefinition" is possible also via Java reflection. Maybe drop "python" (but keep the link)?


Y'know, it occurs to me that the implementation of Smalltalk looping probably belongs here.

Smalltalk does loops via methods of lambda objects. So a while loop is:

[ a < 10 ] whileTrue: [a := a + 1].

(Square brackets are lambdas; everything is an object; whitespace is a method call delimiter. So the above calls method 'whileTrue:' on the left block with the right block as an argument.)

This is not the cursed part.



If you look up the source code for 'whileTrue:', it'll look like this:

whileTrue: aBlock
^[ self value ]
whileTrue: [ aBlock value ].

Method 'value' invokes a block and returns its value. 'self' is a block because whileTrue: is a method of Block (i.e. lambda).

So how does this work?

The first time I saw it, I was in a hurry so I just wrote it off as a recursion thing and didn't think too hard about it.

Needless to say, I was wrong.



While Smalltalk doesn't have flow control structures (it's all done with lambdas and method resolution), it turns out that the underlying bytecode does. And the compiler takes advantage of this by optimizing away the lambdas and method calls into straight gotos when that's possible. In fact, my first example would end up like that, probably.



And that's what happens to the body of the 'whileTrue:' method: the compiler converts the outer loop into conditional gotos which do what you expect.

The loop conditional and body both call their respective counterparts when they need to so it all still works as expected.

As an aside, 'if' conditionals actually make sense but they still get optimized away this way sometimes and you can sometimes trick the compiler into doing the wrong thing as a result.

@SuricrasiaOnline not sure if omission of polyglot files was oversight or just not weird enough

@SuricrasiaOnline Almost got a Bingo. Only missing square was "66-way Cthulhu merge".

Sign in to participate in the conversation

cybrespace: the social hub of the information superhighway jack in to the mastodon fediverse today and surf the dataflow through our cybrepunk, slightly glitchy web portal support us on patreon or liberapay!