【问题标题】:What is the definition of "program" according to C#?根据 C#,“程序”的定义是什么?
【发布时间】:2014-12-15 03:27:48
【问题描述】:

根据C# spec 5.0 (sec 1.2)

C# 中的关键组织概念是程序、命名空间、类型、成员和程序集。 C# 程序由一个或多个源文件组成。程序声明类型,其中包含成员并且可以组织到命名空间中。类和接口是类型的示例。字段、方法、属性和事件是成员的示例。编译 C# 程序时,它们被物理打包到程序集中。程序集通常具有文件扩展名 .exe 或 .dll,具体取决于它们是实现应用程序还是库。

但他们从不解释什么是程序!程序是用于创建单个程序集的所有源文件的集合吗?或者一个程序可能由几个程序集组成?

这很重要,因为稍后“程序”用于定义其他概念,例如内部可访问性。

澄清一下:我问的是,在 C# 5.0 规范的上下文中,什么是“程序”?

【问题讨论】:

  • 我读起来很清楚。
  • 真的找不到比发布的更好的定义了。很明显,这些类型可以有多个程序集,通常是 exe 和 dll。
  • 见 3.5.2 节说“如果声明的 T 的可访问性是内部的,则 T 的可访问域是 P 的程序文本。”它说“程序的程序文本定义为程序的所有源文件中包含的所有程序文本”,这是一个循环定义!但我猜一个程序必须是一个程序集,否则内部将与公共程序相同。对吗?
  • 查看此链接 msdn.microsoft.com/en-us/library/7c5ka91b.aspx 将 internal 的定义更改为基于程序集,而不是程序。我猜微软意识到程序的概念太混乱了。

标签: c# programming-languages language-lawyer specifications


【解决方案1】:

要么。根据上述定义,程序是一个概念,而不是物理定义的边界。因此,它可以是单个 dll 或大量程序集。

【讨论】:

  • 如果可以,那么可访问域的概念就没有明确定义。 internal 可访问性被定义为在程序 P 的程序文本中可访问,但当然我们知道这意味着在单个程序集中(除非您使用 IntervalsVisibleToAttribute)。编译器认为程序是所有输入源文件的集合。
  • 我完全了解您来自哪里。为了澄清,我的意思是/或在一个程序中理论上可以由单个程序集或多个程序集组成。对于多个程序集,我同意,绝对编译器必须考虑所有输入源文件,然后确定每个源文件的内部可访问性,因为它与源文件的成员、程序集本身和其他潜在程序集相关。程序。我认为您的出色澄清只会进一步增强我的原始观点,非此即彼:)。
  • @JohnHenckel 我想退后一步考虑一下规范要求编译器实现者做什么。该规范没有提到InternalsVisileToAttribute,所以它是一个特定于实现的行为。实现者需要让可访问性修饰符按照他们在第 3.5.2 节中定义的方式工作,并且程序是“一个或多个源文件”的集合。程序是打包成单个还是多个物理程序集似乎也是一个实现细节。
【解决方案2】:

基本上,程序是一组可以在计算机中执行以执行特定任务的指令。它可以是程序集的集合或执行任务的单个程序集。它不一定是一个完整的解决方案。 IE。这不是一个应用程序。有些人可能会争辩说它们是相同的。但是,有区别。它们不是同义词。

要了解程序是什么,您应该了解程序应用程序之间的区别。 应用程序程序是有区别的。

计算机程序,或只是一个程序,是一系列指令, 写成用计算机执行指定的任务。 - Wikipedia

另一方面,应用程序是一组协同工作以解决复杂问题的程序。

应用程序软件是一组一个或多个程序,旨在执行特定应用程序的操作。 - Wikipedia

例如要解决特定的业务问题,您可能需要一个应用程序,该应用程序在内部执行多个任务来解决该问题。

【讨论】:

  • 我认为“程序”的如此宽泛的定义在这里没有用处。根据这个定义,一个函数就是一个程序。
【解决方案3】:

约翰,我认为整个混乱是由于历史和术语不一致造成的。在计算机时代的开始,只有程序存在。每个人都将计算机程序理解为具有定义功能的计算机的任何指令集。不管它是写在纸上,打在穿孔卡片上,还是记录在磁带上,都无关紧要。然后新一代的软件开发人员、语言、框架等产生了新的术语,其中一些含义相同,但名称不同。我可以用“函数”(C,C++)与“方法”(C#)来指出类似的故事。一般来说,回答您的问题是没有意义的——它不会产生任何实际结果。

【讨论】:

  • C# 规范定义了一种语言,因此它应该有歧义。 “内部”可访问性的定义取决于“程序”的定义。假设 Microsoft Visual Studio 是正确的实现,“程序”是编译成单个程序集(exe 或 dll)的一组源文件。但是,我认为@mike z 有一个很好的观点:编译器如何打包输出不是由语言定义的。例如,编译器可以将每个类放入一个单独的 .clz 文件中,或者甚至可能没有编译器......所以“程序”本质上是模棱两可的
【解决方案4】:

感谢您的意见。抱歉,如果我的问题不清楚。我想问:在 C# 5.0 规范的上下文中,什么是“程序”?仔细重读section 3.5.2,现在我认为“程序”是指用于创建单个程序集(exe 或dll)的源文件集。我不认为规范是模棱两可的。纵观整个规范,“程序”总是有这个定义。但不幸的是,它从未真正定义过。可能它会在 C# 6.0 中得到改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多