d作者:解析dip1000的歧义
解决ref-return-scope参数的歧义
 
按ref return scope声明函数参数时,是return ref还是return scope?
 考虑以下类型:
| 类型 | 意思 | 
|---|---|
| P | 有 间接 | 
| I | 无 间接引用 | 
| X | 可能有或可能无 间接寻址 | 
当前这样解析:
a,P foo(ref return scope P p)=>ref returnScope
b,I foo(ref return scope P p)=>returnRef scope
c,ref X foo(ref return scope P p)=>returnRef scope
d,X foo(ref return scope I)=>returnRef
e,ref X foo(ref return scope I)=>returnRef
d,e是根据删除scope方式来解释,因为如果I不包含间接引用则无意义.
 用T泛型时,麻烦就来了,且return属性令人惊讶的在ref和scope间地来回移动.
 b,是因为不返回指针,scope不必return.同样泛型有奇怪行为.
 因为在@system代码中来回转换指针为ref是合法的,a,c会导致问题.
 ref,return和scope可任意但不能多次出现,并与其他如const属性混合.
 该提议是,如果return和ref相邻,则结果就是returnRef.同样,return和scope变成returnScope.如果无这两种模式,则与a..e行为相同.
 同时拥有returnRef和returnScope仍然非法.
 对构成员函数:
struct S {
     T foo() return scope { ... }
}
第一参是ref S.但可通过允许foo()后接ref来消歧,如下:
T foo() return ref scope { ... } 
// returnRef scope
T foo() ref return scope { ... }
// ref returnScope
Dennis:
 我确实喜欢找相邻的"返回域"的想法.
 但不喜欢a..e规则背后复杂性,宁愿简化它而非加它,替代提案:有相邻return scope关键字时,结果为ref returnScope.其他一切都为returnRef scope.如何?
 可使用scope return来使return Ref为成员函数,不需要新语法.
 W.B:
 我想仅允许,"return ref"/"return scope",第1次迭代时后向兼容.
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号