内建类型表面

这一页只说明用户在第一阶段可以直接使用的内建类型方法与相关约束。

总体规则

  • Dujie 当前不支持用户自定义方法
  • 点调用只出现在语言内建方法上
  • 当前没有公开的内建属性
  • 当前也没有公开的内建结构体

这意味着:

  • list.push(...)map.contains(...)iter.map(...) 是语言内建能力
  • xs.lenm.sizex.value 这类属性式访问不是当前公开表面
  • opt<T>widgetiter<T> 都不是可字段访问的内建结构体

list<T>

list<T> 当前公开的方法:

  • len() -> int
  • push(value: T)
  • pop()
  • remove(index: int)
  • clear()

配套规则:

  • 支持下标访问:xs[i]
  • 支持下标赋值:xs[i] = v
  • 更新操作只能作用于 var 绑定
  • 越界访问、越界写入、空列表 pop() 都会 panic

map<K, V>

map<K, V> 当前公开的方法:

  • len() -> int
  • contains(key: K) -> bool
  • remove(key: K)
  • clear()

配套规则:

  • 支持下标访问:m[k]
  • 支持下标赋值:m[k] = v
  • m[k] 缺 key 时 panic
  • m[k] = v 缺 key 时直接插入
  • remove(k) 缺 key 时 panic
  • 更新操作只能作用于 var 绑定

当前 map key 只允许:

  • int
  • bool
  • rune
  • string

opt<T>

opt<T> 当前不提供普通点调用方法。

公开表面只有这些语言构造:

  • none
  • some(x)
  • x is none
  • x is some(v)

另外:

  • 参数类型为 opt<T> 时允许省略
  • 直接传入 T 时会自动提升为 some(T)

iter<T>

iter<T> 是遍历用的中间类型。

当前公开的方法:

  • map(f) -> iter<U>
  • filter(f) -> iter<T>
  • collect() -> list<T>

另外:

  • iter<T> 可用于 for x in expr
  • iter<T> 不支持下标访问
  • 它更适合作为遍历管道,而不是长期保存的数据值

string、基础数值与 bool

第一阶段这些类型都不提供公开点调用方法或属性:

  • string
  • int
  • float
  • bool
  • rune

它们的能力主要来自字面量、运算、比较和少量显式转换。

anywidget

any 当前不提供普通点调用方法或属性。

它的主要公开表面是:

  • 装箱到 any
  • 通过 is 做显式收窄

widget 也是一等类型,但不提供公开点调用方法或属性。

说明

更完整的设计背景见:

  • docs/01.design/17.built-in-types-surface.md
  • docs/01.design/19.built-in-structs-and-runtime-types.md