"奔腾安全的FDIV" ...... 2014年?

时间:2014-06-07 20:07:58

标签: delphi compiler-construction cpu

每当我查看编译器设置时,我都会想到同样的问题:为什么Delphi的当前编译器仍然具有" Pentium-safe FDIV"编译选项?

Pentium-FDIV-Bug于1994年11月被发现并且没有出现在1995年的CPU模型中。此时的处理器可能只有Windows 95,98和Me的强大功能。据我所知,第一台带有133 MHz的Intel Pentium 1 CPU(因此足够快以达到Windows 2000的最低系统要求)于1995年6月发布,当然没有FDIV错误。

当前Delphi版本的VCL / RTL使用了古代操作系统所不具备的Windows API。 Windows 98和Me不适用于空的Delphi XE6 VCL应用程序;我没有检查Delphi XE6的VCL / RTL是否已经破坏了Windows 2000的兼容性,但我认为是这样。

那么,为什么Embarcadero保留了1994年使用的编译器开关,当时他们放弃了对2000年使用的操作系统的支持?因此,没有人会需要这个编译选项,因为受影响的CPU无法与VCL / RTL所需的操作系统兼容。

更新;澄清问题:这个开关可能有用吗?或者编译器可能在内部忽略该选项,它只是保留旧项目文件的选项?

4 个答案:

答案 0 :(得分:7)

奔腾划分虫影响了许多早期的奔腾型号。受影响模型的最高时钟速度为100MHz。官方文档表明Delphi XE6针对的是Vista及以上,但实际上它仍然可以针对Windows XP,我相信XE6可以生成在Windows 2000上运行的可执行文件.XP的最低要求是233MHz处理器,并且Windows 2000是133MHz处理器。

因此,您可能能够在有缺陷的奔腾处理器上运行XE6编译的代码,这似乎是合理的。实际上,至少过去15年来,Embarcadero的任何人都没有义务支持有缺陷的奔腾处理器。他们根本就没有在21世纪的野外看到过。

那么,为什么没有删除编译器功能呢?只有Embarcadero知道答案,但我可以给出一些明显的理由:

  1. 删除该功能会妨碍向后兼容性。如果有人,即使他们不需要,在启用开关的情况下构建,那么删除它将影响他们。
  2. 删除功能成本。这样做涉及对UI,编译器,文档,测试套件等的更改。
  3. 删除该功能会带来风险。每当您更改代码,经过多年尝试和测试的代码时,您都会面临引入新缺陷的风险。

答案 1 :(得分:5)

如果您正在寻找"官方"回答,你不太可能得到一个。非正式地,我当然可以指出大卫的答案。他关于推理的3分是明确的。除非有令人信服的理由删除该功能,否则它不会带来太多业务或技术意义。关于它应被删除的唯一原因是,如果x86后端完全从头开始重写......在这种情况下,它不会被删除,而是根本不会被考虑在内第一名。

我会注意到新的基于AMD64 / ia64和LLVM的ARM后端对该指令没有任何作用,因为这些CPU不受影响应该是不言自明的。指令/选项被识别,但仅被忽略。

答案 2 :(得分:0)

Delphi仍然在制作控制台应用程序。除非您的控制台应用程序依赖于更新的Windows API,否则您可以轻松地使其与Windows 95兼容。

答案 3 :(得分:0)

这只是传闻,但显然Delphi编译器是用汇编编写的,基本上是不可维护的。他们不会删除任何功能只是因为编译器中的任何变化非常困难,所以他们不会打扰。