3

在 C# 语言规范中,程序被定义为

对编译器的输入进行编程。

虽然应用程序被定义为

应用具有入口点的程序集

但是,他们定义

程序实例化——应用程序的执行。

鉴于“程序”的定义,这不应该是......

应用程序实例化——应用程序的执行。

反而?

4

3 回答 3

3

不。

他们是定义,所以他们可以是他们想要的任何东西。您的错误是试图在单词中找到语义链接program,但没有。正如您所指出的,它们是不相关的。

他们说的是“这就是我们使用这个词的方式”;只要定义一致,选择任何术语基本上都没有错。foo, bar, 并且和.baz一样正确program instantiation。只要名称在内部是一致的,并且定义是正确的,名称就可以是任何东西。它们只是标签。

微软的某个人显然认为更重要的是将该术语program instantiation反映在它的常用用法中。该术语program可能没有得到相同的处理,但同样,它们只是名称。并且名称是“原子的”:这个词program与这个词一点关系都没有program instantiation


由于它们只是标签,因此它们的术语可以用任何东西代替。一种可能性是:

X= 编译器的输入。

Y= 具有入口点的程序集

Z= 的执行Y

用其他任何名称替换任何名称对其用法没有任何影响。

Z如果我用一个新术语替换上述定义XY

XY= 执行Y

这仍然成立。它只是一个标签,它从定义中获取语义内容,而不是从它的名称中获取。 XY与 没有语义关系X,与 的关系Y只是偶然的。


当您阅读事物的定义,尤其是技术规范时,记住这一点很重要。某事通常没有最佳术语,因为同一事物通常有多个常用术语,而且它们的定义通常不够严格,无法在精确的规范中有意义。

有一个完整的哲学分支致力于解决此类问题,并且在您引用的意义上引起“冲突”几乎是不可避免的。

C# 规范的作者做出了他们的选择,只要它在内部是一致的,它就是“正确的”。

于 2011-04-19T20:28:26.827 回答
3

据我所知,这个术语并没有出现在微软版本的规范中。带注释的 ECMA 规范在“程序”之后有这个注释:

程序、程序集、应用程序和类库 程序
的这种定义不同于一般用法。在 C# 中,程序只是编译器的输入。编译器的输出是一个程序集,它要么是应用程序,要么是类库

虽然附近没有任何其他注释。它看起来确实有些奇怪,这也许就是它没有出现在 MS 规范中的原因。

于 2011-04-19T20:41:43.413 回答
1

根据给定的输入,编译器输出的仍然是程序,只是程序集/应用程序的格式,例如:

Program, valid — 根据语法规则和可诊断语义规则构造的 C# 程序。

我将在这里勇敢地迈出一步,说我们可以将自己从这种特定的上下文中移开,并查看可用的英语用法Program定义:

  1. (6) 一组编码指令,使机器,尤其是计算机,能够执行所需的操作序列。
  2. (7)程序指令中的指令序列。

输入到编译器的内容和输出的内容都可以由上述标记。

但实际上,我将不得不投票结束,因为这是一个关于英语语义的问题。

于 2011-04-19T20:15:00.343 回答