Tolk 与 FunC 中 tilda 函数的可变性对比
TLDR
- 无
~
tilda 方法 cs.loadInt(32)
修改片段并返回整数b.storeInt(x,32)
修改了构建器b = b.storeInt()
也能正常工作,因为它不仅修改,而且返回- 链式方法的工作原理与 JS 相同,它们返回
self
- 一切如预期运行,与 JS 类似
- 无运行时开销,完全相同的 Fift 指令
- 轻松创建自定义方法
- tilda
~
在 Tolk 中根本不存在
这是一个巨大的变化。如果 FunC 有 .methods()
和 ~methods()
,那么 Tolk 就只有 dot,一种也是唯一一种调用.methods()
的方法。一个方法可以_mutate_ 一个对象,也可以不 mutate 一个对象。与列表中的 "简而言之 "不同,这是与 FunC 在行为和语义上的 区别。
目标是实现与 JS 和其他语言相同的调用:
FunC | Tolk |
---|---|
int flags = cs~load_uint(32); | var flags = cs.loadUint(32); |
(cs, int flags) = cs.load_uint(32); | var flags = cs.loadUint(32); |
(slice cs2, int flags) = cs.load_uint(32); | var cs2 = cs; |
slice data = get_data() | val flag = getContractData() |
dict~udict_set(...); | dict.uDictSet(...); |
b~store_uint(x, 32); | b.storeInt(x, 32); |
b = b.store_int(x, 32); | b.storeInt(x, 32); |
b = b.store_int(x, 32) | b.storeInt(x, 32) |
为了实现这一点,Tolk 提供了一种可变性概念,它是对 FunC 中 tilda 含义的概括。
默认情况下,所有参数都按值复制(与 FunC 相同)
fun someFn(x: int) {
x += 1;
}
var origX = 0;
someFn(origX); // origX remains 0
someFn(10); // ok, just int
origX.someFn(); // still allowed (but not recommended), origX remains 0