.NET是否删除了各种语言之间的区别?

时间:2008-10-29 19:04:32

标签: .net programming-languages idioms

我们总是拥有最适合在特定场景中使用的语言。对于快速原型开发,VB6是一个明显的选择。在具有简单桌面用户界面以及标准和非复杂数据库交互要求的项目中选择了VB6。如果您想使用低级例程开发设备驱动程序,则可能依赖于C或Visual C ++。 ASP是Web界面开发的标准选择。每种语言都有一个特定的“领域”或“专业化”,粗略地说。

使用.NET框架,所有语言都可以互操作,并且可能是一致的。你可以拥有一个包含不同语言模块的项目,但最终都得到了相似的处理(所有这些都被编译为IL)。

这是否意味着我们之前的区别不再存在?这种区别并不一定是坏事,而是设计上存在的东西,而不是由于任何约束。对于.NET框架及其对各种语言的处理,这显然有所减弱。

5 个答案:

答案 0 :(得分:7)

区别仍然存在。例如,VB.NET目前支持IDispatch后期绑定的方式比C#更好(不包括C#4.0),VB.NET的XML文字与代码内联,这使得它与其他.NET语言相比,成为操作XML的便捷工具。 C ++往往不太适合.NET,即使使用C ++ / CLI变体,但它非常适合本地编程(一如既往)以及在托管代码和非托管代码之间提供互操作层。

每种语言的语法都有细微差别,可以更容易地表达某些概念。即使它们都归结为IL,它们也都没有什么不同,当时它们都归结为装配。您选择的语言最适合您尝试执行的任务,无论其编译的平台如何。

答案 1 :(得分:6)

语言差异仍然存在。将语言编译为汇编代码还是MSIL并没有什么区别,除了MSIL的抽象级别可能高于汇编的抽象级别。

.Net的巨大优势,这可能激发了这个问题,就是你可以在用语言3编写的应用程序链接的语言2中编写的库中使用语言1的目标代码。

很久以前,在有电和自动移动设备之前,您不能简单地在Pascal或Delphi应用程序中使用C生成的.obj文件(反之亦然),而无需将它们明确地包装在DLL中(并且要小心)调用方法和参数序列和参数兼容性),或调用另一个可执行文件。

答案 2 :(得分:3)

不,它没有框架的功能与语言功能不同。要说有.Net删除语言之间的区别就像是说汇编代码删除了语言之间的区别。

语言仍然具有不同的功能,某些语言的语法更能解决一些问题,否则整个.Net框架会在单一语言上同质化。

答案 3 :(得分:2)

如果有的话,我认为它可能提高语言之间的区别,正是因为它们是如此可互操作。现在的重点是语言

相同的基础服务和基类可用的事实意味着您可以根据语言提供的内容做出明智的决定,而不是框架与语言提供的内容相关

例如,对于使用后期绑定的COM,我可能(勉强)选择VB(或者我可能会等待C#4.0)。对于某些特定的财务/模拟工作,我可能会认真考虑F#。对于常规的业务编程,我的选择是C#。

但是您可以根据适用于不同块的语言进行这些选择,并使用不同语言的不同dll将完成的应用程序编织在一起。以前您可能不得不与部分代码作斗争,因为 使用 x 语言来使其与其余代码进行互操作。

答案 4 :(得分:0)

我认为这实际上取决于提出问题的背景。

假设您正在开发一个供客户使用的库。使用CLSCompliant属性标记此程序集。这意味着编译器将强制您使用CLR保证的功能,如果您使用特定于语言的功能,则无法编译。

当考虑使用符合CLS的库时,.NET会消除语言之间的区别。每种.NET语言都必须符合CLS,因此您可以保证平等地支持每种.NET语言。

现在,假设您在VB .NET中编写库,并决定使用可选参数而不是方法重载。在这种情况下,.NET突出了语言之间的区别,因为可选参数不符合CLS(尽管C#显然在.NET 4.0中支持它们。)对于使用不支持可选参数的语言的人,您的库可能是不可能或最多难以使用。每种语言都有一些不符合CLS的功能,当使用这些功能时,您可能会使某些.NET语言的用户更难以使用您的库。

所以,我觉得这是一个棘手的问题。如果您正在编写符合CLS的代码,那么.NET语言之间只有语法差异。如果你不是,那么你可以编写一些.NET语言无法使用的方法。