两院制的,非同质表意的

主要观点:

  • Lispy 语言具有同构性(homoiconic)这一特殊属性,但其概念存在争议,真正重要的是 Lisp 语言的双语法(bicameral syntax)。
  • 同构性有弱同构性和强同构性之分,弱同构性在很多语言中都存在,强同构性的 eval 功能虽独特但存在诸多问题。
  • 经典的解析流水线包括分词和解析两个阶段,而 Lispy 语言的双语法在其基础上增加了一个读者(reader)阶段,用于检查数据的良构性(well-formedness)和有效性(validity),这大大简化了解析器的工作,提高了代码的可读性和可维护性。
  • 双语法在其他语言如 XML、JSON 中也有应用,具有很多优势,如分离关注点、逐步提升复杂度等,但也有一些人不喜欢这种约束性。
  • 对于 Lisp 语言,双语法并不意味着特定的实现策略,read 函数只是确认输入的良构性,而不是解析器,且双语法不是拥有宏的必要条件。
  • 建议在设计编程语言时先从双语法开始,快速进入语义层面,然后根据需求添加不同的语法视图,双语法也是生成其他语言程序的良好目标。

关键信息:

  • 同构性定义及在不同语言中的表现,如 Python、JavaScript 等。
  • 解析流水线的各个阶段及作用,双语法中读者阶段的重要性。
  • Lisp 语言家族及其双语法的特点和误解。
  • 双语法在其他语言中的应用及优势和弊端。
  • 设计编程语言时先从双语法入手的建议及相关工具的应用。

重要细节:

  • Python 中可将程序表示为字符串并进行操作,但这不一定能说明 Python 是同构性语言。
  • JavaScript 的 eval 功能复杂且与词法环境交互不佳,可能导致代码管理困难。
  • 经典解析流水线中扫描仪的高效性和解析器的复杂性。
  • 双语法中低阶的扫描仪和高阶的读者、解析器的作用及复杂度提升。
  • Racket 中代码的表示方式与传统 Lisp 不同,syntax object 更能完整地表示“程序源”。
  • 双语法在 JSON 等语言中的广泛应用及相关工具优势。
  • 设计编程语言时先确定抽象语法,再添加不同语法视图的理念及实践。
阅读 7
0 条评论