Ufuk Kayserilioglu
ufuk.dev
Ufuk Kayserilioglu
@ufuk.dev
Physicist turned software developer turned engineering manager. Current: Leading Ruby Infrastructure team at Shopify & Board Member at @rubycentral.org

🌐 https://ufuk.dev
👨‍💻 https://github.com/paracycle
📍 Nicosia, Cyprus
Awesome, this was a great read.
November 6, 2025 at 1:06 AM
Reposted by Ufuk Kayserilioglu
Hi @ufuk.dev, The article is live here: dev.to/hinokami_dev...

Thank you @byroot.bsky.social for the detailed feedback. Your insights on interning and hashing made it much stronger.
Why Ruby Devs Keep Mixing Up Symbols and Frozen Strings; and How to Tell Them Apart
Every time Ruby developers start talking about # frozen_string_literal: true, someone inevitably...
dev.to
November 5, 2025 at 6:50 PM
Given `foo.bar.` do autocomplete...
October 31, 2025 at 9:34 PM
I see the code as calling `make_shareable` right after initializing itself with `value`, so I think it does make the value shareable at that point. But, agreed, swapping it out with a different value would mutate the state.
October 30, 2025 at 10:16 PM
Doesn't `make_sharable` deep freeze the object? If so, making `self` sharable should make the `value` sharable as well, right?
October 30, 2025 at 9:47 PM
You'll have to write one yourself, I am afraid.
October 29, 2025 at 11:37 AM
I still call it Namespace, and I don't think there have been any code changes to make it Box yet, either.
October 24, 2025 at 10:01 PM
My understanding is that 4.0 moniker is more to celebrate the 30 year anniversary than any breaking change. Ractors being stable (yet possibly still marked as experimental since the API may still change), ZJIT and the introduction of Namespace might end up being the headline features of 4.0.
October 24, 2025 at 8:54 PM
YARD is ok, but its type syntax is not expressive enough for real world code. IMO that makes it fail at type annotations.
October 15, 2025 at 2:40 PM
But RBS inline *is* with comments on top of your code, so you don't need another file and it is not intrusive to your Ruby code either. Think YARD annotations where people would try to put types of arguments but with a way more expressive type syntax.
October 14, 2025 at 11:50 AM
Ok, thanks, that explains a lot. It seems RBS inline has special syntax for embedding RBS syntax in comments: github.com/soutaro/rbs-...

You should be able to use that. @soutaro.bsky.social can help more, though.
Syntax guide
Inline RBS type declaration. Contribute to soutaro/rbs-inline development by creating an account on GitHub.
github.com
October 14, 2025 at 10:51 AM
Right, if you are using RBS annotations with Sorbet, those won't work, because Sorbet only does nominal types and has no way to support structural types, like implicit interfaces, thus conversion isn't possible. You will have to either use your own annotation or fall back to Object, any or top.
October 14, 2025 at 10:38 AM
How so? It has the concept of implicit interfaces which declare duck types, no? github.com/ruby/rbs/blo...
github.com
October 14, 2025 at 10:21 AM
I understand your point and in general I am in your camp. For naming types though, I am still inclined to think of `bool` and the union of `true` and `false` as literal values, whereas the general union of "true" and "false" as `boolish`.
October 12, 2025 at 12:38 PM
Yes, you could do that, but that still implies that the return type responds to all the methods on Object (including Kernel), as if it is intentional. However, the intention is to return a value that can be checked for truthiness, but not for using the value for other reasons.
October 12, 2025 at 12:34 PM
But I think my point stands. With `boolish` you are trying to represent a type that can be a true or a false *value* without implying that it will respond to specific methods.
October 11, 2025 at 10:25 AM