专栏名称: 字节跳动技术团队
字节跳动的技术实践分享
目录
相关文章推荐
美团技术团队  ·  可信实验白皮书系列04:随机轮转实验 ·  3 天前  
美团技术团队  ·  可信实验白皮书系列03:随机对照实验 ·  3 天前  
架构师之路  ·  爸爸!除了你,沈括,沈万三... ... ·  4 天前  
51好读  ›  专栏  ›  字节跳动技术团队

半空:LLM 辅助的 Go2Rust 项目迁移

字节跳动技术团队  · 公众号  · 架构  · 2025-01-09 18:01

正文

请到「今天看啥」查看全文


项目实战举例

一个使用「半空」做 Go2Rust 项目转换的示例

项目介绍

Easy_note 是 CloudWeGo 社区对外提供的一个基于 Hertz 和 KiteX 的实现复杂、功能覆盖度高的业务实战示例项目;其使用 Hertz 提供了若干 API 接口,并在接口实现中通过 KiteX client 发起对下游 KiteX Server RPC 接口的调用。

本次使用「半空」翻译的是其 API 模块,其主要功能列表如下:

  • 用户管理

    • 用户注册 (HTTP 接口 -> RPC 调用)
    • 用户登录 (HTTP 接口 -> RPC 调用)
  • 笔记管理

    • 创建笔记 (HTTP 接口 -> RPC 调用)
    • 查询笔记 (HTTP 接口 -> RPC 调用)
    • 更新笔记 (HTTP 接口 -> RPC 调用)
    • 删除笔记 (HTTP 接口 -> RPC 调用)

涉及到的 Hertz/KiteX 框架相关的核心能力如下:

  • 初始化 Hertz Server
  • 注册 Hertz 路由和 handler
  • 实现 Hertz 自定义中间件(JWT、服务发现)
  • 实现 Hertz 的 handler 逻辑
  • 使用 KiteX Client 调用下游接口

流程说明

从输入原始项目产出 ABCoder 理解知识原料开始,「半空」会结合函数粒度知识原料,自底向上完成整个项目的逐层抽象和理解,之后至顶向下完成重构设计的制定,同时确定项目渐进式构建顺序:从 粗粒度 知识映射 细粒度 知识映射 到最后 逐个 Package 的实现 ,最终完成 Golang 项目到 Rust 项目的渐进式构建(意译)。这个过程中项目构建进度完全由用户掌控,结合人工修改反馈辅助协同,推动项目完成 Go2Rust 迁移落地。

上图提到的 Golang AST / Rust AST 是 ABCoder 在分析仓库代码,将 函数、方法、结构体、变量 等定义以树形关联出来的数据结构体集合,是一个能够与项目一比一映射的 LLMs原生 抽象语法树

设计阶段:Package 翻译顺序

根据 ABCoder 解析后的项目原料,「半空」自动化根据 Package 的 依赖关系 完成了使用 Rust 重构这个项目所需的设计文档的编写, 自顶向下 得到如下迭代顺序:

  1. "github.com/cloudwego/biz-demo/easy_note/cmd/api":项目的二进制入口和基础框架搭建
  2. "github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_handler":HTTP 通用 handler 的实现
  3. "github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_router":HTTP 通用 router 的注册
  4. "github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_router/demoapi":HTTP 业务 router 的注册
  5. "github.com/cloudwego/biz-demo/easy_note/cmd/api/hertz_handler/demoapi":HTTP 业务 handler 的实现
  6. "github.com/cloudwego/biz-demo/easy_note/cmd/api/rpc":请求下游的 RPC 封装
  7. "github.com/cloudwego/biz-demo/easy_note/cmd/api/mw":通用/业务中间件具体实现

实施阶段:根据设计文档顺序逐步展开

  1. " easy_note/cmd/api "

对应 MR: https://github.com/cloudwego/biz-demo/pull/83

main package,主要实现了 HTTP server 的初始化、路由注册调用等能力

Golang 原始实现 「半空」意译效果

main()


main()

customizedRegister()

customized_register()

常量定义[本轮不实现,只mock]

常量定义[mock实现]
  • 结果评估

    • 目录:所有 main package 的内容,都生成到 Rust 项目的 /src/bin/main.rs 下;后续支持细粒度的文件模块映射






请到「今天看啥」查看全文