问题背景:
1 AST可以反映程序的深层结构,或许可以大大简化程序编写和阅读
2 二进制化的AST或许可以解决用字符串通信的诸多弊端,实现用数据结构传递绝大部分信息,以此实现互用性(interoperability)的突破。
参考:
https://docs.python-guide.org/scenarios/serialization/
https://docs.python.org/2/library/pickle.html
Limitations of the Unix philosophy and the ultimate solution to parsing: https://yinwang0.wordpress.com/2011/04/14/unix/
The BinAST diaries - Compression, part 1: https://yoric.github.io/post/binary-ast-compression-1/
https://en.wikipedia.org/wiki/Intentional_programming
Watt, D. A., Brown, D. F., & Brown, D. (2000). Programming language processors in Java: compilers and interpreters. Pearson Education.
简单记录我的一些思考;
1 树形结构确实在多数情况下非常直观,减少了纯文本的格式问题。
2 AST只是表现句法(syntax)层面的东西,语义层面则勉为其难,不同语言甚至相同语言的某些情况存在同样句法树语义不同的情况。
3 AST解读本身需要额外规则,如深度优先还是广度优先,子树/节点(node)的含义。递归/自我引用(self-referential)的程序如递归函数(以阶乘为例)会导致很多简单序列化方法失效,此时需要额外规则。
4 目前已有产品(如js的那款)是主要针对语法解析(parsing)速度、减少重复而言的,不是提供通用的程序接口和互用性方案。
5 像COM、Oberon这些实现用数据结构通信的产品,全是同质化平台,而且底层开发语言只有一种(C*/Oberon)。