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