写点什么

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

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

关注

评论

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

BeeWorks内网im即时通讯,安全的企业内部沟通工具

BeeWorks

IM 即时通讯IM 私有化部署 局域网视频软件

Excel百万数据如何快速导入?

不在线第一只蜗牛

Excel

模型即产品?从应用角度看AI产品发展趋势

秃头小帅oi

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(3)

HarmonyOS SDK

harmoyos

小猫在流浪:城市灯火下的无声挽歌

花十君

产品 流浪猫 关爱流浪动物

CAD动态块编辑设置参数显示颜色方法

极客天地

CAD编辑图块属性对话框不见了

极客天地

什么时候您需要升级SD-WAN解决方案?11个预警提示!

Ogcloud

SD-WAN组网 SD-WAN厂商 sd-wan专线 SD-WAN厂家

Kyutai 推出 Moshi 语音模型微调工具包;语音智能体平台 Vapi 2.0 上线,已提供 4400 万通电话服务丨日报

RTE开发者社区

故障定位系列-1-Web应用接口级故障如何定位

乘云数字DataBuff

运维 故障定位 智能运维 运维监控

NineData云原生智能数据管理平台新功能发布|2025年3月版

NineData

智能体爆发元年,谁在“无人区”绘制地形图?

脑极体

AI

AI 网关代理 LLMs 最佳实践

阿里巴巴云原生

阿里云 云原生 云原生AI网关

【解决方案】多租户技术架构设计入门(一)

量贩潮汐·WholesaleTide

架构 多租户

函数计算支持热门 MCP Server 一键部署

阿里巴巴云原生

阿里云 Serverless 云原生 函数计算

Apache Doris 2.1.9 版本正式发布

SelectDB

数据库 大数据 数据仓库 倒排索引 湖仓一体

SD-WAN能为医疗信息化升级提供哪些帮助?

Ogcloud

SD-WAN SD-WAN组网 SD-WAN厂商 sd-wan专线 SD-WAN厂家

【解决方案】多租户技术架构设计入门(二)

量贩潮汐·WholesaleTide

数据库 多租户

首批!天翼云息壤智算一体机顺利通过信通院三项测试!

天翼云开发者社区

人工智能 云计算 智算一体机

BOE(京东方)打造东北首个沉浸式数字艺术体验空间 科技解码文明释放数字文旅想象力

爱极客侠

如何利用科学的预算管理为企业释放更多价值

智达方通

数字化转型 全面预算管理 财务管理 财务规划

Centos系统云主机中nvme盘不可用解决方法

天翼云开发者社区

云主机

东京 Voice AI Agent 工作坊!1 小时让你的 AI 能听能说

RTE开发者社区

卫浴“家电化”:一场科技驱动洗牌赛拉开序幕

Alter

DialogHub上线OpenHarmony开源社区,高效开发鸿蒙应用弹窗

HarmonyOS开发者

CAD裁剪块方法

极客天地

全彩LED大屏幕亮度过高的影响以及如何调整?

Dylan

行业 LED显示屏 全彩LED显示屏 户外LED显示屏 led显示屏厂家

线性判别分析(LDA):降维与分类的完美结合

不在线第一只蜗牛

机器学习

Python + 腾讯云,多页PDF发票识别一键搞定!

程序员晚枫

开源

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