在 C# 语言规范中,程序被定义为
对编译器的输入进行编程。
虽然应用程序被定义为
应用具有入口点的程序集
但是,他们定义
程序实例化——应用程序的执行。
鉴于“程序”的定义,这不应该是......
应用程序实例化——应用程序的执行。
反而?
在 C# 语言规范中,程序被定义为
对编译器的输入进行编程。
虽然应用程序被定义为
应用具有入口点的程序集
但是,他们定义
程序实例化——应用程序的执行。
鉴于“程序”的定义,这不应该是......
应用程序实例化——应用程序的执行。
反而?
不。
他们是定义,所以他们可以是他们想要的任何东西。您的错误是试图在单词中找到语义链接program
,但没有。正如您所指出的,它们是不相关的。
他们说的是“这就是我们使用这个词的方式”;只要定义一致,选择任何术语基本上都没有错。foo
, bar
, 并且和.baz
一样正确program instantiation
。只要名称在内部是一致的,并且定义是正确的,名称就可以是任何东西。它们只是标签。
微软的某个人显然认为更重要的是将该术语program instantiation
反映在它的常用用法中。该术语program
可能没有得到相同的处理,但同样,它们只是名称。并且名称是“原子的”:这个词program
与这个词一点关系都没有program instantiation
。
由于它们只是标签,因此它们的术语可以用任何东西代替。一种可能性是:
X
= 编译器的输入。
Y
= 具有入口点的程序集
Z
= 的执行Y
。
用其他任何名称替换任何名称对其用法没有任何影响。
Z
如果我用一个新术语替换上述定义XY
:
XY
= 执行Y
这仍然成立。它只是一个标签,它从定义中获取语义内容,而不是从它的名称中获取。 XY
与 没有语义关系X
,与 的关系Y
只是偶然的。
当您阅读事物的定义,尤其是技术规范时,记住这一点很重要。某事通常没有最佳术语,因为同一事物通常有多个常用术语,而且它们的定义通常不够严格,无法在精确的规范中有意义。
有一个完整的哲学分支致力于解决此类问题,并且在您引用的意义上引起“冲突”几乎是不可避免的。
C# 规范的作者做出了他们的选择,只要它在内部是一致的,它就是“正确的”。
据我所知,这个术语并没有出现在微软版本的规范中。带注释的 ECMA 规范在“程序”之后有这个注释:
程序、程序集、应用程序和类库 程序
的这种定义不同于一般用法。在 C# 中,程序只是编译器的输入。编译器的输出是一个程序集,它要么是应用程序,要么是类库。
虽然附近没有任何其他注释。它看起来确实有些奇怪,这也许就是它没有出现在 MS 规范中的原因。
根据给定的输入,编译器输出的仍然是程序,只是程序集/应用程序的格式,例如:
Program, valid — 根据语法规则和可诊断语义规则构造的 C# 程序。
我将在这里勇敢地迈出一步,说我们可以将自己从这种特定的上下文中移开,并查看可用的英语用法Program
定义:
- (6) 一组编码指令,使机器,尤其是计算机,能够执行所需的操作序列。
- (7)程序指令中的指令序列。
输入到编译器的内容和输出的内容都可以由上述标记。
但实际上,我将不得不投票结束,因为这是一个关于英语语义的问题。