一起谈.NET技术,VB.NET和C#的发展与动态语言运行时

简介:   在去年微软的专业开发者大会上(Professional Developers Conference PDC 2008),微软就开发者在.NET平台上的未来做了详细的展望,本文我们将概括地来看一下即将到来的.NET 4.0 Framework的一些特性,以及全新的Microsoft 系编程语言,讨论下微软对于.NET Platform在接下来几年的长远展望。

  在去年微软的专业开发者大会上(Professional Developers Conference PDC 2008),微软就开发者在.NET平台上的未来做了详细的展望,本文我们将概括地来看一下即将到来的.NET 4.0 Framework的一些特性,以及全新的Microsoft 系编程语言,讨论下微软对于.NET Platform在接下来几年的长远展望。

VB.NET和C#的联合发展

  当前来自软件的最首要的信息之一是针对Microsoft Visual Basic .NET开发者的。VB.NET和Microsoft Visual C#都是构建在通用语言运行时(Common Language Runtime—CLR)之上,这意味着它们都向下编译成通用中间语言(Common Intermediate Language—CIL)。

  由于二者均向下编译成相同的代码,因而两个语言内部也不存在很大的差别。但是,两种语言却由微软两个不同的团队来维护,而且几年来的这种分离由于开发团队在各自产品上有不同的视角和理念,导致C#和VB.NET这两种语言演变出许多语言方面的特性。许多令人兴奋的特性最初出现在C#中最后却成了VB.NET的特性,很多VB.NET开发者都感到了这一点。自然地,这引起了VB.NET阵营的不满。

  联合发展是微软的一个承诺,借此承认C#和VB.NET为相同重要的语言,而且微软承诺在语言特性的发展方面,这些特性会同时加入到两个语言中。开发者不再需要为了某个特性而选择某个语言,也不再需要讨论到底哪个语言更好,他们要做的只是从语法方面来选择自己的语言就可以了。也许C#开发者会有一点挥之不去的优越感,VB.NET开发者会为此不爽,但联合发展后VB.NET开发者可以提醒“骄傲”的C#开发者,因为两种语言只是不同外表下的同一个东西。

动态语言运行时(Dynamic Language Runtime)的介绍

  微软很敏感地意识到.NET Framework并不是构建应用时的唯一选择。快速地看看现在的开发环境,你会发现有很多语言选择。人们花费时间和精力用这些语言来写出有用的组件,问题来了:怎么能够让这些用其他语言写出的组件不至于在.NET上重写?

  也许即将发布的.NET 4.0最令人激动的新特性是动态语言运行时(Dynamic Language Runtime—DLR)。就像通用语言运行时(Common Language Runtime—CLR)为静态型语言如C#和VB.NET提供了通用平台一样,动态语言运行时(Dynamic Language Runtime—DLR)为像JavaScript, Ruby, Python甚至COM组件等动态型语言提供了通用平台。这代表.NET Framework在互操作性方面向前迈进了一大步,提供了一种语言操作的抽象,共享存储空间避免数据在进程中反复的集结,像垃圾收集一样的一套通用语言特性,以及将一种数据表达转换成另一种。

  在更高层,你可以认为动态语言运行时(Dynamic Language Runtime—DLR)有三个层:

  ◆.NET语言集成(.NET Language Integration)
  ◆DLR核心组件(DLR Core Components)
  ◆语言结合(Language Binders)

  第一层,.NET语言集成,代表.NET语言有了一个概念即DLR是什么以及它怎么用。大部分来说,你甚至不会注意到DLR的这个方面,因为大部分的.NET语言有一个自然的集成点。IronRuby和IronPython都是动态型语言,所以DLR相合VB.NET总是在对象类型支持后联编(late binding)的概念,所以DLR很好地与后联编(late binding)解决合成一体。然而C#没有后联编(late binding)的概念,所以需要一个附加的静态型来支持动态语言。

  第二层是动态语言运行时(Dynamic Language Runtime—DLR)自身,由三个核心组件组成:表达式树(Expression Trees),动态分配(Dynamic Dispatch),和调用点缓存(Call Site Caching)。一个表达式树是以一棵树方式的代码表现方式,它将语言抽象成一个连续的能够被DLR操作的格式。一旦动态代码以树的方式表现,DLR就能够阅读这棵树并且为了实际的执行从这棵树生成CLR代码。将代码解释成一个表达式树,然后创建CLR是一个昂贵的操作,所以DLR采用了一种性能技术即我们所知道的调用点缓存(Call Site Caching)来避免每次动态代码被调用时的重新编译。动态分配(Dynamic Dispatch)确保适当的语言结合(Language Binders)能够用于动态调用。

  语言结合(Language Binders)构成了第三层,它是动态语言运行时(Dynamic Language Runtime—DLR)所需要的某些操作的特定语言工具。当然DLR远比本文简单介绍地要详细、功能强大得多,更多的信息来自于你自己的切身应用。

