☰
cactor 版本演进全解:从 0.8.0 起步到 1.1.0 企业级功能落地的 CHANGELOG 导读
2026/10/14 16:21:17 网站建设 项目流程
  • 后端
  • 并发编程
  • 分布式

【免费下载链接】cactor

项目地址:https://gitcode.com/Cangjie-SIG/cactor
点击查看免费下载

本文以 cactor 仓库的 CHANGELOG.md 为主体,带你完整走读该项目从项目初始化(0.8.0)、核心 Actor 系统成型(0.9.0)、首个正式版本(1.0.0)到企业级功能齐备的 1.1.0 的完整演进脉络。读完本文,你将掌握:如何阅读一份遵循 Keep a Changelog 与语义化版本规范的更新日志、cactor 每个版本的关键功能清单及其在src/源码中的对应实现位置、7 层架构是如何随版本迭代逐步完善的,以及项目当前的构建配置(版本、工具链、编译选项)与后续路线图。

一、更新日志的格式规范与阅读前提

cactor 的 CHANGELOG.md 开头明确声明了两条格式约定:

  • 格式基于 Keep a Changelog:即按版本分区,每个版本下使用标准化小节描述变更;
  • 遵循语义化版本(SemVer):文档末尾附有版本号的权威解释。

文档末尾的"版本说明"章节给出了版本号格式与变更类型的完整定义,这是理解所有后续版本条目的基础:

版本号格式(SemVer)

部分含义
主版本号(Major)不兼容的 API 修改
次版本号(Minor)向下兼容的功能性新增
修订号(Patch)向下兼容的问题修正

变更类型

类型英文含义
新增功能Added新功能
修改Changed对现有功能的变更
弃用Deprecated即将移除的功能
移除Removed已移除的功能
修复Fixed任何 bug 修复
安全Security安全相关的修复

按照这一规范,读者只需按"版本日期 → 新增/修改/修复"的顺序扫读,即可快速判断某次升级是否引入不兼容变更。cactor 的版本节奏非常紧凑:0.8.0(2025-06-10)→ 0.9.0(2025-06-15)→ 1.0.0(2025-06-22)→ 1.1.0(2025-07-03),两个月内完成了从骨架到企业级的跃迁。

一个值得注意的仓库现状是:构建配置 cjpm.toml 中声明的包版本为7.0.0,描述为 "CActor 7.0 with 6-layer architecture",而 CHANGELOG 中最新记录为 1.1.0——这说明仓库在 1.1.0 之后经历了继续快速迭代(文档与示例体系对应 v7.0.0),CHANGELOG 记录的是"重要变更"而非每一次提交,这也是 Keep a Changelog 的典型用法。

二、[未发布] 与"计划中":当前路线图

CHANGELOG 顶部的[未发布]区列出了计划中的四项工作:

  • HTTP 集成和 Web 服务器
  • 序列化优化和多格式支持
  • 可视化监控工具
  • 云原生支持

其中"序列化优化和多格式支持"与仓库现状可以直接印证:src/foundation/serialization/ 目录下已有serialization_manager.cj、enhanced_serializer.cj等序列化基础设施,[未发布]条目暗示当前序列化仍以字符串/JSON 风格为主,后续将引入多格式支持。"可视化监控工具"则对应 src/integration/monitoring/ 中已存在的visualization.cj、distributed_tracing.cj等模块的持续增强。

三、1.1.0(2025-07-03):重大版本更新,企业级功能落地

这是 CHANGELOG 中最详尽的一个版本条目,被标注为"重大版本更新,完成了所有核心企业级功能的实现"。下面逐节解读其五大新增功能,并逐一给出仓库源码中的对应位置。

3.1 Ask 模式完善

CHANGELOG 对 1.1.0 的 Ask 模式列出了五个要点:

  • 生产级实现:完整的请求-响应模式支持
  • 高性能:657,894 req/s,1,520 ns/req(日志记载的基准数据)
  • 异步支持:完整的异步回调和批量处理
  • 超时管理:完善的超时处理机制
  • 类型安全:编译时类型检查

