Oils 0.21.0 - 标志、整数、星际飞船错误和速度

这是 Unix 外壳 Oil 的最新版本,是从 bash 升级到更好的语言和运行时的路径:

  • 大新闻:C++ 压缩包通过所有规范测试,比 Python 压缩包快 2 到 50 倍,推荐使用和测试 C++ 压缩包,相关内容见README-native.txt。项目名为“Oils”或“Oils for Unix”,仍在进行重命名工作。
  • 介绍:虽 C++ 翻译速度提升 2 到 50 倍,但在实际configure工作负载下比 bashdash慢 5 - 10%,后续会解释其中的神秘之处。

    • 贡献者:Aidan Olsen 实现ctx内置函数等;Lloyd Pique 改进trim()方法;Adam Bannister 修复重声明const x的 bug 等。
    • 重大变更:移除read --line,将toJ8() fromJ8()重命名为toJson8() fromJson8(),尊重波浪号替换与大括号扩展的组合等。
  • 标志解析 API:在 YSH 中实现类似 Python 的argparse风格的标志解析,基于新的ctx内置函数,此风格可复用 shell 语法并混合代码,帮助用户编写自己的标志解析器,相关帮助文档见doc/ref/chap-builtin-cmd.html#Args-Parserdoc/ref/chap-builtin-cmd.html#ctx
  • 整数 - 不要遵循 Python 或 C++的行为:重新实现/%运算符,整数除法向零取整,%运算符不允许负除数;使用mylib::BigInt类型处理 64 位整数,Oils 在处理大整数方面表现优于其他 shell。
  • Starship 提示 Bug - 使用后管道崩溃:此 bug 报告较多,症状为作业控制错误消息或崩溃,与 POSIX 作业控制和系统调用有关,涉及三个 shell 运行时特征的交互,通过一些修复措施解决,仍需探索更全面的测试和推理策略。
  • 性能之谜 - 为何不能庆祝?:C++翻译后运行 Python 的configure脚本比 dashbash慢 12 - 14%,通过使用perf采样分析器、callgrind、uftrace 和 R 语言等工具进行性能分析,发现问题可能与HereDocWriter相关,fork 进程和上下文切换开销可能是导致缓慢的原因,计划尽快修复此问题并评估性能。
  • 幕后工作:发布mycpp/README,测试并修复“无损不变量”,改进错误测试套件。
  • 已关闭问题:列举了一些已解决的问题,如大括号展开与波浪号扩展的组合行为等。
  • 结论:涵盖语言和 API 设计、语言语义、两个棘手的 bug、性能工具演示等内容,未来工作包括完善 YSH、改进工具、重命名等。
  • 附录:相关文章包括激发漂亮打印设计文档的讨论,以及解释 UTF - 8 的必要性;比较 0.21.0 版本与之前版本的规格测试、基准测试和代码大小等指标。
阅读 24
0 条评论