类型
信息
FunC 文档最初由 @akifoq 编写。
FunC 有以下内置类型。
原子类型
int
是 257 位有符号整数的类型。默认情况下,启用溢出检查,会导致整数溢出异常。cell
是 TVM cell的类型。TON 区块链中的所有持久数据都存储在cell树中。每个cell最多有 1023 位任意数据和最多四个对其他cell的引用。cell在基于堆栈的 TVM 中用作内存。slice
是cell切片的类型。cell可以转换成切片,然后可以通过从切片加载数据位和对其他cell的引用来获得cell中的数据。builder
是cell构建器的类型。数据位和对 其他cell的引用可以存储在构建器中,然后构建器可以最终化为新cell。tuple
是 TVM 元组的类型。元组是有序集合,最多包含 255 个组件,这些组件的值类型可能不同。cont
是 TVM continuation的类型。Continuations 用于控制 TVM 程序执行的流程。从 FunC 的角度来看,它是相当低层级的对象,尽管从概念上讲相当通用。
请注意,上述任何类型都只占用 TVM 堆栈中的单个条目。
没有布尔类型
在 FunC 中,布尔值被表示为整数;false
表示为 0
,true
表示为 -1
(二进制表示为 257 个一)。逻辑运算作为位运算执行。当检查条件时,每个非零整数都被视为 true
值。
Null值
通过 TVM 类型 Null
的值 null
,FunC 表示某些原子类型的值缺失。标准库中的一些原语可能被类型化为返回原子类型,并在某些情况下实际返回 null
。其他原语可能被类型化为接受原子类型的值,但也可以与 null
值一起正常工作。这种行为在原语规范中明确说明。默认情况下,禁止 null
值,这会导致运行时异常。
这样,原子类型 A
可能被隐式转换为类型 A^?
,也就是 Maybe A
(类型检查器对这种转换无感知)。