对应的实现位于 src/patterns/ask/ 包。核心 API 文件 ask_api.cj 中的Ask结构体印证了日志所述的设计:

public struct Ask { private static let defaultManager: AskPatternManager = AskPatternManager(Duration.second * 5) // ... public static func ask(target: ActorRef, message: Message): AskFuture<Message> { ensureInitialized() ask(target, message, Duration.second * 5) } public static func ask(target: ActorRef, message: Message, timeout: Duration): AskFuture<Message> { ensureInitialized() defaultManager.ask(target, message, timeout) } }

从源码结构看,这里体现了日志中"超时管理"与"异步支持"两条的具体形态:Ask持有单例AskPatternManager(默认超时 5 秒),提供无超时/带超时/类型简化三个重载,返回值AskFuture<Message>支撑回调式异步处理。仓颉不支持 static 块,因此采用"懒初始化"的ensureInitialized()完成管理器启动,这是一个贴合语言特性的实现细节。ask_pattern.cj与typed_ask_pattern.cj则分别承载模式本体与类型安全变体,与 src/examples/ask_pattern_demo/main.cj、src/examples/ask_demo/main.cj 两个可执行示例配套验证(两者均在 cjpm.toml 中注册为executable包)。

3.2 集群管理增强

日志列出:集群分片系统、多种路由策略(轮询、一致性哈希、随机、广播)、负载均衡与健康检查、故障转移,以及"100 万 Actor、8 个工作线程"的支持规模。

实现位于 src/distribution/cluster/:

  • cluster_sharding.cj:定义ShardId、EntityId与ShardAllocationStrategy分片分配策略接口,是分片协调的核心;
  • shard_region.cj:分片区域管理;
  • cluster_routing.cj:集群级路由;
  • failover.cj:故障检测与恢复;
  • cluster_support.cj:支撑设施。

一个诚实的实现细节值得注意:cluster_sharding.cj 中EntityId.extractShardId()的分片映射目前采用简化算法(固定返回shard-0),源码注释明确标注为"简化的分片映射算法"。这说明集群分片当前更侧重于架构骨架与接口的完整性,而非生产级哈希分片——阅读 CHANGELOG 时结合源码可以准确判断功能成熟度。配套示例见 src/examples/cluster_sharding_demo/main.cj。

3.3 持久化系统完善

日志要点:事件溯源(完整的事件存储和重放机制)、CQRS 架构、快照管理(内存和文件)、多存储后端、版本控制与冲突检测。

实现位于 src/distribution/persistence/,文件与日志条目几乎一一对应:

CHANGELOG 条目源码文件
事件溯源event_sourcing.cj
CQRS 架构cqrs_system.cj
快照管理snapshot_store.cj
事件存储后端event_store.cj
持久化插件机制persistence_plugin.cj
持久化 Actorpersistent_actor_impl.cj、persistent_actor_manager.cj

event_sourcing.cj 中的PersistentEvent结构印证了"版本控制"条目:事件携带persistenceId、sequenceNr、timestamp与EventPayload(要求实现getEventType()/serialize()/getVersion()),并提供causationId、correlationId两个可选字段支撑因果追踪,metadata支持附加键值信息。配套示例见 src/examples/persistence_demo/main.cj。

3.4 测试框架建设(TestKit)

日志要点:TestKit 框架、TestActorRef 与同步消息处理、TestProbe 与期望检查、性能测试支持、与 CActor 系统集成。

实现位于 src/integration/testing/test_framework.cj,三个核心类型与日志条目直接对应:

