Jav*_*aaí 2 sql assembly programming-languages processor relational-algebra
就在最近,一位朋友建议用汇编代码编写 SQL 语句是可能且可以实现的(尽管非常困难),因为每个编程操作最终都会进入处理器级别的执行。
我对 SQL 的行为做了一些研究,尽管它遵循关系代数的理论和独立于平台的执行,但我仍然相信抽象和语义的水平相当遥远,甚至无法考虑将 SQL 语句转换为汇编代码的方法(一组非常特定于操作/内存/资源的指令)。
也许您可以模仿SQL 语句的处理器操作结果,并尝试使用纯汇编指令集来复制它。但您会意识到,您仍然不会编写/翻译 SQL 语句。
以 MonetDB 的SQL 参考页面为例,他们在第三段中声明了以下内容:
“该架构基于编译器,它将 SQL 语句转换为 MonetDB 汇编语言 (MAL)。在此过程中,执行特定于关系代数的常见优化启发式方法。”
然而,SQL 语言甚至不允许键入暴力汇编指令,而基于 C 和 C# 等常见语言则允许此类键入/导入。
你们有什么感想?感谢您分享您的想法!
计算机上运行的任何内容都可以使用汇编语言进行编码。如果 SQL 数据库可以在您的计算机上运行,那么它就可以用汇编语言进行编码。
但这可能很难做到。
您提到的 SQL 示例与 C 或其他编译语言翻译为机器代码时发生的情况相差不远。现代优化编译器不会将 C 代码直接转换为汇编语言。他们使用一种(或多种)更容易执行优化的中间表示。这是一个多步骤的过程,并且实际的装配输出并不是其复杂性的主要部分。
如果您这样看,您的 SQL 情况并没有太大不同。您可以想象一个 SQL 预处理器,它在给定足够固定的环境(尤其是架构)的情况下从 MAL 生成本机代码。有了类似的东西,向 SQL 方言添加扩展以允许内联汇编(例如聚合函数)可能是有意义的。并且手动完成所有这些(即没有预处理器本身)是可能的。
不过,您会失去从运行时 SQL 解释器获得的所有可移植性和灵活性,每次模式更改时都必须重新编译,依赖于数据的优化几乎不可能等等。因此,我认为,这在非常有用的情况下非常有用。有限的。(对于通常通过虚拟机或解释器运行的其他语言也是如此 - 将它们编译为本机代码通常会带来严格的限制。)
| 归档时间: |
|
| 查看次数: |
3505 次 |
| 最近记录: |