简单的 scheme 实现, 元循环实现和标准库基于 TinySCHEME(http://tinyscheme.sourceforge.net/home.html)
标记指针的实现参考了 Chibi-Scheme (https://github.com/ashinn/chibi-scheme)
- 使用标记-整理 (Mark-Compact) 垃圾回收算法
- 这意味着所有 C 函数都要对栈上的对象参数谨慎使用, 因为垃圾回收会移动对象
- 支持 int64_t, char, boolean, '(), EOF 类型的标记指针
- 这些都不是真正的对象, 而是带有特殊标记的指针立即数(详见 include/paper-scheme/object.h),可以节省内存使用,理论上提高性能
- 内存不足时会直接退出;
- ungetc 只有在 FILE * 缓存正确设置时生效
- 完成基本类型内存布局的基本定义
- 完成标记指针实现
- 实现
OBJ_CHAR
,OBJ_BOOLEAN
,OBJ_UNIT
,OBJ_EOF
立即数 - 初步完成基本类型系统的定义
- 完成
int64
与double number
的标记指针与实际对象的定义和测试 - 完成
pair
类型定义 - 构造上下文结构体
- 实现自动增长的堆结构
- 实现运行时分配对象的内存对齐
- 初步构造
gc_collect()
流程 - 实现
标记-压缩 (Mark-Compact)
垃圾回收算法 - 实现 C 函数栈上的托管对象保护链和相关 API, 因为 GC 需要追踪 C 调用栈上的对象保证正确追踪对象引用图的根和修正引用
- 正确实现 GC 移动对象后调整对象引用
- GC 应当从
context_t
结构体中获取类型信息, 更方便扩充新类型 - 向上下文结构体添加类型信息与相关信息注册
- 实现获取对象类型相关的 API
- 实现大量基础类型:
bytes
,string
,string_buffer
,symbol
,vector
,stack
,port
,weak_ref
- 完善基础类型操作 API
- 实现各种类型的 hash 算法 和 equals 函数, 并注册到全局类型信息表
- 实现
hashmap
和hashset
- 进行各种基础类型反射,
hash
和equals
函数的测试 - 完成
hashset
/hashmap
的测试 - 实现
weak_ref_hashmap
- 实现支持
延续
的 scheme stack - 实现 environment 链
- 实现 repl 需要的相关框架
- 开始实现元循环
- 实现 proc syntax 相关
- 实现 opcode/proc 类型检查
- 实现初始过程和特殊符号表赋值
- 实现运行时类型与解释器结构
- 实现
stdio_port
/string_port
相关操作 - 初步实现
opcodes.h
- 初步实现元循环
- 实现词法分析
- 实现 promise
- 完善元循环
- 完善内部过程
- 完善类型系统
- 完善解释器
- 实现标准库
- 完成内部函数
- 完成最终测试
- 性能测试
- 尝试优化性能
TinySCHEME 的作者 D. Souflis 与贡献者
Mini-Scheme 的作者与贡献者:Atsushi Moriwaki,Akira KIDA,R.C. Secrist
Chibi-Scheme 的作者 Alex Shinn 与贡献者