代码之家  ›  专栏  ›  技术社区  ›  Ather

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

  •  2
  • Ather  · 技术社区  · 16 年前

    我们一直都有在特定场景中使用更可取的语言。对于快速的原型开发,vb6是一个明显的选择。vb6是在具有简单的桌面用户界面和标准且不复杂的数据库交互要求的项目中选择的。如果您想使用低级例程开发设备驱动程序,您可能依赖于C或Visual C++。ASP是开发Web界面的标准选择。每种语言都有一个特定的“领域”或“专门化”,说得很粗糙。

    在.NET框架中,所有语言都是可互操作的,并且可能是一致的。您可以拥有一个项目,其中包含来自不同语言的模块,所有模块都在一起,但最终都会得到相当相似的处理(所有模块都编译成IL)。

    这是否意味着我们之前的区别不再存在?这种差异不一定是坏的,而是设计出来的,而不是任何约束造成的。显然,随着.NET框架及其对各种语言的处理,这一点有所减弱。

    5 回复  |  直到 16 年前
        1
  •  6
  •   devio    16 年前

    语言差异依然存在。将语言编译为汇编代码或MSIL并没有真正的区别,只是MSIL的抽象级别可能高于汇编的抽象级别。

    然而.NET的最大优势,这可能引发了一个问题,即您可以在一个用语言2编写的库中使用语言1的对象代码,该库由一个用语言3编写的应用程序链接。

    很久以前,在没有电力和汽车移动之前,你不能简单地在Pascal或Delphi应用程序中使用C生成的.obj文件(反之亦然),而不将它们显式包装在一个dll中(并注意调用方法、参数序列和参数兼容性),或者调用另一个可执行文件。

        2
  •  7
  •   community wiki Jeff Yates    16 年前

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

    每种语言在语法上都有细微差别,使表达某些概念更容易。即使他们都煮成了白葡萄酒,也和以前一样,当他们都煮成了白葡萄酒。您选择的语言的语法最能支持您尝试执行的任务,而不管它编译到哪个平台。

        3
  •  3
  •   Omar Kooheji    16 年前

    不,它没有框架的功能和语言功能不一样。可以说,has.net删除了语言之间的区别,就像saying删除了汇编代码删除了语言之间的区别一样。

    这些语言仍然具有不同的特性,某些语言的语法在解决某些问题方面更为出色,否则整个.NET框架将在一种语言上同构。

        4
  •  2
  •   Marc Gravell    16 年前

    如果有的话,我想可能有 加高 准确地说,语言之间的区别 因为 它们是可互操作的。现在的重点是 语言 .

    相同的基本服务和基类是可用的,这意味着您可以根据 语言 提供,而不是框架与语言合作提供的内容。

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

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

        5
  •  0
  •   OwenP    16 年前

    我认为这真的取决于提问的背景。

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

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

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

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