此项目仍在原型阶段, 此 readme 仅用于指示如何在 Windows / Linux / Termux 上构建 CWind
表格中的 LLVM18 需要自行下载符合架构的预编译项目并移动到目标位置
| 工具 | 安装路径 |
|---|---|
| Ninja | 系统 Path |
| CMake | 系统 Path |
| gcc | 系统 Path |
| LLVM18 | ./.LLVM18 |
如果你使用的是WSL, 那么你应该下载为Windows构建的 LLVM, 构建脚本可以继续使用build.sh
| 工具 | 安装路径 |
|---|---|
| CMake | 系统 Path |
| Make | 系统 Path |
| gcc | 系统 Path |
| LLVM18 | ./.LLVM18 |
| 工具 | 安装路径 |
|---|---|
| CMake | Proot Path |
| Proot | 直接进入 proot 环境 |
| Make | Proot Path |
| gcc | 系统 Path |
| LLVM18 | ./.LLVM18 |
./scripts/build.ps1chmod +x ./scripts/build.sh
./scripts/build.shchmod +x ./termux/build.termux.sh
mv ./termux/build.termux.sh .
./termux/build.termux.sh打勾的即为已修复, 部分用例可在bugs中找到
- 1. 修复泛型方法传入的 self 所绑定的类型错误的问题
- 2. 修复
for遍历容器时类型校验错误的 Bug ( 例如for kv in map.entry()会被cwindc拒绝) - 3. 修复
impl<T: BoundTrait<Another>> for Type<T>中不检查是否存在BoundTrait的 Bug - 4. 修复顶层变量声明失败的问题 ( 如
const Data: Map<A, B> = { xxxx: xxxx }在cwindc中会被标识为undeclared variable) - 5. 类型检查不穿透容器
- 6. 不支持
!>和!<的问题 (Lexer 映射到LE和GE即可, 不需要额外 Token) - 7. 编译期未验证 group 精化类型
- 8. 实现
trait时, 需要返回Self的函数未能将Self绑定到自身名称上 (例如在结构体MyStruct的方法fn method(...) -> Self中, 未能将Self绑定到MyStruct) - 9. 实现无泛型参数的内置
trait和部分其它内置trait时, 完全不检查是否真的实现了某函数方法 - 10. 如果手动同时实现了
From<A> for B和Into<B>中的into方法, 没有检查是否出现了重复的into - 11. 未检查实现内置
trait对应方法时的返回值与参数 - 12. 编译器前端未验证某对象在
builtins::print时是否具有Display::to_string方法 - 13. 编译器前端未在对象被打印时生成对应的
Display::to_string方法调用 - 14. 编译器后端未使用对象的
Display::to_string方法 - 15. 函数传参时未移动所有权 (赦免 self, 其在现阶段需要传递引用) (我们不应该搞值拷贝那一套)
- 16. 编译器前端未验证
group@struct -> { field }中的field是否符合group所接收的类型 - 17. 编译器后端未验证
String.format()方法所接收的参数数量是否匹配花括号数量 - 18.
Parser未能正确验证空for-in循环后花括号的开闭 - 19.
From应该是Into的关联trait, 而不应该要求手动实现into(在impl From<A> for B时, 未自动实现A.into)
CWind 以 Rust 的语法为基础母板, 进行了些许修改与添加
- 增加
Int32/UInt32/Int64/UInt64/Float64 - 完整的结构体, 泛型, 以及相关的[.]调用成员属性、方法
-
which钩子 - 对
which钩子进行限制 - Map / Vector 字面量
- never
!类型 - 引用类型的
self - 全自动的编译期已知值的精化类型验证与已知常数折叠(可跨函数)
- 建议型的显式函数编译期展开标记, 思路来自
Alum的func(pure) - 编译期虚拟机(以更方便地做 SMT 验证、控制和编译期计算)
-
pub与非pub函数的可见性控制 - 根据声明类型来区分
Map和Set - 允许为结构体字段设置
pub - 简化的精化类型
- 完整的精化类型 (需要包管理机制+std)
- Tuple 字面量
- 数值
as - 尾返回无需
return - 需要增加
move关键字 - 需要增加
&表示传递引用而非移动所有权 - 部分
let声明时可无需类型自动推断 - 重做
which后置钩子 (从return之前插入分支改为在调用处插入 hook) - 分化
which钩子为after/before两种类型 - 可检查返回值的特殊
return钩子 - 对
group和结构体字段精化的进一步测试 - Regex 引擎 (已实现
i/g/m/s/u/y/x,v尚未实现) - 将Regex 引擎绑定到
String.matches方法上 -
if-chains -
match-guard - 带值 Enum
- Trait 关联类型
- 支持不同类型的数字之间的比较
- 结构体 newType
- 完整 GC
- 更完整的泛型体操写法 (Rust-Like)
- 包管理与导入
- std
- 完善包管理器
- 更多内置方法和 trait
- 前端自举
- (极晚期) Rust-Like 的宏系统