<aside> 💡
"A language that doesn't affect the way you think about programming, is not worth knowing."
《Epigrams on Programming》Alan Perlis (Turing Award)
</aside>
“如果一种编程语言不能改变你对编程的思考方式,那它就不值得学习。”, 我个人学习和使用过十几种编程语言,确实能从每个编程语言的设计和使用中提升对编程的理解。
同样的,我们很熟悉这句话 “程序 = 数据结构 + 算法”,
程序(语言) | 数据结构 | 算法 | 备注 |
---|---|---|---|
C | - int,short,long |
| | Java | -byte, short, int, long -float, double -char,bool -class,interface,enum,List,String,Map | 提供大量内置算法和配套的丰富数据结构 | 平台无关,数据结构易用,算法实现偏向安全和简洁
| | JavaScript
| - 数字(Number, BigInt)、字符串(String)、布尔(Boolean)、undefined、null、Symbol
| 适合快速原型开发,数据结构灵活但性能较低,算法实现依赖运行时优化。
| | | | | |
同样的,我们也可以列举一下 TON 的几种合约编程语言,以及为什么现在又多了一个 Tolk。
程序(语言) | 数据结构 | 算法 | 备注 |
---|---|---|---|
Fift | 257位整数(int)、字符串(string)、字节数组(bytes) |
单元(cell)、切片(slice)、构建器(builder)、元组(tuple)、字典(Fift dictionary) | 算法以栈式后缀表达式为主,适合低级TVM操作(如单元序列化、消息生成)。性能高但开发复杂。
| 基于单元(cell)的树形结构,支持257位整数运算和TVM单元操作。栈式操作,数据结构以单元为基础,需手动序列化。
栈式语言,专为TON区块链设计,适合低级TVM操作和消息处理,非通用开发。 | | FunC
| 257位整数(int)、
单元(cell)、切片(slice)、构建器(builder)、延续(continuation)、元组(tuple)、张量(tensor)、
BoC, 字典(HashmapE) | 算法实现接近C,静态类型确保安全性。支持TVM指令操作,适合复杂合约逻辑。性能高但需手动优化。 | 基于单元的树形数据结构(HashmapE支持键值对)。静态类型,需手动管理单元序列化。stdlib.fc提供低级TVM操作支持。
C风格语言,专为TON智能合约设计,灵活但需手动处理细节。
| | Tact
| 整数(Int)、布尔(Bool)、地址(Address)、单元(Cell)、切片(Slice)、构建器(Builder)
结构体(struct)、映射(map)、可选类型(optional)、消息(message) | 算法实现简洁,支持异步调用和消息传递。编译为FunC,性能接近FunC但更易用。
| 基于单元的树形结构,支持高级抽象(如map、struct)。静态类型,自动序列化减少手动操作。
类似TypeScript/Rust,强调简洁和安全,适合复杂合约快速开发。
| | Tolk
| 整数(int32等)、布尔(bool)、地址(address)、单元(Cell)、切片(Slice)、构建器(Builder)
结构体(struct)、字典(HashmapE)、可选类型(Nullable), 联合类型,Tensor,Tuple 等 | 算法实现高效,编译器优化生成更节省gas的代码。支持方法调用和模式匹配,性能优于FunC。
| 基于单元的树形结构,改进FunC的字典操作。静态类型,自动序列化,优化gas消耗。
下一代FunC,类似TypeScript/Rust,语法更现代,gas效率高。 |
Tolk 于 2024 年 11 月在迪拜的 TON Gateway 上首次公开,目的是解决“FunC”太难学和难写的问题,我们可以将 Tolk 视为“下一代 FunC”。Tolk 编译器实际上是 FunC 编译器的一个分支,引入了类似于 TypeScript 的熟悉语法,但保留了所有低级优化。