编译步骤/类型标注擦除/隐式参数擦除。豫
yuyan · 71 行 · 3799 字节 · UTF-8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
寻观「标准库」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「抽象语法树」之「总集」之书。
寻观「编译器核心」之「编译数据」之「抽象绑定树结构」之「模块操作」之书。
「隐式参数擦除」乃化「表达式」而「表达式」也。
「隐式参数擦除」者会「式」而
鉴「式」而
有(「式节点」于「函数调用」于(「缀」于「函数」于「参数节点们」))
则(
递归虑「处理参数节点」其化「表达式」而化
(「列」于「表达式」)而「表达式」者
会「当前函数」而会「剩余参数节点」而
鉴「剩余参数节点」而
有「罄」则「当前函数」
或有(「缀」于「当前参数节点」于「后参数节点们」)则(
鉴「当前参数节点」而
有(「式节点」于(「参数节点」于「隐式」)于「忽略参数们」)则
「处理参数节点」
于「当前函数」
于「后参数节点们」
或有(「式节点」于(「参数节点」于「忽略形」)于「参数们」)
则(
虑「后当前函数」者
(「从左折叠」授以「表达式」授以「表达式」)
于(会「参数」而会
「已有函数」而
「分组函数调用式」
于(「多参数形」于「一」)
于「已有函数」
于((「列」【(「隐式参数擦除」于「参数」)】)))
于「当前函数」于
「参数们」
而
「处理参数节点」于「后当前函数」于
「后参数节点们」
)
或有「其他」则
「发生事故」于『函数调用脊不是参数节点』
)
而
「处理参数节点」
于(「隐式参数擦除」于「函数」)于
「参数节点们」
)
或有(「式节点」于(「拉姆达抽象」于「隐式」)于((「列」【「绑定体」】)))则(「解构抽象并继续」
于「绑定体」
于(会「绑定名」而会「体」而
虑「后体」者「隐式参数擦除」于「体」而
若(「自由变量在式出现」于「绑定名」于「后体」)
则
(「发生事故」于『隐式参数擦除后绑定变量仍然存在:』附「绑定名」附『;表达式:』附(「表达式表示」于「后体」))
否则
「后体」
))
或有(「式节点」于(「拉姆达抽象」于(「多参数形」于「个数」))于((「列」【「绑定体」】)))则
「式节点」
于(「拉姆达抽象」于(「多参数形」于「个数」))
于((「列」【(「隐式参数擦除」于「绑定体」)】))
或有「其他」则
「表达式统一操作」于「隐式参数擦除」于「其他」
也。
「隐式参数擦除顶层」乃化「文件定义列」而「文件定义列」也。
「隐式参数擦除顶层」者会「定义列」而
(「态射」)
于
「定义列」于(会「定义」而
(「文件定义列项名」于「定义」)与
(「文件定义列项公开性」于「定义」)与
(「隐式参数擦除」于(「文件定义列项表达式」于「定义」)))
也。