Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

当前实现状态

本文档记录 Cavvy 编译器各特性的实现状态。所有结论均基于源码、测试和示例程序。


已验证功能

功能状态依据
编译流水线✅ 完整实现src/lib.rsCompiler 结构体
预处理器(#include, #define, #ifdef)✅ 完整实现src/preprocessor/tests/preprocessor_tests.rs
词法分析器(logos 基础)✅ 完整实现src/lexer/src/lib.rs 单元测试
解析器(递归下降)✅ 完整实现src/parser/tests/parser_tests.rs
语义分析 — 类型检查✅ 完整实现src/semantic/type_check.rs
语义分析 — 符号表✅ 完整实现src/semantic/symbol_table.rs
语义分析 — 类型推导✅ 完整实现src/semantic/type_inference_result.rs
语义分析 — 类层级分析✅ 完整实现src/semantic/class_analysis.rs
LLVM IR 代码生成✅ 完整实现src/codegen/(24+ 文件)
IR 系统(自定义 SSA IR)✅ 完整实现src/ir/(12 文件)
LLVM 后端(IR → LLVM IR)✅ 完整实现src/ir/llvm_backend.rs
clang 集成(捆绑)✅ 完整实现ir2exe_lib.rsllvm-minimal/
类、构造函数、继承、重写✅ 可用tests/inheritance_tests.rs
vtable 动态分发✅ 已实现test_vtable_dynamic_dispatch
接口声明、实现与动态分发✅ 可用tests/interface_tests.rs
private/protected 访问控制✅ 语义分析中检查tests/access_control_tests.rs
Lambda 与闭包捕获✅ 可用tests/lambda_tests.rs
泛型类(解析与类型替换)✅ 解析可用examples/test_generics_comprehensive.cay
数组字面量初始化✅ 可用tests/array_tests.rs
@FreeFunction✅ 可用tests/new_features_tests.rs
顶层函数(public int main())✅ 默认支持0.4.3.0+ 版本推荐风格
switch 语句✅ 可用tests/control_flow_tests.rs
异常处理(try/catch/finally)✅ 可用tests/error_tests.rs
结构体(struct)✅ 可用tests/struct_tests.rs
枚举(enum)✅ 可用tests/enum_tests.rs
字符串操作✅ 可用tests/string_tests.rs
FFI extern✅ 可用tests/ffi_tests.rs
CayBC 字节码✅ 完整实现src/bytecode/(7 文件)
字节码序列化✅ 完整实现src/bytecode/serializer.rs
字节码 JIT/AOT✅ 实现src/bytecode/jit.rs
字节码混淆✅ 实现src/bytecode/obfuscator.rs
包管理器 Cavly✅ 完整实现src/cavly/(6+ 文件)
RCPL 交互式环境✅ 完整实现src/rcpl/(4 文件)
LSP 语言服务器✅ 实现src/bin/cay-lsp.rs
文档工具 cay-dt✅ 实现src/bin/cay-dt.rs
依赖分析 cay-dp✅ 实现src/bin/cay-dp.rs
独立预处理器 cay-pre✅ 实现src/bin/cay-pre.rs
IR 内联优化✅ 实现src/ir/inliner.rs
IR 验证器✅ 实现src/ir/verification.rs
内联 IR(__ir { } 块)✅ 实现src/ir/inline_ir.rs
源代码映射(debug info)✅ 实现src/codegen/source_map.rs
Result 错误处理✅ 可用caylibs/Result.caycaylibs/Error.caysrc/codegen/expressions/try_op.rs
panic / abort 内建函数✅ 可用src/codegen/expressions/builtin.rssrc/codegen/expressions/call/main.rs

已知限制与未实现特性

特性状态说明
数组初始化语法 new Type[] { 1, 2, 3 }❌ 不支持需先声明大小再逐个赋值

需要注意的行为

接口动态分发

接口调用通过对象 vtable 实现运行时分发。两个不同实现类经同一个接口类型调用同名方法时,按运行时类型选择实现:

Animal a1 = new Dog();   a1.speak();  // → "汪汪!"
Animal a2 = new Cat();   a2.speak();  // → "喵~"

相关测试:

  • test_interface_assignment_compatibility — 基础多实现调用
  • test_interface_dispatch_uses_runtime_type_with_different_class_slots — 不同 vtable 槽位
  • test_interface_dispatch_with_args_and_return_uses_runtime_type — 带参数和返回值

实验性工具

以下工具已有入口或实现片段,但尚未作为稳定发布接口:

工具状态
cay-bcgen(字节码生成器)⚙️ 基础实现完成

这些工具在补充完整的使用文档和集成测试前,暂不标记为稳定。


测试覆盖率

测试文件覆盖内容
tests/inheritance_tests.rs继承、重写、vtable 分发
tests/interface_tests.rs接口声明、实现、多态分发
tests/lambda_tests.rsLambda 表达式、闭包、捕获
tests/generic_tests.rs泛型解析、类型替换
tests/array_tests.rs数组声明、访问、初始化
tests/access_control_tests.rsprivate/protected 检查
tests/control_flow_tests.rsif/for/while/switch/break/continue
tests/string_tests.rs字符串方法和操作
tests/struct_tests.rs结构体声明和使用
tests/enum_tests.rs枚举声明和使用
tests/ffi_tests.rsFFI 外部函数调用
tests/error_tests.rs异常处理
tests/preprocessor_tests.rs所有预处理器指令
tests/vtable_tests.rsvtable 布局和动态分发
40+ 文件全面覆盖编译器各模块