构建一种编程语言需要多少工作?
导读:如果上天给个机会创建一门新语言,你该怎么办?有理由说“不”吗?
“这本书是部经典,请尊重它”。
我的团队架构师递给我一本称为《龙之书》的书时这么说道。
大概在 15 年前,在职业生涯的早期阶段,我无意中进入了构建语言编译器的领域。不幸的是,我晚上读它的时候睡着了,把它重重地扔在了地板上。我非常希望在归还它时,没有被发现封面上的小凹痕。
《龙之书》
这本书写于 1986 年。当时构建编译器极具挑战性,它凝聚了计算机科学和编程中的许多艺术和技术。差不多四十年后,我再次胜任了这份工作。现在有多难?让我们探讨一下创建语言涉及哪些内容以及现代工具在多大程度上简化了它。
目标语言我们需要构建一些具体的语言来帮助理解事物。我一直觉得现实世界的例子比玩具更有效,所以我将使用我们在ZenStack构建的 ZModel 语言作为示例。它是一种用于对数据库表和访问控制规则进行建模的 DSL。为了使帖子简短,我将仅使用一小部分功能进行演示。我们的目标是编译以下的代码片段:
model User { User {
id Int name Stringposts Post [] }
model Post {
id Int title String author User published
Boolean @@ allow ( ' read ' ,published== true ) }