是否可以用普通的汇编语言处理器级代码编写 SQL 语句?

Jav*_*aaí 2 sql assembly programming-languages processor relational-algebra

就在最近,一位朋友建议用汇编代码编写 SQL 语句是可能且可以实现的(尽管非常困难),因为每个编程操作最终都会进入处理器级别的执行。

我对 SQL 的行为做了一些研究,尽管它遵循关系代数的理论和独立于平台的执行,但我仍然相信抽象和语义的水平相当遥远,甚至无法考虑将 SQL 语句转换为汇编代码的方法(一组非常特定于操作/内存/资源的指令)。

也许您可以模仿SQL 语句的处理器操作结果,并尝试使用纯汇编指令集来复制它。但您会意识到,您仍然不会编写/翻译 SQL 语句。

以 MonetDB 的SQL 参考页面为例,他们在第三段中声明了以下内容:

“该架构基于编译器,它将 SQL 语句转换为 MonetDB 汇编语言 (MAL)。在此过程中,执行特定于关系代数的常见优化启发式方法。”

然而,SQL 语言甚至不允许键入暴力汇编指令,而基于 C 和 C# 等常见语言则允许此类键入/导入。

你们有什么感想?感谢您分享您的想法!

Mat*_*Mat 5

计算机上运行的任何内容都可以使用汇编语言进行编码。如果 SQL 数据库可以在您的计算机上运行,​​那么它就可以用汇编语言进行编码。

但这可能很难做到。

您提到的 SQL 示例与 C 或其他编译语言翻译为机器代码时发生的情况相差不远。现代优化编译器不会将 C 代码直接转换为汇编语言。他们使用一种(或多种)更容易执行优化的中间表示。这是一个多步骤的过程,并且实际的装配输出并不是其复杂性的主要部分。

如果您这样看,您的 SQL 情况并没有太大不同。您可以想象一个 SQL 预处理器,它在给定足够固定的环境(尤其是架构)的情况下从 MAL 生成本机代码。有了类似的东西,向 SQL 方言添加扩展以允许内联汇编(例如聚合函数)可能是有意义的。并且手动完成所有这些(即没有预处理器本身)是可能的。

不过,您会失去从运行时 SQL 解释器获得的所有可移植性和灵活性,每次模式更改时都必须重新编译,依赖于数据的优化几乎不可能等等。因此,我认为,这在非常有用的情况下非常有用。有限的。(对于通常通过虚拟机或解释器运行的其他语言也是如此 - 将它们编译为本机代码通常会带来严格的限制。)

  • 你的 CPU 唯一可以执行的是汇编指令。**没有别的。** 如果您有一个程序在其上运行(即使在虚拟机中),该程序只是一组汇编指令(和一些数据)。CPU没有SQL的概念。它没有“视频”或“音频”是什么的概念(但它可以具有针对这些类型媒体的指令)。如果它在您的 PC 上运行,则可以用汇编语言编写。 (4认同)