  • TestActorSystem(L84):内部通过CActorSystemFactory.create(name)包装一个真实的CActorSystem,同时挂载TestTimeController虚拟时间控制器,印证"与 CActor 系统完美集成";
  • TestProbe(L127):提供expectMessage(expectedMessage, timeout)与expectNoMessage(duration)两个期望检查 API,返回TestExpectation枚举(Success/Timeout/UnexpectedMessage/Error),是消息验证的直接载体;
  • TestTimeController(L52):以 Mutex 保护的虚拟时间实现advanceTime/reset,支撑定时器与超时类测试的确定性执行。

仓库中还有两个配套示例验证该框架:src/examples/test_framework_demo/main.cj 与 src/examples/test_framework_validation/main.cj。

3.5 CActor Streams 流处理系统

日志要点:500 万元素/秒吞吐量(日志记载数据)、完整背压控制、丰富操作符(map、filter、fold、scan、distinct 等)、声明式 DSL、高内聚低耦合架构。

实现位于 src/streams/,文件头注释明确写出设计目标——完整的 Source/Flow/Sink 抽象、类型安全 DSL、完整背压机制、基于 Actor 的高性能实现:

  • 核心接口:src/streams/core/stream_interfaces.cj,定义StreamElement(元素标识/时间戳/序列化)与StreamStage<In, Out>(process/getStageName/canAcceptMore背压准入);
  • 消息协议:src/streams/core/stream_messages.cj;
  • 简化 API:src/streams/core/simple_stream_api.cj;
  • 声明式 DSL:src/streams/dsl/stream_dsl.cj。

与日志中的 DSL 条目对应,仓库提供了 7 个流处理示例目录(src/examples/ 之外,包括streams_demo、streams_dsl_demo、streams_advanced_demo、streams_backpressure_demo、streams_unified_demo等),全部在 cjpm.toml 中注册为可执行包,可用cjpm build构建后逐一运行验证。

3.6 XState 状态机系统

日志要点:基于仓颉枚举的强类型状态、模式匹配转换引擎、"状态机即 Actor"集成、企业级特性(事件溯源、状态快照)、声明式 DSL。

实现位于 src/xstate/,采用清晰的子包划分(cjpm.toml 中为cactor.xstate、cactor.xstate.core、cactor.xstate.lang、cactor.xstate.features、cactor.xstate.enterprise分别配置了static输出类型):

  • 核心:src/xstate/core/machine/state_machine.cj 的StateMachineDefinition(含validate()自校验)、src/xstate/core/engine/transition_engine.cj 转换引擎、src/xstate/core/actor/state_machine_actor.cj 印证"状态机即 Actor";
  • 类型定义:src/xstate/core/types/ 下的state_types.cj、event_types.cj、transition_types.cj;
  • 特性扩展:src/xstate/features/hierarchical/hierarchical_state_machine.cj(层级状态机)、src/xstate/features/parallel/parallel_state_machine.cj(并行状态机);
  • 企业级:src/xstate/enterprise/event_sourcing/event_store.cj、src/xstate/enterprise/distributed/distributed_state_sync.cj;
  • 宏与 DSL:src/xstate/lang/macros/state_machine_macros.cj。

配套示例位于 src/examples/xstate_demo/,含simple_toggle_machine.cj、comprehensive_demo.cj、xstate_validation.cj等多个可运行演示。

3.7 架构改进:从 6 层到 7 层

1.0.0 条目记录的是 6 层模块化架构:

API Layer (API层) ← 统一对外接口 Integration Layer (集成层) ← 监控、日志、配置 Distribution Layer (分布式层) ← 远程、集群、持久化 Patterns Layer (模式层) ← Ask、路由、断路器 Runtime Layer (运行时层) ← 调度器、邮箱、定时器 Core Layer (核心层) ← Actor、消息、系统 Foundation Layer (基础设施层) ← 并发、序列化、网络

注:原文档此处标题为"6 层"但图例中列出了 7 行,1.1.0 条目则明确写为"7 层架构完善",新增的一层即为 XState 状态机系统。

1.1.0 将 7 层架构"完善",各层在源码中的落点可直接核对:

层职责(CHANGELOG 原文)源码目录
Foundation Layer并发原语、序列化、网络通信src/foundation/(queue、serialization、memory、network、monitoring等)
Core LayerActor、消息、系统核心抽象src/core/(actor、message、system、context、supervision、typed等)
Runtime Layer调度器、邮箱、定时器src/runtime/(dispatcher、mailbox、typed/timers.cj、lifecycle、supervision等)
Patterns LayerAsk、路由、断路器src/patterns/(ask、routing、circuit_breaker、backpressure)
Distribution Layer远程、集群、持久化src/distribution/(remote、cluster、persistence、streaming)
Integration Layer监控、日志、配置src/integration/(monitoring、logging、configuration、testing)
API Layer统一对外接口src/api/(cactor.cj、cactor_system_api.cj、actor_ref_api.cj、extensions等)
XState(1.1.0 新增完善)状态机系统src/xstate/

这些层与 cjpm.toml 的包配置结构一一对应:文件以# === Foundation Layer ===、# === Core Layer ===、# === Runtime Layer ===等注释分区,每个层内子包独立配置output-type(Foundation/Core/API 多为static,Runtime 各包为dynamic,示例与测试包为executable),层与层之间的依赖通过仓颉包边界隔离。从源码结构看,src/下共有 326 个.cj源文件,其中测试目录 32 个,与 CHANGELOG"完整测试体系"条目相互印证。

3.8 仓颉 0.60.5 完全适配

1.1.0 强调"完全适配最新仓颉语法",包括 API 升级(HashMap.add()、ArrayList.add()等)、充分利用强类型特性、使用仓颉原生并发支持。仓库侧的对应证据有两处:

