这是关于 OilShell 项目的回顾,主要内容如下:
- 项目背景与回顾:过去一年发布 Oil 时曾说要写项目回顾,此次从批判角度看待项目。2021 年回顾指出 Oil 是不断尝试后仍在工作的实验,有成功也有失误,如 OSH 转 YSH 技术上未成功、OPy 字节码编译器不够快、过度思考引导等。
为何 Oil 耗时久:
- 本质上困难:仍在“贝尔实验室时间线”上,Unix 到 Linux、C 到 C++、Thompson 的 shell 到 bash 都有延续,Oil 有 OSH 和 YSH 两种共享运行时的 shell 语言以提供平滑升级路径,且 bash 规模大,预计 OSH 还会有 5 - 10K 行的收敛。
- 技术原因:短代码比长代码更难写,代码也如此,Oil 采用中间向外的风格;速度难且 C 快,mycpp 翻译 Python 到 C++及使用静态类型虽好,但 Python 分配多,写垃圾收集器也难,设计无损语法树时对 mycpp 运行时了解不足;Shell 运行时复杂,如 Oils 0.23.0 因 trap 相关的 Unix 信号和 fork()优化问题延迟。
- 社会原因:Shell 用户和贡献者重叠少,bash 贡献者相对较少;软件互操作性缺乏激励,如 Unix 因是电话垄断创建而无此问题,而 Linux 有企业赞助;Oil 曾是个人研究项目,有空间去探索一些问题。
- 现在是团队项目:感谢 NLnet 资助及其他人员参与,现在有团队,如 Jesse Hughes、Melvin Walls、Aidan Olsen、Samuel Hierholzer 等,但仍有设计瓶颈,如 Hay overhaul 一年多未解决,语言设计是 O(n2)或更糟的问题,应避免过度并行化设计。同时在 Zulip 上发布许多非瓶颈任务寻求帮助,还提到“catbrain”语言设计实验。
- 主要信息:回顾项目虽有批判,但 OSH 更兼容、YSH 有人学习编写、mycpp 使代码像短规格且运行快,这开启了项目的其他部分。
- 下一步计划:写关于资助的内容,团队使 Oil 变快并“弄清楚”YSH,可让 OSH 更兼容且工作可并行。
- 附录:更多观点:C++类型系统存在如 signed char 导致的很多编译错误、父类和子类可有同名字段、在析构函数中抛 C++异常有问题;垃圾收集不仅标记和清扫慢, rooting 也慢,每个 GC 都不同且成功的 GC 可能是 10 多年的研究项目,GC 工程与编译器工程有些分离;C++/Rust/Go 的速度对语言处理器很必要,如 TypeScript 编译器用 TypeScript 写太慢,mycpp 分析代码也慢但 Oil 使用 mycpp。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。