编程语言和框架之间的区别

时间:2014-02-19 17:25:09

标签: vb.net frameworks programming-languages

我是一名学生,并开始在VB.Net开发一些项目,我很喜欢它。但是,我向一些同事提出了这个问题,他们无法回答。甚至我的老师也无法澄清什么是VB和.Net。我检查了this question here,但即使是接受的答案也让我有些怀疑。

例如,这里有一段代码

Class Example
    Private _value As Integer

    Public Sub New()
    _value = 2
    End Sub

    Public Function Value() As Integer
    Return _value * 2
    End Function
End Class

Module Module1
    Sub Main()
    Dim x As Example = New Example()
    Console.WriteLine(x.Value())
    End Sub
End Module

如何将语言与框架分开?我知道语言是语法,但是,框架在哪里?

我读过框架包含库:什么是库?我可以看到它的语言(语法和所有),可以看到,但框架是否可见?如果是这样,在哪里?

所以在VB.Net应用程序中,当我查看代码时,我只能看到VB:C#.Net应用程序也是如此。

也许是愚蠢的例子:例如,要使汽车发挥作用,所有部件必须都很好 - 从轮胎到发动机罩,发动机,燃料 - 但所有这些都是可见的,而从外面我们可以'看到内部运行的油或燃料或活塞工作,我们可以看到它们。

在查看VB / C#.Net应用程序时是否可以看到所有组件?我的意思是,查看代码并清楚地区分什么是VB或C#和.Net?

由于

5 个答案:

答案 0 :(得分:1)

.NET框架有三个主要部分:

  • 编译器MSBuild
  • 运行时环境CLR) - 虚拟机,垃圾收集器等
  • 支持图书馆FCL) - 系统,ADO.NET,LINQ,WPF,WCF等

以上所有三个都包含在免费分发的.NET Framework中。术语 .NET Framework 统称并且松散地指向所有这些事物,但它们各自执行非常不同的角色。对于每个部分,您的问题的答案都不同。

编译器