  • cjpm.toml 声明cjc-version = "0.60.5",即当前构建绑定仓颉 0.60.5 工具链,编译选项为-Woff unused -Woff parser --diagnostic-format=noColor;
  • CHANGELOG.md 1.1.0 条目的"编译验证"说明"无错误,仅 Unicode 字符警告"——这与编译选项中关闭 unused/parser 告警的配置一致。

适配痕迹也散布在实现中,例如 ask_api.cj 中"仓颉语言不支持 static 块,改为延迟初始化"的注释,以及 cluster_sharding.cj 中HashMap的迭代用法,均体现了新语法/新 API 的实际运用。

3.9 1.1.0 的性能指标与测试覆盖

CHANGELOG 记载的 1.1.0 核心性能指标(为日志原文数据,非本文实测):

  • Ask 模式:657,894 req/s,1,520 ns/req
  • 集群分片:支持 100 万 Actor
  • 流处理:500 万元素/秒
  • 状态机:纳秒级状态转换
  • 整体延迟:保持微秒级延迟

测试体系方面,日志声明"单元测试 100% 覆盖核心组件、集成测试端到端验证、性能基准测试、示例程序全部正常运行"。仓库中可核验的部分:

  • 单元测试:src/tests/unit/(core 下含 actor、context、message、supervision、edge_cases、mock、typed 子包;runtime 下含 mailbox、lifecycle、supervision、typed 子包),如 src/tests/unit/core/supervision/supervision_matrix_test.cj、src/tests/unit/runtime/mailbox/priority_mailbox_test.cj;
  • 集成测试:src/tests/integration/(actor_system_integration_test.cj、cluster_integration_test.cj、performance_regression_test.cj);
  • 性能测试:src/integration/testing/ 的test_performance.cj、simple_benchmark.cj与 src/integration/testing/simple_benchmark_test/main.cj 等可执行基准。

3.10 1.1.0 的开发体验:示例系统

日志列出的六类示例与仓库目录一一可查:

日志条目示例路径
Hello World 入门src/examples/hello_world_demo/main.cj
Ask 模式src/examples/ask_pattern_demo/main.cj、src/examples/ask_demo/main.cj
集群分片src/examples/cluster_sharding_demo/main.cj
持久化/事件溯源src/examples/persistence_demo/main.cj
流处理src/examples/streams_demo/main.cj 等 7 个 streams 示例
状态机src/examples/xstate_demo/

以 src/examples/hello_world_demo/main.cj 为例,入门示例展示了日志所称"标准 Actor 模型"的最小形态:定义WorldHelloWorldActor <: Actor,在receive(message, context)中用match对StringMessage/PingMessage分支处理并返回MessageResult.Handled/Stop/Unhandled,配合preStart()生命周期钩子打印启动信息——这正是 1.0.0 起确立的核心模型在 1.1.0 示例体系中的复用。

四、1.0.0(2025-06-22):首个正式版本

CHANGELOG 将 1.0.0 定位为"完整的 Actor 系统实现和企业级特性",功能面非常宽,分四块梳理。

4.1 核心 Actor 系统

日志列出:标准 Actor 模型(消息传递、状态封装、位置透明性)、高性能消息传递、完整生命周期管理(创建/启动/停止/销毁)、OneForOne 与 AllForOne 监督策略、父子 Actor 监督树。

对应源码:

