Hi

Sorry for the late feedback, it's hard juggling all the different RFCs that are in progress to provide meaningful feedback.

Am 2026-03-11 22:07, schrieb Jakub Zelenka:
> I also think that there is not really much use case for user space to
> implement their own handles so such interface would be used only
> internally
> anyway.

This applies equally to interfaces and abstract methods. The abstract
base class however will make it much weirder when a specific (future)
handle might need to implement additional interfaces or abstract
classes.

> In addition interface would effectively expose the internal stream fd
> which
> is currently hidden and makes harder messing up with stream fd which
> might
> cause various issues.

I don't understand that point. For both an interface and an abstract
method, the method would exist on the child class and thus can be called
by a developer.


Well if it is abstract, then the method can be protected and because the classes are final, user spaces cannot call it. But for interface I would

Protected methods of internal classes should still be accessible to Reflection.

need to make it public which means that StreamHandle would need to expose
callabable (public) method. I know that I could just return 0 and use
different handling internally but I think this would be surprising and
created obvious inconsistency. I mean it's fine if the calls happen
internally but if the exposed methods are just dummy and return nonsense
for user space, then I don't think it would be a good design.

It's equally weird that there is a protected method that is effectively internally called by an unrelated class (Context) that is not supposed to know about it. Perhaps the correct solution would then be removing the `getFileDescriptor()` method from the public API entirely and change `Handle` to be an empty “marker interface” that cannot be implemented in userland (similarly to Throwable) to leave all options open for the future?

Best regards
Tim Düsterhus

Reply via email to