您可能知道,您无法直接运行VB.NET代码。首先必须将其编译为可执行文件,该文件可以作为Windows进程启动。编译器用于将各种高级语言(例如VB.NET和C#)编译成程序集(例如EXE,DLL)。但是,与本机编译器不同,.NET程序集不包含本机机器代码。相反,.NET编译器编译成包含MSIL代码的.NET程序集。 MSIL是一种略高于机器代码的语言,理论上可以在任何平台上由虚拟机运行。

编译器显然在您的代码中不可见。显然,您的代码中没有地方可以说" 编译器"。相反,编译器是用于编译所有代码的工具。但是,编译器确定了您可以使用的语言。如果.NET框架不包含Ruby编译器,那么您就可以在Ruby中编写.NET应用程序。因此,以这种方式,您的代码是用VB.NET或C#在所有中编写的事实表明它将使用.NET Framework进行编译。

您可能在想,"编译器不是框架的一部分 - 这是Visual Studio的一部分。"但如果你这么想,那你就错了。编译器作为.NET框架的一部分安装。从技术上讲,您不需要Visual Studio来编译.NET应用程序。您可以使用记事本在任何.NET语言中编写应用程序,然后使用.NET Framework编译并运行它,而无需安装Visual Studio。

.NET Framework的编译器部分称为MSBuild

运行时环境

由于编译器将高级代码编译为MSIL程序集,而不是编译为本机机器代码二进制文件,因此必须安装.NET Framework才能运行任何.NET应用程序。当您运行.NET应用程序时,Framework负责实时(JIT)将MSIL代码编译为机器代码,以便可以在您当前的平台上执行。它还提供内存管理功能,如垃圾收集。

所有.NET语言都共享相同的运行时环境(因为所有.NET语言都编译为MSIL代码)。因此,它不是VB.NET运行时环境,也不是C#运行时环境,而是它是MSIL运行时环境。每个平台实际上有一个运行时环境,而不是每个语言有一个运行时环境。必须为每个处理器体系结构和运行Framework的每个操作系统自定义实现单独的环境。

这部分框架对您和您的代码基本上是不可见的。您可以调用一些方法来访问GAC,垃圾收集器或.NET安全系统,但除此之外,您甚至都不知道它。除非没有安装框架,否则就是 - 在这种情况下,它很快就会变得非常清楚。

.NET Framework的运行时环境部分称为Common Language Runtime (CLR)

支持图书馆

.NET Framework包含许多非常有用的库(DLL)。例如,每个应用程序都引用mscorlib.dllSystem.dll库,这些库提供System命名空间中的许多核心数据类型。您可以根据需要随意引用许多其他库。

这些支持库是作为已编译的MSIL程序集提供的,因此它们都可以被任何.NET支持的语言编写的项目引用和使用。当您在VB.NET中调用Console.WriteLine("Hello World")和在C#中调用Console.WriteLine("Hello World");时,您将调用完全相同的.NET Framework库。 Console类在mscorlib.dll库中定义。

,它总是做同样的事情。使用哪种语言来称呼它并不重要。

支持库在您的代码中非常明显。每当您在自己的代码中使用未明确定义的任何内容时,您使用的是框架(当然,除非它来自第三方库)。在上面的示例代码中,您使用的是IntegerConsole。这两种类型都是由.NET Framework的支持库定义的(两者都由mscorlib.dll定义)。换句话说,该语言是您用于调用Framework的所有语法。其他一切都是框架。

如果你想"看"支持库,最好的起点是Visual Studio。您可以使用对象浏览器浏览当前在项目中引用的库定义的所有类型。如果要引用更多.NET Framework库,请转到项目属性设计器的引用选项卡,单击添加... 按钮,然后选择 Asseblies>框架选项。这将列出作为.NET Framework一部分提供的所有支持库。如果您想了解更多关于任何这些库提供的任何功能的信息,那么您最好的资源是MSDN(当然还有Stack Overflow)。

.NET Framework的支持库部分称为Framework Class Library (FCL)

答案 1 :(得分:0)

以下是我设想的两个

  • 框架是可供语言使用的库,API和运行时组件的集合
  • 语言是访问框架的语法

在许多情况下,很难将两者分开,因为使用时的语言几乎总是访问框架的某些部分。例如,即使是这个非常简单的定义

Class Example

End Class

即使它没有说明,这个定义依赖于定义为System.Object的目标框架。这是语言为Example设置适当基类所必需的。

答案 2 :(得分:0)

你必须记住,如果你使用的是编程语言,那么它必须归结为二进制1和0。

这意味着当你的程序被编译和运行时,它正在使用C#编译器。 C#编译器是用本机语言编写的程序(可能是c或c ++)。该程序允许将您的转换为.net框架运行时可以理解的内容。基本上,您的C#代码变成某种中间字节码。

类似地,在将程序编译为此中间字节码后,它将在虚拟机(JVM for Java或.net框架运行时C#)之上运行。这个虚拟机是一个用母语(c或c ++)编写的预编译程序,它允许你的程序以一种既懂的方式与计算机的处理器连接。

所有这些预先编写的预编译部分都是框架的一部分。它们在某个特定位置安装到您的计算机上(这就是为什么它们可能无法用其余的代码和资产随处可见),并为想要使用它们的任何东西提供API。

API类似于加速踏板和发动机之间的理解。由于有人踩油门踏板,发动机接受更多燃油。从某种意义上说,发动机与油门踏板“对话”并明白如果你用力按压踏板,发动机应该通过向燃烧室注入更多汽油来应对。

这些单独的部分以及它们的“理解”代表了一个框架。您可以添加一个可以操作油门踏板的“驾驶员”作为“C#应用程序”。

答案 3 :(得分:0)

如何将语言与框架分开?

例如......以英语为例,英语是一种语言,而书籍则是一种框架。在这个例子中,你可以用英语写任何你想要的东西,但你不能用“霍比特人”写作,因为它是一本书,而不是一种语言。

但是,您可以参考这本书。例如,你可以谈论 Trolls ,你不必定义它的行为或外观,因为这本书已经为你定义了它们。

框架在哪里?

只要您引用它,框架就会存在。在 Trolls 示例中,如果你问“你知道 Trolls 怎么样?”,我需要一个上下文,它可能是哈利波特的,Tolkien的,魔兽世界等我会给你编译错误,因为我无法理解你。

如果我们“使用”相同的“框架”(书),或者如果您之前告诉我它们,我将能够回复您(编译)。

框架是否也可见?如果是这样,在哪里?

VB / C#是语言,你不能“真正看到”它在哪里,因为你写的。这就像问英语在哪里。但是你可以编译它,这就是你可以“找到”的东西,就像你可以找到一台打印机一样。

框架是一组已经打包成一个漂亮的黑盒子的库/实用程序,你下载并信任你的生活。

VisualStudio会帮助你很多,它会隐藏“复杂的东西”,想象它就像是一部名为“指环王”的电影,并删除了很多你不能做的事情除非你读完这本书,否则请仔细研究。

.NET Framework Stack

你无法深入研究“.NET内部的作用”,因为它是封闭的软件。想象一下,我烧掉了所有的书,你必须相信这部电影 但是您可以使用开源示例,例如Struts(JavaEE Framework),因为它是开源的(书籍不应该在开源示例中刻录)。

答案 4 :(得分:-1)

这是一个抽象的例子。

语音类似于框架,你有发音,产生声音; 谐振;语调,音调的变化等等。这些都是沟通的基石。

要说一种特定的语言,你必须利用语音,形态,语言语法,正确的语法;语义等 - 该语言的所有规则。

...

在编程框架中,您可以使用构建块(代码库,相关文件,特定文件夹/文件布局等)来完成编程任务。

编程语言是您必须遵守的一组规则,才能使您的应用程序正常工作。

...

在Java编程语言中,我可以打开记事本并编写java代码,编译它,并在安装了JVM的任何机器上运行它。

Java Server Faces(JSF)是一个框架,其中存在模型 - 视图 - 控制器(MVC)范例作为运行Web应用程序的基础。您有必要的依赖文件(如web.xml),服务器必须存在这些文件才能正确实现,类文件的结构化布局以及其他库的实现/配置。从本质上讲,您的文件仍然使用Java编程语言编写,并且您的语法必须正确,但如果您想使用该框架构建Web应用程序,则必须遵守其他特定模式和约束。