目录
相关文章
|
5月前
|
开发框架 缓存 .NET
.NET Core 项目启动时运行定时任务
.NET Core 项目启动时运行定时任务
40 0
|
7月前
|
C#
45【软件技术基础】C#调用NPOI插件对EXCEL进行处理
NPOI插件进行EXCEL表格处理,不依赖第三方软件,功能强大,使用简便。 C#调用NPOI插件进行EXCEL单个表和文件夹中批量表的处理。
116 1
|
8月前
|
监控 算法 NoSQL
.NET6运行时动态更新限流阈值
.NET6运行时动态更新限流阈值
99 0
|
11月前
|
缓存 前端开发 JavaScript
采用.Net Core技术框架开发的医院云LIS平台源码,B/S架构
基于B/S架构的医学实验室检验系统源码,整个系统的运行基于WEB层面,只需要在对应的工作台安装一个浏览器软件有外网即可访问。全套系统采用云部署模式,部署一套可支持多家医院检验科共同使用。 采用.Net Core新的技术框架、DEV报表、前端js封装、分布式文件存储、分布式缓存等,支持LIS独立部署,Docker部署等多种方式。
|
11月前
|
Docker 容器
.NET Core 网站项目在Docker中运行无法访问问题处理
.NET Core 网站项目在Docker中运行无法访问问题处理
217 0
|
设计模式 缓存 NoSQL
U3D客户端框架之类对象池技术优化C#语言GC
类对象池,类似对象池,顾名思义就是一定数量的已经创建好的类对象(Object)的集合。当需要创建对象时,先在池子中获取,如果池子中没有符合条件的对象,再进行创建新对象,同样,当对象需要销毁时,不做真正的销毁,而是将其对象SetActive(false),并存入池子中。这样就避免了大量对象的创建销毁,减少了GC,优化了性能。
|
前端开发 API 开发者
.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试
.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试
295 0
.NET Web应用配置本地IIS(实现Visual Studio离线运行与调试
|
缓存 Linux Windows
.NET Core 获取主机运行资源的库
CZGL.SystemInfo 是一个支持 Windows 和 Linux 的资源信息获取库,用于获取系统环境、机器资源信息、系统资源使用情况。 Nuget 搜索 CZGL.SystemInfo 即可安装。 类库中每一个属性和方法,我都加上了注释,调用时可以看得到。
205 0
|
安全 NoSQL MongoDB
.Net线程同步技术解读
C#开发者(面试者)都会遇到lock(Monitor),Mutex,Semaphore,SemaphoreSlim这四个与锁相关的C#类型,本文期望以最简洁明了的方式阐述四种对象的区别。
.Net线程同步技术解读
|
移动开发 负载均衡 前端开发
2022届软件技术专业毕业生就业岗位分析(.Net方向)(7)
2022届软件技术专业毕业生就业岗位分析(.Net方向)(7)
124 0
2022届软件技术专业毕业生就业岗位分析(.Net方向)(7)

相关产品

  • 云迁移中心