c#语言规范;程序实例化;似乎是被认错了

本文关键字:似乎是 认错 错了 实例化 程序 语言 | 更新日期: 2023-09-27 17:50:41

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

程序编译器的输入。

当应用程序被定义为

应用程序具有入口点

的程序集

但是,它们定义了

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

根据"程序"的定义,这不应该是…

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

?

c#语言规范;程序实例化;似乎是被认错了

据我所知,这个术语在微软版本的规范中没有出现。注释的ECMA规范在"Program"后面有如下注释:

程序、程序集、应用程序和类库
程序的这个定义不同于通常的用法。在c#中,程序只是编译器的输入。编译器的输出是一个程序集,它可以是一个应用程序或一个类库

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

No.

它们是定义,所以它们可以是他们想要的任何东西。你的错误是试图在单词program中找到一个语义链接,而实际上没有。正如你所注意到的,它们是不相关的。

他们说的是"这就是我们如何使用这个术语";选择任何术语基本上都没有错,只要定义是一致的。foo, bar, bazprogram instantiation一样正确。只要名称在内部保持一致,并且定义是正确的,名称就可以是任何名称。它们只是标签。

微软的某个人显然认为program instantiation这个术语应该反映在它的常用用法中,这是更重要的。program这个词可能没有得到同样的待遇,但是,它们只是名字。名称是"原子的":单词program与术语program instantiation根本没有关系。


因为它们只是标签,它们的项可以被任何东西代替。一种可能是:

X =编译器的输入

Y =具有入口点的程序集

Z = Y .

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

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

XY = Y的执行

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


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

有一个完整的哲学分支专门研究这类问题,并引起"冲突"。从某种意义上说,你引用的几乎是不可避免的。

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

根据给定的输入,编译器输出的仍然是程序,只是采用汇编/应用程序的格式,因此它是:

程序,有效的 -根据语法规则和可诊断的语义规则构造的c#程序。

我在这里大胆地说,我们可以把自己从这种特定的上下文中移开,看看Program的可用英语用法定义:

  1. (6)使机器(尤指机器)能够运行的一组编码指令计算机,执行一个期望操作顺序。
  2. (7)程序指令中的指令序列。

编译器的输入和输出都可以用上面的标记。

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