Expand description
§gaia-types 维护文档
§项目概述
gaia-types 是 Gaia 项目的核心类型系统库,提供统一的错误处理、架构抽象、编译目标定义等基础功能。作为整个工具链的基础组件,该库采用零依赖设计,确保稳定性和可移植性。
§架构设计
§核心设计原则
- 零依赖核心: 核心功能不依赖外部 crate,确保最小化依赖树
- 统一错误模型: 提供一致的错误处理接口,支持详细的错误诊断信息
- 架构抽象: 支持多架构的统一抽象,便于跨平台开发
- 类型安全: 利用 Rust 类型系统防止常见编程错误
- 性能优先: 关键路径零分配,栈上数据结构优先
§技术栈
- 语言: Rust (Edition 2024)
- 特性: 使用
#![feature(try_trait_v2)]提供高级错误处理 - 序列化: 可选的 serde 支持(通过 feature 控制)
- 文档: 完整的文档测试覆盖
§模块架构
§模块职责划分
§1. errors 模块 - 统一错误处理系统
- 职责: 提供统一的错误类型和诊断信息
- 关键类型:
GaiaError,GaiaErrorKind,GaiaDiagnostics - 设计考量:
- 使用
Box包装减少枚举大小 - 支持结构化错误信息
- 集成 tracing 日志系统
- 提供详细的源代码位置信息
- 使用
§2. helpers 模块 - 架构和目标抽象
- 职责: 定义支持的架构和编译目标
- 关键类型:
Architecture,CompilationTarget,AbiCompatible,ApiCompatible - 设计考量:
- 支持物理架构(x86, ARM, RISC-V 等)
- 支持虚拟机架构(JVM, CLR)
- 提供架构兼容性检查
- 序列化支持便于配置存储
§3. reader 模块 - 二进制读取抽象
- 职责: 提供统一的二进制数据读取接口
- 关键类型:
BinaryReader,SourceLocation,SourcePosition - 设计考量:
- 支持大端和小端字节序
- 提供详细的错误位置信息
- 零拷贝设计避免不必要的内存分配
§4. writer 模块 - 文本写入抽象
- 职责: 提供统一的文本输出接口
- 关键类型:
TextWriter - 设计考量:
- 支持多种输出格式
- 提供格式化选项
- 错误处理集成
§5. lexer 模块 - 词法分析基础
- 职责: 提供通用的词法分析功能
- 设计考量:
- 支持多种词法单元类型
- 提供详细的词法错误信息
§6. parser 模块 - 语法分析基础
- 职责: 提供通用的语法分析功能
- 设计考量:
- 递归下降解析器
- 错误恢复机制
- 详细的语法错误信息
§7. assembler 模块 - 汇编器基础
- 职责: 提供汇编相关的基本功能
- 关键类型:
BinaryWriter - 设计考量:
- 支持多种输出格式
- 提供汇编错误处理
§核心类型详解
§错误处理系统
§GaiaError 结构
提供统一的错误处理接口,包含错误级别和具体的错误类型。
§GaiaErrorKind 枚举
包含所有可能的错误类型:语法错误、IO 错误、架构错误、编译错误、配置错误等。
§架构抽象系统
§Architecture 枚举
支持多种物理架构(x86, ARM, RISC-V, MIPS, WebAssembly)和虚拟机架构(JVM, CLR)。
§CompilationTarget 结构
定义编译目标,包含架构、ABI、API版本等信息。
§开发环境配置
§必需工具
- Rust 1.70+ (建议使用 rustup 管理)
- Cargo (随 Rust 一起安装)
§常用命令
cargo build- 构建项目cargo test- 运行测试cargo test --doc- 运行文档测试cargo doc --open- 生成文档cargo clippy- 检查代码质量
§关键设计决策
§错误处理策略
- 统一错误类型: 所有错误都通过
GaiaError表示 - 结构化错误信息: 提供机器可读的错误详情
- 源代码位置: 每个错误都包含详细的源代码位置信息
- 错误级别: 支持错误、警告、信息等不同级别
§架构抽象策略
- 枚举表示: 使用枚举确保架构类型的完整性
- 显示实现: 提供人类可读的架构名称
- 序列化支持: 便于配置文件存储和传输
- 扩展性: 支持自定义架构类型
§性能优化考量
- 零分配设计: 核心路径避免堆分配
- Box包装: 使用Box减少枚举大小,提高缓存效率
- 内联优化: 关键函数使用内联属性
§维护指南
§新增错误类型流程
- 错误调研: 分析错误发生的场景和影响范围
- 类型定义: 在
GaiaErrorKind中添加新的错误变体 - 构造函数: 为新的错误类型创建便捷的构造函数
- 错误转换: 实现从其他错误类型的转换
- 显示实现: 提供人类可读的错误信息
- 测试覆盖: 添加单元测试和文档测试
§新增架构支持流程
- 架构调研: 确认新架构的技术规格和ABI
- 枚举扩展: 在
Architecture枚举中添加新架构 - 显示实现: 更新
Displaytrait 实现 - 兼容性检查: 添加架构兼容性验证逻辑
- 序列化支持: 确保新架构可以正确序列化
- 文档更新: 更新相关文档和示例
§常见维护陷阱
- 错误大小: 注意控制错误类型的大小,避免栈上分配过大
- 架构一致性: 确保所有架构相关的代码都正确处理新架构
- 向后兼容: 修改枚举时要考虑序列化兼容性
- 文档同步: 代码修改后要及时更新文档测试
§模块详细文档
各子模块包含专门的维护文档:
errors/readme.md- 错误处理系统的详细设计helpers/readme.md- 架构抽象的详细说明reader/readme.md- 二进制读取的实现细节writer/readme.md- 文本写入的实现细节
§发布流程
§版本管理
- 遵循语义化版本控制 (SemVer)
- 主版本号: 不兼容的 API 修改
- 次版本号: 向下兼容的功能性新增
- 修订号: 向下兼容的问题修正
§发布前检查清单
-
所有测试通过 (
cargo test) -
文档测试通过 (
cargo test --doc) -
无警告 (
cargo build) -
文档完整 (
cargo doc) -
版本号更新 (
Cargo.toml) - CHANGELOG 更新
Re-exports§
pub use crate::assembler::BinaryWriter;pub use crate::reader::BinaryReader;pub use crate::reader::SourceLocation;pub use crate::reader::SourcePosition;pub use crate::writer::TextWriter;
Modules§
- assembler
- 汇编器模块
- helpers
- Gaia Types - 辅助工具模块
- lexer
- Gaia Types - 词法分析器模块
- neural
- 神经网络算子定义
- parser
- Gaia Types - 语法分析器模块
- reader
- Gaia Types - 读取器模块
- writer
- Writer 模块
Structs§
- Gaia
Diagnostics - Gaia 诊断结果容器
- Gaia
Error - Gaia 错误类型,包装了具体的错误类 GaiaErrorKind
Enums§
- Gaia
Error Kind - Gaia 错误种类枚举,定义了所有可能的错误类型
Type Aliases§
- Result
- 本crate的结果类型,使用GaiaError作为错误类型