介绍
ACE 是什么
ACE(Agent for Cangjie to Engine) 是一个用 仓颉(Cangjie) 语言编写的服务端框架。它在定位上对标 Spring Boot / MidwayJS,在技术路线上对标 Micronaut / Quarkus——核心理念是编译期宏代替运行时反射:所有依赖注入、路由映射、AOP 切面均在编译阶段生成等价的显式代码,运行时零反射开销,原生二进制直接部署。
ACE 的目标是让仓颉开发者用熟悉的声明式注解风格(@Controller、@Service、@Inject)快速构建高性能微服务,同时享受 Native 编译带来的启动速度与内存优势。
核心特性
| 特性 | 说明 |
|---|---|
| 编译期宏 / 零反射 | @Controller、@Service 等宏在编译期展开为显式注册代码,无运行时扫描 |
| 洋葱中间件内核 | Koa 风格 compose 管道,支持 async/await 风格异步洋葱 |
| IoC 容器 | 基于宏的构造注入(@Inject)、配置注入(@Value)、作用域(单例 / prototype / request) |
| AOP 切面 | @Around、@Timed、@Log、@Retry、@CircuitBreaker 编译期织入 |
| 声明式路由 | @Get、@Post、@PathParam、@Query、@Body 参数绑定 |
| ORM | @Entity、@Transactional、@RequiresNew,底层 SQLite FFI,支持真实事务 |
| WebSocket | @WsController + JSR-356 风格消息处理 |
| JWT / 安全 | JWT 鉴权中间件、安全响应头、CSRF 防护、限流插件 |
| 结构化日志 | @Log 宏注入 logger、MDC 上下文、JSON/text/simple 三种输出格式 |
| 可观测性 | @Timed 方法计时、Prometheus 指标端点、SSE 事件流 |
| 多环境配置 | config/application.toml + application.{env}.toml 按需合并 |
与传统框架对比
| 维度 | Spring Boot | MidwayJS | ACE |
|---|---|---|---|
| 语言 | Java / Kotlin | TypeScript | 仓颉(Cangjie) |
| 依赖注入 | 运行时反射 | 运行时反射 | 编译期宏展开 |
| 启动时间 | 秒级(JVM 预热) | 秒级(V8 JIT) | 毫秒级(原生二进制) |
| 运行时 | JVM | Node.js | 原生 Native |
| 内存占用 | 高(JVM 堆) | 中 | 低(栈 + 手动可控堆) |
| AOP 实现 | 运行时动态代理 | 装饰器 + Metadata | 编译期宏织入 |
| 配置方式 | application.yml | config/*.ts | config/*.toml 声明式 |
| 可调试性 | 反射黑盒 | TS 类型丢失 | --debug-macro 审计展开代码 |
编译期宏的优势
使用 cjc --debug-macro 可以审计所有宏展开后的等价代码,不存在"魔法黑盒",行为完全可预测。
架构层次
ACE 自底向上分为五层,每层均可独立引入:
┌─────────────────────────────────────────┐
│ ace-framework(声明式宏层) │
│ @Controller @Service @Inject @Get … │
├─────────────────────────────────────────┤
│ ace-router(路由中间件) │
│ Router / pathToRegex / 参数绑定 │
├──────────────────┬──────────────────────┤
│ ace-bodyparser │ ace-security │
│ (请求解析) │ (JWT/安全头/限流) │
├──────────────────┴──────────────────────┤
│ ace-web(洋葱内核) │
│ App / compose / Context / Middleware │
├─────────────────────────────────────────┤
│ ace-http(stdx 适配层) │
│ AceDistributor → stdx.net.http │
└─────────────────────────────────────────┘或用 Mermaid 表示依赖关系:
纯内核无 stdx 依赖
ace-web、ace-router、ace-bodyparser 三个包不依赖 stdx,可独立单元测试,也可嵌入其他仓颉项目。只有 ace-http 和 ace-framework-runtime 才接触 stdx。
适用场景
- 微服务 / REST API:原生编译 + 低内存,适合容器化部署(镜像体积 < 20 MB)
- 智能体后端:
ace-agent-runtime提供 Agent 任务调度、工具调用、上下文管理 - 边缘计算:毫秒级冷启动,适合 Serverless / FaaS 场景
- 高并发网关:协程并发 + 零拷贝响应,吞吐量媲美 Go/Rust 框架
- 企业内服务:完整的 IoC + AOP + ORM 技术栈,迁移 Spring 生态成本低
不适用场景
如果你的团队深度依赖 JVM 生态(Hibernate、Spring Data、各类 Java 库),或需要 GraalVM 多语言互操作,ACE 暂不覆盖这些场景。