【问题标题】:What does the "implementation" mean in "implementation (in)dependent"?“实施(独立)独立”中的“实施”是什么意思?
【发布时间】:2018-11-19 16:42:49
【问题描述】:

“实现(独立)独立”中的“实现”是什么意思? “实现(内)独立”和“机器(内)独立”有什么区别?

我用的是 C,所以你可以用 C 来解释。

【问题讨论】:

  • 另外你可能想看看stackoverflow.com/a/2533338/5346306
  • 如您所见,这个问题没有明确定义。您已经在上下文中看到了这些术语 - 要真正正确回答问题,您需要提供上下文中使用的这些单词的摘录,并参考原始来源。
  • 它在 C11 标准中的 §3 Terms, definitions and symbols 中定义:§3.12 implementation — 特定的软件集,在特定的控制选项下运行在特定的翻译环境中,为特定执行环境执行程序翻译并支持在特定执行环境中执行功能。

标签: c terminology


【解决方案1】:

当 C 标准讨论一个实现时,它意味着 C 语言的实现。因此,C 的实现就是解释和执行 C 程序所需的一切1

通常包括编译器、随附或兼容的开发人员工具(例如链接器和提供支持例程的软件库)、操作系统及其组件(例如加载程序)以及运行它的计算机系统。

在一个计算机系统上,您可以安装多个编译器。您可以拥有 GCC 和 Clang。当程序用 GCC 编译并执行时,这是一个 C 实现,而当它们用 Clang 编译并执行时,这是一个不同的 C 实现,即使它们都运行在同一个系统上。一个 C 实现是用于翻译和执行 C 程序的特定完整集合。

由于 C 标准并未完全指定您在 C 程序中编写的所有内容的行为方式,因此在实现之间有些事情可能会有所不同。值得注意的是,int 中有多少位可能会有所不同。这些东西是依赖于实现的。

当提到 C 时,“机器相关”的使用通常是对“实现相关”的真正含义时对语言的不精确使用。机器的特性和 C 实现的特性之间有很强的联系。当有人为只有 32 位寄存器和 32 位整数算术指令的机器编写编译器时,他们最有可能将编译器设计为使 int 为 32 位。然而,这是一种选择。完全可以为int 是64 位或16 位的32 位机器编写编译器。前者可能更困难(因为他们必须通过将单个 C 算术运算符编译为多条指令来构造 64 位算术)或浪费(因为在能够进行 32 位操作的机器上仅执行 16 位操作并没有使用其全部功率),但这是完全可能的。因此,C 实现的实际属性是整个实现的函数,而不仅仅是运行它的机器。

脚注

1 C 标准将“实现”定义为“特定的软件集,在特定的控制选项下运行在特定的翻译环境中,它执行程序的翻译,并支持执行在特定的执行环境中发挥作用”(C 2011 [N1570] 3.12)。然而,当然也需要硬件,或者至少是硬件规范,以便执行或理解编译器产生的可执行程序。因此,我们可以将实现视为解释和执行 C 程序所需的一切。

【讨论】:

    【解决方案2】:

    在 C(或 C++)中,“实现”是指“围绕”已编译程序的软件,例如编译器、标准库等。例如,GCC 为 x86-64、32 位 x86 和其他几个提供了一个 C“实现”。 Microsoft 为 x86-64、32 位 x86 和以前的其他一些提供了“实现”。 “依赖于实现”的一个例子是源代码字符集和编码(例如程序源中的 Unicode 支持)。另一个例子是当你#include它们时如何找到文件。

    “机器”是指硬件,可能是内核的一部分。例如,您可能有一台具有 64 位指针的机器,或者一台具有 32 位指针的机器。您可能还有一台机器,其中整数算术不是二进制补码。这些东西取决于机器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-31
      • 2015-03-18
      • 1970-01-01
      • 1970-01-01
      • 2017-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多