写点什么

Visual Basic 动态类型简史

  • 2010-01-21
  • 本文字数:1212 字

    阅读完需:约 4 分钟

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

2010-01-21 04:33954
用户头像

发布了 88 篇内容, 共 262.5 次阅读, 收获喜欢 8 次。

关注

评论

发布
暂无评论
发现更多内容

普通人如何站在时代风口学好AI?这是我看过最好的答案

华为云开发者联盟

AI 算法

为什么说容器的崛起预示着云原生时代到来?

华为云开发者联盟

容器 云原生

LeetCode题解:50. Pow(x, n),暴力法,JavaScript,详细注释

Lee Chen

算法 大前端 LeetCode

2020,国产数据库崭露峥嵘的发轫之年

墨天轮

数据库 阿里云 华为云 SQL优化 热门活动

阿里18道常见的MySQL面试题,含解析

Java架构师迁哥

我从高级开发者身上学到的19条编码原则

Java架构师迁哥

1分钟带你入门 React SCU、memo、pureCom

Leo

react.js 大前端 React

项目吐槽之需求分析一

Geek_XOXO

项目管理 pmp

MyBatis-技术专题-动态SQL

洛神灬殇

Java高并发编程的一本百科全书《Java高并发编程详解:多线程与架构设计》,把Java语言中最为晦涩的知识点都详解出来了!

Java架构之路

Java 程序员 架构 并发编程 编程语言

一周信创舆情观察(10.12~10.18)

统小信uos

不会java的人能不能读《Head First设计模式》?

Nydia

网易:Flink + Iceberg 数据湖探索与实践

Apache Flink

flink 数据湖

大数据上手实战!训练营“9营齐开”第二季限时免费报名啦

Apache Flink

大数据

1024!奈学教育致敬程序员3+2战略发布会重磅来袭

古月木易

程序员 奈学教育

架构师训练营 1 期 - 第五周 - 技术选型

三板斧

极客大学架构师训练营

架构师训练营第一周作业

爱码士

架构设计

华为云如何赋能无人车飞驰?从这群AI热血少年谈起

华为云开发者联盟

人工智能 无人驾驶

Spring 5.2.7和SpringBoot 2.3.3中文翻译发布啦!!!

青年IT男

spring springboot

程序员喜欢的 5 款最佳最牛代码比较工具

程序员生活志

编程 工具

项目吐槽之需求分析二

Geek_XOXO

项目管理 pmp 项目实战

MyBatis-技术专题-拦截器介绍

洛神灬殇

技术体系的构成

凌晞

技术 技术管理 研发体系

两个程序员老友的会面

Philips

敏捷开发

作为一名Java程序员,技术栈的广度深度都不够还想要高薪?请先把这些技术掌握再说。

Java架构之路

Java 程序员 架构 面试 编程语言

第五周学习代码技术选型总结

三板斧

极客大学架构师训练营

架构师训练营培训第一周总结

lakers

极客大学架构师训练营

想自己写框架?不会写Java注解可不行

Java架构师迁哥

【API进阶之路】研发需求突增3倍,测试团队集体闹离职

华为云开发者联盟

软件开发 开发 开发测试

极客时间架构师训练营第一周学习总结

爱码士

课程总结

了解HashMap数据结构,超详细!

程序员的时光

面试 hashmap HashMap底层原理

Visual Basic动态类型简史_.NET_Jonathan Allen_InfoQ精选文章