写点什么

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:331117
用户头像

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

关注

评论

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

”微博评论“的高性能高可用计算架构设计

Steven

架构实战营

建立合格的跨职能团队,你需要知道这些!

禅道项目管理

团队 合作共赢

【IT运维小知识】虚拟化vCenter是什么意思?有啥优势?

行云管家

手把手带你写一个 Vue3 的自定义指令

CRMEB

字节跳动亿级DAU客户端发布最佳实践

字节跳动终端技术

英特尔宋继强:秉持三个坚持,穿越技术周期,构建未来技术生态

科技新消息

专家推荐五个免费的网络安全工具

喀拉峻

网络安全 安全 渗透测试 渗透

行业视野 | ONES CEO 王颖奇对话极客公园张鹏

万事ONES

SaaS SaaS平台

元气部落盲盒小程序开发芒趣盲盒app开发

风行无疆

Python代码阅读(第66篇):两个列表的包含关系

Felix

Python Code 列表 阅读代码 Python初学者

大厂算法面试之leetcode精讲11剪枝&回溯

全栈潇晨

LeetCode 算法面试

dart系列之:数学什么的就是小意思,看我dart如何玩转它

程序那些事

flutter dart 程序那些事 11月日更

一页纸需求的应对方法 —— 五步法

CODING DevOps

业务价值 角色梳理 术语定义 主业务流程梳理 纲举目张

你有一份「写作跨年」邀请函请查收 | 28天写作计划

TGO鲲鹏会

写作 技术创作 28天写作 内容创作 热门活动

大厂算法面试之leetcode精讲12.堆

全栈潇晨

算法 LeetCode

react源码解析6.legacy模式和concurrent模式

buchila11

React React Hooks

【最全攻略】玩转2021LIGHT开发者云大会

恒生LIGHT云社区

技术 开发 行业 行业大会

看完这5个核心功能,你会明白低代码平台到底能解决什么问题!

J2PaaS低代码平台

低代码 低代码开发 低代码平台

高维数据世界|基于高维稀疏矩阵的潜在变量模型研究

索信达控股

算法 变量模型 模型介绍 高维数据

数据产品经理实战-指标体系搭建

第519区

数据产品经理 数据产品 指标体系 指标管理

ONES Automation 流程自动化解决方案

万事ONES

自动化 SaaS

Rust 元宇宙 8—— 脚本

Miracle

rust 脚本 元宇宙

Linux一学就会之Vim编辑器的使用和Xmanager工具的使用。

学神来啦

vim Linux centos 运维 ext4

混合云管理软件用哪个品牌好?咨询电话多少?

行云管家

新思科技BSIMM12报告显示开源、云、容器安全活动增长显著

InfoQ_434670063458

新思科技 软件安全 BSIMM

Java&Go三种HTTP客户端性能测试

FunTester

Java 性能测试 测试框架 Go 语言 FunTester

Rust 元宇宙 9 —— 库和序列化

Miracle

rust 元宇宙

从双十一的物流大战,看全球通信网络的低延迟优化

融云 RongCloud

音视频 通信 低延迟 全球通信

社交泛娱出海新引擎,融云「六化」能力助开发者轻装上阵

融云 RongCloud

游戏出海 出海社交 出海

react源码解析5.jsx&核心api

buchila11

React React Hooks

WICC 广州高峰对话:为开发者标注「航海地图」

融云 RongCloud

开发 游戏 社交 泛娱乐 出海

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