commented: Matz and the Japanese core folks have been adamant about this for quite a long time. It is strange. https://bugs.ruby-lang.org/issues/12515 commented: Oh, nice to see the actual discussion by Ruby core folks. Thanks :) commented: What is strange? commented: That TrueClass and FalseClass don't share an ancestor for convenience. commented: When would you meaningfully use that, though? commented: There are examples in the linked thread. commented: I think I understand the argument. They don’t share an ancestor because there’s nothing to share. It’s a question of philosophy. Forget about the concept of boolean and null for a bit. They are the theoretical terms. Ruby doesn’t have boolean or null, it has objects. Ruby has true, false, and nil. All three of these are implemented independently, all three are objects, and all three have the same purpose of identifying a state. Treating true and false as boolean is a fundamental misunderstanding of the language and how it is supposed to be used. (This also applies to having typed variables.) C doesn’t have booleans either. It has zero or not zero. And I think the smallest amount of memory you can allocate is a byte. And now we get back to the idea of boolean. C doesn’t tell you what you can do with bytes so you can ignore the philosophical distinction in the actual implementation of the language. Ruby… not so much. You actually have to make a decision how to structure the language internals. The choice was to follow the principles of the language. And there are a lot of people who want Ruby to follow the principles of traditional computer science. I think it would’ve been stupidly trivial to add boolean to the language decades ago. (And frankly they should have.) It’s probably too risky now. commented: This is a great post, but just one comment: please don't attribute any meaning to the values returned by object_id. It happens to return particular values for immediates (like nil, false, true, etc), but we treat it as a meaningless unique identifier. commented: Update to the blog info: In ruby 3.4.7 nil.object_id isn't 8, but 4. ➜ irb 3.4.7 :001 > nil.object_id => 4 commented: I remember nil being 4 back in Ruby 1.9. commented: Thanks! I wasn't aware of when it changed. I just wen't to run the post code on irb and this came differently. I wonder what version of Ruby he is using! commented: I can't think of a use case for making Boolean exist in a language like ruby. Does anyone have one? commented: Take a look at the discussion on the ruby bug posted earlier. :) commented: Why is a blog post causing a browser (LibreWolf) prompt that I enable DRM? commented: I got the same prompt as I also use Librewolf. There seems to be some Twtich video embed of some sort. I feel like the browser did us a solid here. .