正文
项目实战举例
一个使用「半空」做 Go2Rust 项目转换的示例
项目介绍
Easy_note 是 CloudWeGo 社区对外提供的一个基于 Hertz 和 KiteX 的实现复杂、功能覆盖度高的业务实战示例项目;其使用 Hertz 提供了若干 API 接口,并在接口实现中通过 KiteX client 发起对下游 KiteX Server RPC 接口的调用。
本次使用「半空」翻译的是其 API 模块,其主要功能列表如下:
涉及到的 Hertz/KiteX 框架相关的核心能力如下:
-
-
-
实现 Hertz 自定义中间件(JWT、服务发现)
-
-
流程说明
从输入原始项目产出 ABCoder 理解知识原料开始,「半空」会结合函数粒度知识原料,自底向上完成整个项目的逐层抽象和理解,之后至顶向下完成重构设计的制定,同时确定项目渐进式构建顺序:从
粗粒度
知识映射
到
细粒度
知识映射
到最后
逐个 Package 的实现
,最终完成 Golang 项目到 Rust 项目的渐进式构建(意译)。这个过程中项目构建进度完全由用户掌控,结合人工修改反馈辅助协同,推动项目完成 Go2Rust 迁移落地。
上图提到的 Golang AST / Rust AST 是 ABCoder 在分析仓库代码,将
函数、方法、结构体、变量
等定义以树形关联出来的数据结构体集合,是一个能够与项目一比一映射的
LLMs原生
抽象语法树
。
设计阶段:Package 翻译顺序
根据 ABCoder 解析后的项目原料,「半空」自动化根据 Package 的
依赖关系
完成了使用 Rust 重构这个项目所需的设计文档的编写,
自顶向下
得到如下迭代顺序:
-
"github.com/cloudwego/biz-demo/easy_note/cmd/api":项目的二进制入口和基础框架搭建
-
"github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_handler":HTTP 通用 handler 的实现
-
"github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_router":HTTP 通用 router 的注册
-
"github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_router/demoapi":HTTP 业务 router 的注册
-
"github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_handler/demoapi":HTTP 业务 handler 的实现
-
"github.com/cloudwego/biz-demo/easy_note/cmd/api/rpc":请求下游的 RPC 封装
-
"github.com/cloudwego/biz-demo/easy_note/cmd/api/mw":通用/业务中间件具体实现
实施阶段:根据设计文档顺序逐步展开
-
对应 MR: https://github.com/cloudwego/biz-demo/pull/83
main package,主要实现了 HTTP server 的初始化、路由注册调用等能力
-
-
目录:所有
main
package 的内容,都生成到 Rust 项目的
/src/bin/main.rs
下;后续支持细粒度的文件模块映射