Hi Rob

On Thu, Mar 13, 2025 at 12:01 PM Tim Düsterhus <t...@bastelstu.be> wrote:
>
> Am 2025-03-12 11:10, schrieb Rob Landers:
> > - Accessing inner classes is done via a new token: ":>" instead of
> > "::".
>
> I don't particularly like that. It is “invented syntax” and I don't
> think that inner classes are sufficiently valuable to dedicate an entire
> operator to them

I would like to echo these thoughts. I also think the RFC is kind of
missing the mark. Arguably the most common use-case for `@internal` is
to restrict a class to a specific package/module or namespace,
regardless of the user's class hierarchy. I believe you specifically
call this a non-goal:

> Currently, many libraries implement “internal” classes by using a naming 
> convention or an @internal annotation in the docblock. Inner classes enable 
> libraries to define an internal class that cannot be used outside the class 
> it is defined inside. This feature is not meant to be used as a “module” 
> system, but rather as a way to encapsulate logic internal to a class, such as 
> DTOs or helper classes.

At least if I understand this statement correctly.

In that case, I see much less value in nested classes. They might
still be ok if they are extremely simple, but the proposal is
currently quite complex. It has a custom operator, it deals with
shadowing, LSP, runtime resolution and more, in addition to visibility
which is the actual goal. Maybe more use-cases are enabled, but I
don't think they are currently well described. Assuming visibility can
partially be implemented in a simpler way (e.g. top-level,
file-private classes), the costs seem to outweigh the benefits in my
opinion. Hence I would not be in favor of the RFC in this or a similar
form.

Ilija

Reply via email to