On Wed, Mar 12, 2025 at 3:28 PM Yeoul Na <yeoul...@apple.com> wrote:
> > On Mar 12, 2025, at 2:51 PM, John McCall <rjmcc...@apple.com> wrote:
> >
> > On 12 Mar 2025, at 16:02, Bill Wendling wrote:
> >> Qing pointed out in four lines of code how there are two different
> >> token resolution rules being used: one which is reliant upon C's
> >> current scoping rules and the other which requires a completely new
> >> scoping rule. This is no longer a question about what a programmer is
> >> most likely to infer what is meant or if the documentation makes it
> >> clear what's happening or any other ambiguous issues that me and
> >> others put forth before. This is a serious problem. There are
> >> essentially two options we have:
> >>
> >> 1. Create a proposal to the C standards committee adding an "instance
> >> scope" into the language and use that for the feature, or
> >> 2. Find some other way, which doesn't require modifying the base language.
> >
> > We are actually planning to write a paper for the C committee, so if
> > you’re willing to wait for that, perhaps that’s the right path forward.
> >
> > John.
>
> Let me clarify. We never proposed to change the base language. Please check 
> my earlier response to Qing:
>
> > Yes, I read it and thanks again for writing it up! One clarification 
> > related to that is -fbounds-safety never proposed to change the existing C 
> > behavior. It’s adding an instantiation scope for the bounds annotations 
> > only so members can be accessed within that context, this is similar in a 
> > way to your __self proposal in that it’s introducing an instantiation scope 
> > so that it can be only accessed through the __self syntax.

I don't think any of us intended to change the base language, but from
my reading of Qing's writeup we are. And I don't agree that __self is
also adding an instance scope. It's a way to reference the current
object, similar to 'this' in C++. Any reference to members within that
object must be resolved by reference: __self.member, etc. The members
aren't resolved by resorting to a scoping rule.

> > Then, the question would be potential confusions caused by inconsistency 
> > with how array sizes are handled. However, trying to make it consistent 
> > with arrays could actually make the counted_by itself more error-prone and 
> > confusing because they are inherently different: arrays can never reference 
> > members while counted_by should be able to. I’ll share our full reasoning 
> > with examples in the RFC that I’ll post soon.

This is exactly why we're suggesting the '__self' (or maybe another
idea). :-) It removes all inconsistencies without adding a new scoping
rule to the language. However, as I said in my last email, we're past
worrying about user confusion because we really shouldn't change the
base language (adding a new scoping rule) in ways that haven't yet
been approved by the standards committee.

> > And the confusing code like below should be able to be handled by 
> > diagnostics. The code like this is already confusing to readers and writers 
> > of this code no matter which approach we will take and how clear it would 
> > be for the compiler and the standard.
> >
> > void boo (int k)
> > {
> >  const int n = 10; // a local variable n
> >  struct foo {
> >    int n;     // a member variable n
> >    int a[n + 10];  // for VLA, this n refers to the local variable n.
> >    char *b __attribute__ ((counted_by(n + 10)))
> >      // for counted_by, this n refers to the member variable n.
> >  };
> > }
>
>
>
> We will share our RFC to this audiences by (hopefully) this week about how we 
> design the bounds extension without changing the base language. The target 
> audiences are people in this thread and compiler implementers.
>
> And separately we are also working on proposals targeting the C committee, 
> unlike RFC for compiler changes, this may include some suggestions to change 
> the base C language as well.

Thanks,
-bw

Reply via email to