为什么 Unix Shell 应该有对象?

主要观点:YSH 现在有对象,介绍了 YSH 对象的技术细节、七种使用场景(方法、标志解析、模块、多态、ENV、纯函数、纯配置)、仍在进行中的两个想法(纯函数/IO 能力、纯配置),探讨了 YSH 是否是大语言以及其作为终极粘合语言的作用,还提及了闭包和安全问题等。
关键信息:

  • YSH 对象是类型为Obj的值,是字典的链表,函数在原型链上成为方法。
  • 七种使用场景包括方法作为命名空间、标志解析的类型对象、模块作为对象、元对象协议、ENV 作为对象栈、纯函数/IO 能力、纯配置。
  • 仍在进行的想法包括限制iovm对象以支持纯函数,以及借鉴 Tcl 实现纯配置。
  • YSH 实现不大,约 64K 行代码,二进制 2.3MB,2024 年发展迅速,从原型到成为“现实”。
    重要细节:
  • argv数组不是对象,可通过简单数据结构表示命令参数。
  • JSON 样数据通过管道和文件序列化,但无对象参与。
  • Obj.new()创建对象,函数first(obj)rest(obj)用于导航对象链。
  • 模块是对象,可导入和调用其属性。
  • ENV 是对象链表作为栈,用于处理环境变量。
  • renderPrompt(io)钩子实现纯函数配置提示符。
  • 闭包用于捕获变量,如task中的$page
  • 安全方面,ENV对象区分外部输入和内部变量,DictObj类型避免原型污染。
阅读 7
0 条评论