BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Visual Basic动态类型简史

| 作者 Jonathan Allen 关注 612 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2010年1月22日. 估计阅读时间: 4 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Visual Basic一直徘徊在静态类型与动态类型之间。一开始,VB支持晚绑定(late binding),也就是现在大家所熟知的”鸭子类型(duck typing)“,这意味着VB并不要求显式声明变量类型,甚至是局部变量。但如果声明了变量类型,VB就会采取早绑定(early binding)模式,同时进行运行时类型检查并提供更好的性能。

Visual Basic 4中引入了COM,随之而来的是VB提供了其他大多数语言都不具备的众多特性。在声明变量类型时,编译器会隐式参照接口而非具体的类。这并非总是那么显而易见,因为每个类都会隐式定义一个同名的接口。实际效果就是在这种模式下,任何类都可以显式实现其他类的接口,但类与类之间是不能直接继承的。虽然VB开发者对缺少继承这一特性一直耿耿于怀,但Google最近发布的Go语言也是如此。

Visual Basic 7(即VB.NET)舍弃了无限接口风格的多态。这次综合采取了继承与显式定义接口(得益于Java的推进)这两种手段。VB还增加了Option Strict指令,这样编译器就会要求显式的类型声明与转换。

就在VB向静态类型大踏步前进的同时,这个世界发生了翻天覆地的变化,动态语言开始流行,比如Python和Ruby等。还需要再来两个VB版本以适应这种变化。

VB 9在动态类型领域提出了几个重要特性。首当其冲就是大获成功的XML Literal和XML Comprehension。其语法首先是为Haskell编程语言提出的,后来C#实现了其原型。VB是第二种将其应用到产品中的语言。第一种语言是ECMAScript for XML,于2004年标准化。

顺便提一下,XML Comprehension并非是VB首次为特定类型增加的特殊语法。VB还有!操作符,在3.0到6.0中一直用于访问数据库。尽管支持字典风格的查找,但最终还是被历史遗弃了,如下示例:

firstName = recordset!FirstName
lastName = recordset!LastName

Visual Basic 9的一些特性可以让开发者在运行时通过名字来创建对象和访问属性而无需使用反射API,比如:

className = “Customer”
memberName = “FirstName”
x = New (className)
x.(memberName) = “Fred”

从VB 10开始,VB真正成为了动态语言。直到现在,动态特性还仅仅局限在类型的使用上。事实上,直到VB增加了对DLR的支持后我们才可以创建新的类型或是改变已有的类型。凭借Visual Basic 10 Beta,开发者可以创建自己的对象模型,包括像JavaScript等语言所使用的原型风格的对象。

展望未来,来自微软的Lucian Wischik说他们正在扩展XML Comprehension语法。目前打算支持Silverlight XAML以及HTML DOM,不仅如此,还能适用于任何tree风格的数据结构。

值得注意的是,Visual Basic的小兄弟VBScript也独具特色。与大多数解释性语言类似,VBScript也可以执行字符串中的代码。这些函数(如Eval和Execute)经常被VB 6应用所使用(在需要使用动态功能的时候)。未来,我们希望IronPython或是IronRuby能担此重任。

查看英文原文:A Short History of Dynamic Typing in Visual Basic

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

感觉回归到vbs的感觉了... by yibing zhang

感觉回归到vbs的感觉了...
不知道现在还有网页是用vbs作为脚本了吗?

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT