内建函数

本文档收敛 Dujie 第一阶段对外可见的全局内建函数与构造形式。

渲染相关内建 main / element / text / fragment / comment 单独见 渲染内建

总体原则

  • 这里只列语言已经公开承诺的全局内建
  • 类型转换形式如 int(x)float(x) 视为语言内建转换,不归入普通全局函数表面
  • nonesome(...)opt<T> 的语言构造,不归入普通全局函数表面

输出函数

第一阶段稳定支持以下输出函数:

  • print(value: any) -> unit
  • println(value: any) -> unit
  • eprint(value: any) -> unit
  • eprintln(value: any) -> unit

说明:

  • 这些函数主要用于调试和简单展示
  • 它们接受 any
  • 对复杂类型的具体展示文本不作为核心语言语义的一部分锁死

panic

形式:

panic(message: string)

规则:

  • 参数只接受 string
  • 调用后不会正常返回
  • 在类型检查上,允许出现在任意需要值的位置

assert

assert 作为第一阶段内建调试能力保留。

当前用户可按以下签名理解:

  • assert(condition: bool) -> unit
  • assert(condition: bool, message: opt<string>) -> unit

规则:

  • 第一个参数必须是 bool
  • 第二个参数如果提供,用于附加错误信息
  • 该能力主要用于开发期诊断

iter(...)

iter 同时是内建参数化类型名和内建构造形式。

当前稳定承诺的构造形式是:

  • iter(xs: list<T>) -> iter<T>

它的职责是把稳定容器转换成遍历管道的起点。

例如:

let xs: list<int> = [1, 2, 3];

let out = iter(xs).map(func(x: int) -> string {
    `#${x}`
}).collect();

第一阶段不在这里展开更多来源类型。

当前不归入全局内建函数的形式

以下能力虽然是语言内建,但不按普通全局函数对待:

  • text(...)
  • fragment(...)
  • comment(...)
  • element(...)
  • main
  • int(x) / float(x)
  • some(x) / none

它们分别属于:

  • 渲染内建
  • 显式类型转换
  • opt<T> 构造

相关文档