The Ruby Object Hierarchy
Every self respecting ruby programmer has one of these on his blog. Join the club.
(Click for a pdf of this. Filled triangles are class relationships, empty triangles are super relationships, funky diamonds are funky metaclass relationships, thanks _why!)
Here is the source code for this. A few notes on the code:
The code also graphs the ‘actual class’ as reported here. I didn’t see the use of that, so it’s gone from the version displayed here.
This is probably the most shoddy piece of code I’ve ever released. Note to self: Breathe out, relax. It doesn’t actually hurt.
If you want to run this yourself, call it like this:
$ ruby extconf.rb && make
(... snippage ...)
$ ruby graph.rb RECURSION_DEPTH > mygraph.dot
The code does depth first graph traversal over Ruby’s object graph and outputs a graphviz dot file. It seems that while recursion depths bigger than 3 are sure funky, they don’t add much to the picture.
A few things that are interesting in the above graph (trying not to be redundant with others):
- There are really a lot more metaclasses than you think. They might gather in groups and descend upon you in your sleep, even. You think turtles is bad? Metaclasses is way badder.
- Class really ties the room together. Without it, Ruby would really be off balance. I guess that’s why its called class oriented programming.
- Everything is created out of nothing. It fits with my belief system to have
nil
sit on the top of that diagram.
Happy hacking!