一、编程语言

<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 简介

Tolk 于 2024 年 11 月在迪拜的 TON Gateway 上首次公开,目的是解决“FunC”太难学和难写的问题,我们可以将 Tolk 视为“下一代 FunC”。Tolk 编译器实际上是 FunC 编译器的一个分支,引入了类似于 TypeScript 的熟悉语法,但保留了所有低级优化。

语言特征