  • 模型与生命周期:src/core/actor/actor.cj(含preStart/preRestart等钩子,见 hello_world 示例的调用)与 src/core/actor/actor_ref.cj;
  • 生命周期管理:src/runtime/lifecycle/actor_lifecycle_manager.cj;
  • 监督策略:src/core/supervision/supervision_strategy.cj 定义策略抽象,src/runtime/supervision/simple_supervision_strategy.cj 与 src/runtime/supervision/supervision_manager.cj 提供运行时实现,src/core/supervision/ 还提供高级监督、升级(escalation)与熔断监督等变体,与 src/tests/unit/core/supervision/supervision_matrix_test.cj 的矩阵化测试配套。

4.2 性能优化

日志要点:微秒级延迟、I/O 密集型 166,667 msg/s、批处理支持、对象池与内存管理。

对应实现:

  • 批处理:src/runtime/message/batch_message_processor.cj 与 src/runtime/mailbox/batching/ 批处理邮箱;
  • 对象池:src/foundation/memory/object_pool.cj,配套 src/foundation/memory/numa_memory_pool.cj(NUMA 感知)、smart_gc.cj、shared_memory_buffer.cj;
  • 无锁队列:src/foundation/queue/ 提供lockfree_queue.cj、spsc_queue.cj、mpsc_queue.cj、concurrent_hashmap.cj。

4.3 企业级特性与运行时系统

日志中的 Ask 模式、路由器、断路器、背压控制、配置管理,分别落在 src/patterns/ask/、src/patterns/routing/router.cj(含advanced/与factory/子目录)、src/patterns/circuit_breaker/circuit_breaker.cj、src/patterns/backpressure/backpressure.cj、src/config/file/config_loader.cj 与 src/foundation/config/unified_configuration.cj。

"多种调度器、多种邮箱、定时器、线程池、NUMA 感知"条目对应:

