Skip to content

Latest commit

 

History

186 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

此项目仍在原型阶段, 此 readme 仅用于指示如何在 Windows / Linux / Termux 上构建 CWind


I. BUILD

1.1 PREPARE

表格中的 LLVM18 需要自行下载符合架构的预编译项目并移动到目标位置

1.1.1 Windows

工具 安装路径
Ninja 系统 Path
CMake 系统 Path
gcc 系统 Path
LLVM18 ./.LLVM18

1.1.2 Linux

如果你使用的是WSL, 那么你应该下载为Windows构建的 LLVM, 构建脚本可以继续使用build.sh

工具 安装路径
CMake 系统 Path
Make 系统 Path
gcc 系统 Path
LLVM18 ./.LLVM18

1.1.3 Termux

工具 安装路径
CMake Proot Path
Proot 直接进入 proot 环境
Make Proot Path
gcc 系统 Path
LLVM18 ./.LLVM18

2.2 COMMAND

2.2.1 Use Scripts

2.2.1.1 Windows:

./scripts/build.ps1

2.2.1.2 Linux:

chmod +x ./scripts/build.sh
./scripts/build.sh

2.2.1.3 Termux:

chmod +x ./termux/build.termux.sh
mv ./termux/build.termux.sh .
./termux/build.termux.sh

II. BUG

打勾的即为已修复, 部分用例可在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 映射到 LEGE 即可, 不需要额外 Token)
  • 7. 编译期未验证 group 精化类型
  • 8. 实现trait时, 需要返回Self的函数未能将Self绑定到自身名称上 (例如在结构体MyStruct的方法fn method(...) -> Self中, 未能将Self绑定到MyStruct)
  • 9. 实现无泛型参数的内置trait和部分其它内置trait时, 完全不检查是否真的实现了某函数方法
  • 10. 如果手动同时实现了From<A> for BInto<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)

III. TODO

CWind 以 Rust 的语法为基础母板, 进行了些许修改与添加

  • 增加Int32/UInt32/Int64/UInt64/Float64
  • 完整的结构体, 泛型, 以及相关的[.]调用成员属性、方法
  • which 钩子
  • which 钩子进行限制
  • Map / Vector 字面量
  • never ! 类型
  • 引用类型的self
  • 全自动的编译期已知值的精化类型验证与已知常数折叠(可跨函数)
  • 建议型的显式函数编译期展开标记, 思路来自Alumfunc(pure)
  • 编译期虚拟机(以更方便地做 SMT 验证、控制和编译期计算)
  • pub 与非 pub 函数的可见性控制
  • 根据声明类型来区分MapSet
  • 允许为结构体字段设置 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 的宏系统

About

The CWind Programming Language

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages