这是今天办公室里出现的。我没有做这种事情的计划,但理论上你能用 SQL 写一个编译器吗?乍一看,它似乎是图灵完备的,尽管对于许多类别的问题来说非常麻烦。
如果它不是图灵完备的,它需要什么?
注意:我不想做任何事情,比如用 SQL 编写编译器,我知道这样做很愚蠢,所以如果我们能避免讨论,我将不胜感激。
事实证明,即使没有真正的“脚本”扩展,例如 PL/SQL 或 PSM(它们被设计为真正的编程语言,所以这有点作弊),SQL 也可以是图灵完备的。
在这组幻灯片中,Andrew Gierth 通过构建循环标签系统证明了 CTE 和 Windowing SQL 是图灵完备的,已被证明是图灵完备的。然而,CTE 特性是重要的部分——它允许您创建可以引用自身的命名子表达式,从而递归地解决问题。
有趣的是,添加 CTE 并不是为了将 SQL 转变为编程语言——只是为了将声明式查询语言转变为更强大的声明式查询语言。有点像在 C++ 中,其模板被证明是图灵完备的,尽管它们并非旨在创建元编程语言。
哦,SQL 示例中的 Mandelbrot 集也非常令人印象深刻 :)