加载中...
同像性(Homoiconicity)指一门语言的程序代码本身就用该语言的核心数据结构表示,即"代码即数据"。Lisp 是最典型的例子:源代码由 S-表达式(嵌套列表)构成,而列表正是 Lisp 的基本数据类型,程序可以像操作普通数据一样读取、构造与改写程序。
同像语言中,解析后的程序表示与程序员书写的表示同构,因此宏可以接收代码(数据)、经任意计算返回新代码,由编译器继续处理。这使语法扩展、代码生成、DSL 构建的门槛大幅降低。
Lisp 家族(Common Lisp、Scheme、Racket、Clojure)是同像性的标杆;Prolog、Tcl、Julia(表达式对象与宏)、Elixir(quote/unquote)也具备不同程度的同像特征。
同像性带来无与伦比的元编程能力,"用语言扩展语言"成为日常;代价是极简统一的语法在部分开发者眼中可读性欠佳(如 Lisp 的括号),且宏滥用可能让代码库演化出难以维护的私有方言。
登录 后参与讨论
暂无讨论,来发表第一条评论吧