  • 调度器:src/runtime/dispatcher/,含work_stealing/(工作窃取)、adaptive/、dynamic/、advanced/、optimized/多个子目录与dispatcher_pool.cj;
  • 邮箱:src/runtime/mailbox/,lockfree/、ringbuffer/、queue/、advanced/加priority_mailbox.cj(优先级)、batching/、mailbox_factory.cj(工厂选择)与 src/runtime/mailbox/control_classifier.cj(控制消息分类);
  • 定时器:src/runtime/typed/timers.cj;
  • NUMA 感知:src/foundation/memory/numa_memory_pool.cj。

4.4 性能基准表(CHANGELOG 原文数据)

1.0.0 条目记载了与 ProtoActor-Go、Actix 的对比测试(为日志记载的基准数据,测试项目分别位于 go_protoactor_benchmark/ 与 rust_benchmark/):

测试类型CActorProtoActor-GoActix
轻量级454,545 msg/s3,333,333 msg/s96,154 msg/s
中等强度54,348 msg/s47,619 msg/s47,170 msg/s
重量级35,714 msg/s9,615 msg/s9,434 msg/s
CPU 密集型11,364 msg/s17,391 msg/s16,393 msg/s
I/O 密集型166,667 msg/s4,951 msg/s4,902 msg/s
内存密集型177 msg/s894 msg/s971 msg/s
混合负载386 msg/s4,975 msg/s4,000 msg/s

日志同时记载了延迟表现:轻量级 0.0019ms、I/O 密集型 0.0019ms、内存密集型 0.0030ms。需要说明的是,这是 CHANGELOG 在 2025-06-22 发布时点记录的基准快照,不同硬件与场景下结果会有差异,引用时应以仓库内 rust_benchmark/README.md、go_protoactor_benchmark/README.md 中的测试方法为适用前提。

4.5 文档与测试

1.0.0 条目的"文档"清单(API 文档、架构设计、性能指南、示例代码、基准报告)在仓库中对应 docs/ 目录下的双语文档套件:api-reference.md、architecture.md、performance.md、getting-started.md、package-structure.md等(docs/zh/ 与 docs/en/ 各有完整副本)。测试条目(单元/集成/性能/压力/示例验证)的落点即上文 3.9 节列出的 src/tests/ 与 src/integration/testing/ 目录。

五、0.9.0 与 0.8.0:起步阶段

早期两个版本的条目较短,但完整保留了项目的起点信息:

[0.9.0] - 2025-06-15

  • 新增功能:实现基础 Actor 系统、添加消息传递机制、实现简单的调度器;
  • 修复问题:修复内存泄漏问题、优化消息处理性能。

对应当前代码中的最小核心集:src/core/actor/、src/core/message/message.cj(以及enhanced_message.cj、zerocopy_message.cj等后续演进版本)、src/runtime/dispatcher/ 的调度器族。"内存泄漏修复"与 1.0.0 条目中"高效的对象池和内存管理"可视为同一优化方向的延续,印证了 src/foundation/memory/object_pool.cj 等内存设施是在此阶段需求下引入的。

[0.8.0] - 2025-06-10

  • 项目初始化、基础架构设计、核心接口定义。

这一条目与当前 src/core/ 的接口布局、src/foundation/contracts/module_contracts.cj(模块契约)、src/foundation/abstractions/actor_abstractions.cj(抽象定义)相呼应——"核心接口定义"工作最终沉淀为各层的接口与契约文件。

六、从 CHANGELOG 出发继续深入:推荐路径

按照本文建立的"版本条目 → 源码落点"映射,推荐阅读顺序:

  1. 理解分层与包结构:从 cjpm.toml 的分区注释与 docs/package-structure.md 入手,对照 src/ 七个顶层包(api、core、runtime、patterns、distribution、integration、foundation、xstate);
  2. 跑通入门链路:构建(cjpm build)后运行 hello world 与 ask 示例(README.md 快速开始章节给出了./target/release/bin/cactor.examples.hello_world_demo的运行方式);
  3. 验证企业级功能:按 3.2~3.6 节的表格逐一查看集群、持久化、流、状态机示例与对应测试;
  4. 关注后续版本:[未发布]区的 HTTP 集成、序列化多格式、可视化监控与云原生支持,是下一个重大版本的四个方向,结合 docs/roadmap.md(英文版 docs/en/roadmap.md)与 docs/FEATURES.md 可了解更完整的规划。

CHANGELOG 的价值不在于罗列日期,而在于它以 Keep a Changelog + SemVer 的规范格式,把 cactor 两个月内"骨架 → 核心 → 企业级"的演进压缩成了一张可核查的变更地图——每一行条目都能在src/中找到对应的包、类与测试,这正是本文逐条对照之后给出的结论。

  • 后端
  • 并发编程
  • 分布式

【免费下载链接】cactor

项目地址:https://gitcode.com/Cangjie-SIG/cactor
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询