
Metaprogramming for madmen - leeoniya
http://fgiesen.wordpress.com/2012/04/08/metaprogramming-for-madmen/
======
makmanalp
This is an amazing insight into how demos are written. Farbrausch stuff has
always been inspirational to me.

It's very interesting is the sort of extreme version of the idea that data
model and code are inherently tied: Especially in functional programming
circles it's a maxim that you design your data models first, specifically for
your task, and then the rest of the code is pretty much pattern-matching
around that. This takes that coupling and makes it even tighter, to serve a
higher purpose. I almost feel like given enough time, this could be a JIT: an
executable that adaptively strips code and self-minifies over time as you run
it. :)

Also check out: \- kkrieger (windows only 96kb 3D FPS, video here:
[https://www.youtube.com/watch?v=2NBG-
sKFaB0](https://www.youtube.com/watch?v=2NBG-sKFaB0)) \- the previous post
([http://fgiesen.wordpress.com/2012/02/13/debris-opening-
the-b...](http://fgiesen.wordpress.com/2012/02/13/debris-opening-the-box/))

~~~
leeoniya
> an executable that adaptively strips code and self-minifies over time as you
> run it

i wonder if a lot of the dead code paths are already eliminated at runtime by
the branch predictors in modern CPUs/GPUs. of course it would make no
difference for size on disk (which can be argued is mainly useful for code
golf and edu these days), but it would be cool to get that feedback in some
format without needing to exert any additional effort.

~~~
d23
Do you know much about branch prediction? It seems pretty darn interesting.
I'm just curious as to how something like that would work with a path that
potentially has side-effects. I don't really know how things work very well at
that level, so perhaps I'm misunderstanding something.

~~~
leeoniya
i dont know any more than the wiki entry, which is not difficult to digest :)

[http://en.wikipedia.org/wiki/Branch_predictor](http://en.wikipedia.org/wiki/Branch_predictor)

------
steele
Fun read. I didn't realize this was from 2012, but it helps explain that
jarring click into the first link for .kkrieger, lol
[http://www.theprodukkt.com/](http://www.theprodukkt.com/).

More info on it here.
[http://en.wikipedia.org/wiki/.kkrieger](http://en.wikipedia.org/wiki/.kkrieger)
& makmanalp posted a youtube video.

------
camperman
This brings back fond memories of trying to get a 4k under the magic 4096
bytes. You get really good at reusing data.

------
enneff
This is how Go's test coverage tool works, except in the Go case it was easy
to do because there are libraries for reading and writing Go source code in
the standard library.

Details: [http://blog.golang.org/cover](http://blog.golang.org/cover)

~~~
pdw
GCC can do it as well, compile your code with --coverage and `gcov -c` will
tell you how often each branch was taken.

