内建结构体与运行时类型
本文档说明 Dujie 第一阶段哪些内建名字会形成用户可见的运行时值,以及哪些东西不是“内建结构体”。
当前没有公开内建 struct
第一阶段语言不提供用户可直接命名、构造和字段访问的公开内建 struct。
也就是说,当前这些都不存在:
- 类似
Option、Result这样的公开内建结构体 - 渲染节点对应的公开结构体
- 宿主属性对应的公开结构体
用户可见的具名结构体一律来自用户自己声明的 struct。
内建类型不等于内建结构体
以下名字是语言内建类型,但不是公开内建 struct:
intfloatboolrunestringlist<T>map<K, V>opt<T>iter<T>anywidgetunit
它们各自有语言级语义,但不暴露为用户可解构的内建结构体定义。
opt<T> 的运行时值形态
opt<T> 的用户可见运行时值形态只有:
nonesome(value)
规则:
none是空值形态some(value)是非空值形态- 它们是语言构造,不是公开结构体构造
- 当前也不暴露类似
Option<T> { ... }这样的命名结构
unit
unit 是正式类型,但不提供单独的公开字面量或结构体形式。
它主要出现在:
- 无返回值函数的返回类型
- 没有尾表达式的 block 结果类型
iter<T>
iter<T> 是内建参数化类型,同时配有内建构造形式 iter(xs)。
但它不作为用户可字段访问的公开结构体暴露。
第一阶段只保证:
- 它可以出现在类型位置
- 它可作为
for与map/filter/collect的承载值
widget
widget 是抽象渲染结果类型,不公开其内部节点结构。
这意味着:
- 用户可以持有
widget - 可以把
widget传递、返回、放进容器 - 但不能把它当结构体去字段访问或解构
渲染内建不是结构体
以下名字属于渲染内建,不属于公开内建结构体:
mainelementtextfragmentcomment
它们要么是入口 intrinsic,要么是渲染树构造 intrinsic。
func
func 是函数声明和匿名函数表达式的语法形式,不是公开运行时结构体类型。
第一阶段也不把完整函数值系统作为公开类型系统展开。