目录

Sui, 从认识到理解

不闻不若闻之,闻之不若见之,见之不若知之,知之不若行之。 -《荀子·儒效》

Rust: 所有权系统

属和种差

Rust是一种系统级编程语言,它通过所有权系统和类型安全设计,实现了内存安全与高性能的平衡,无需垃圾回收即可防止内存错误和数据竞争。

通俗理解

就像一位既严格又高效的管家,它在编译时就检查所有可能的内存问题,而不是等到运行时才发现。Rust像是给程序员配备了安全带和安全气囊的赛车,让你能以C++的速度奔驰,却不必担心常见的崩溃和漏洞。它的所有权系统就像一套严格的物品借用规则:每个值只有一个所有者,可以临时借出但有明确的使用范围,确保没有人会在别人还在使用时就销毁或改变它。

核心特征

Rust = {所有权系统, 借用检查, 生命周期, 零成本抽象, 类型安全}

  • 所有权:每个值只有一个所有者,所有者离开作用域时值被销毁

  • 借用检查:编译时验证引用的有效性

  • 无垃圾回收:通过RAII实现自动资源管理

  • 零成本抽象:高级特性不增加运行时开销

  • 并发安全:编译时防止数据竞争

本质差异

Rust的本质在于"编译时安全保障"——它通过所有权和类型系统在编译期捕获内存和并发错误,这与C/C++的运行时不安全和Java/Go等语言的运行时检查或垃圾回收形成根本区别。

哲学内核

Rust体现了安全与性能的辩证统一,它通过创新的所有权模型重新定义了系统编程的安全边界,是对"如何在不牺牲性能的前提下实现内存安全"这一核心问题的突破性回应,反映了编程语言设计从"运行时检查"到"编译时保障"的范式转变。

Sui: 对象所有权模型

属和种差

Sui是一种高性能区块链平台,它通过并行交易处理和对象所有权模型,实现了高吞吐量、低延迟和丰富的资产表达能力,主要用于构建Web3应用和数字资产管理。

通俗理解

就像一个专为数字资产设计的高速公路系统,它允许无关联的交易同时进行而不会互相阻塞。Sui像是将传统区块链的"共享账本"理念转变为"对象所有权"模型,每个数字资产都是独立对象,拥有明确的所有者,这使得系统能够识别无关联的交易并并行处理,大幅提升性能。同时,它的智能合约系统让开发者能够创建复杂的数字资产和应用逻辑,就像搭建数字世界的乐高积木。

核心特征

Sui = {对象所有权模型, 并行执行, Move语言, 低延迟终结性, 丰富资产表达}

  • 对象模型:以对象为中心的数据结构和所有权系统

  • 并行处理:无关联交易的并行执行

  • Move语言:安全的智能合约编程语言

  • 即时终结性:交易快速确认

  • 丰富资产表达:支持复杂数字资产定义和操作

本质差异

Sui的本质在于"对象中心设计"——它通过将区块链状态建模为对象集合而非账户余额,实现了交易的天然并行性和资产的丰富表达,这与传统区块链的账户模型和全局状态顺序执行形成根本区别。

哲学内核

Sui体现了性能与表达力的哲学统一,它通过重新思考区块链的基础数据模型,探索了如何在保持安全性的前提下突破性能瓶颈,是对"如何构建既高效又灵活的区块链基础设施"这一核心问题的创新回应,反映了区块链技术从概念验证走向大规模应用的演进方向。

HelloWorld: 闻 -> 行

Contract

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
module counter::counter {
    use sui::object::{Self, UID};
    use sui::transfer;
    use sui::tx_context::{Self, TxContext};
    use sui::event;

    /// 计数器对象结构
    struct Counter has key, store {
        id: UID,
        value: u64
    }

    /// 创建事件
    struct CounterCreated has copy, drop {
        counter_id: address,
        initial_value: u64
    }
    
    /// 修改值的事件
    struct CounterChanged has copy, drop {
        counter_id: address,
        old_value: u64,
        new_value: u64
    }
    
    /// 创建一个新的计数器
    public entry fun create(ctx: &mut TxContext) {
        let id = object::new(ctx);
        let counter_id = object::uid_to_address(&id);
        let counter = Counter { id, value: 0 };
        
        // 发送创建事件
        event::emit(CounterCreated {
            counter_id,
            initial_value: 0
        });
        
        // 将对象发送给调用者
        transfer::public_transfer(counter, tx_context::sender(ctx));
    }
    
    /// 增加计数器的值
    public entry fun increment(counter: &mut Counter) {
        let old_value = counter.value;
        counter.value = counter.value + 1;
        
        // 发送变更事件
        event::emit(CounterChanged {
            counter_id: object::uid_to_address(&counter.id),
            old_value,
            new_value: counter.value
        });
    }
    
    /// 减少计数器的值(如果大于0)
    public entry fun decrement(counter: &mut Counter) {
        let old_value = counter.value;
        // 只有当值大于0时才减少
        if (counter.value > 0) {
            counter.value = counter.value - 1;
        };
        
        // 发送变更事件
        event::emit(CounterChanged {
            counter_id: object::uid_to_address(&counter.id),
            old_value,
            new_value: counter.value
        });
    }
    
    /// 获取计数器的当前值(查看函数)
    public fun value(counter: &Counter): u64 {
        counter.value
    }
} 

MoveVM

Publish

  • Object Changes : Mutated(coin) -> Created(package) -> Published(packageId)

Client

  • Package : Module(source) -> Execute(call)

参阅资料

推荐阅读