为Pivot Lang贡献代码
非常感谢您愿意对本项目提供帮助!
下方是对您为 pivot-lang 贡献代码的一些帮助
如果您刚开始了解pivot-lang项目,可以加入我们的社区 qq 群 向我们提问.
因为本项目还处于早期阶段: 本页面的指导很可能会在未来有更改,欢迎帮助我们改进此页面!
基础
开发文档
我们的基础环境配置教程在 dev-prepare 中,开发前请务必阅读。
开源协议
本项目使用 MIT 协议。对本项目贡献代码即表示您同意您的更改遵守该协议。
您能做的事情
Issues
我们有很多的已有的issue,在添加新功能的时候我们也会添加相关的issue。如果您发现我们的bug或者有什么需求,欢迎新建 issues 来告诉我们。您也可以看一些 open 的issue并且参与讨论或者贡献代码帮助修复它。
Code
非常欢迎帮助我们实现新功能。我们的新功能实现分为几个阶段:
- 提出,讨论需求的合理性和必要性
- 讨论实现方案
- 实现
- reveiew
- 合并
一些简单的需求可以跳过第二个阶段,所有超过第一个阶段的需求都会被放在我们的project中。如果您想帮助实现 已有需求,请去此页面寻找处于new或者ready状态的项目。如果您想实现一个新的需求,请先在issues中提出,最好加入 qq群 和我们一起讨论方案,在讨论决定通过后,我们会在project中添加一个新的对应项目。
Tests
强烈建议在提交修改的时候同时添加对应的测试,帮助我们将测试覆盖率保持在 85%, 帮助我们进一步完善测试也是相当欢迎的。
请在提交pr前确认自己的修改能通过所有的测试(通过运行 cargo test --all
)
Benchmark
目前我们还没有基准测试,欢迎帮助我们添加基准测试。
文档
参见 文档 网站。对应源码在 book 目录中,欢迎帮助我们完善文档。
风格
Issue 风格
请在提出issue时提供至少三个小自然段的说明,包括:你想干什么,遇到了什么问题,如果复现这个问题等。
如果可能的话,希望您能提供:
- 如果是在使用的时候遇到的bug,最好有一小段代码或者一个指向 gist 的链接,其中包含能复现问题的代码。
- 完整的 backtrace, 如果是进程崩溃相关的问题。
- 一个示例项目,如果是编译相关的问题。
代码风格
rust代码风格通过使用 rustfmt 进行统一 请尽量减少代码重复率,增加可读性。
为了避免不同的rust小版本格式化的区别,请使用以下命令格式化: cargo +stable fmt
其他重要事项
Immix GC对代码生成的影响
Pivot Lang使用的Immix GC是一个精确的、可重定位的垃圾回收器。重定位(evacuation)指 GC在触发的时候可能会移动堆中的对象,这主要是为了解决内存碎片化的问题。
GC的重定位正确性依赖于严谨准确的代码生成。
由于GC要保证堆对象在被移动之后,所有指向原对象位置的指针都被更新为指向新对象,所以GC需要 知道所有指向堆对象的指针。所以在Pivot中,一切堆对象的直接或间接的指针都会有个对应的栈 指针。同时,因为触发重定向的逻辑比较复杂,这种问题往往很难测试出来,具有很高的随机性, 所以目前的debug模式编译的GC在每次malloc都会触发GC,并且会强制每次回收都触发重定向,并且每一个堆里的对象都会被重定向。