写点什么

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

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

关注

评论

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

五一出行看科技,高速巡检无人机 AI 算法开启智慧新篇

极小新

人工智能 目标检测算法 视觉智能 智能巡检

YashanDB|Ubuntu 加载 C 驱动后 PHP 启动失败?原来是“库冲突”惹的祸

数据库砖家

数据库·

从Servlet到云原生:一文讲透Java Web容器的核心技术体系

AI时代的一滴水

tomcat 云原生 Java web

AI重构鞋服品牌「增长基因」:数据驱动的商品力革命已至

第七在线

构建多智能体安全信任体系:业内首个智能体可信互连技术ASL来了

科技热闻

YashanDB|Mybatis-Plus 无法识别 YashanDB?加一段配置就能解决

数据库砖家

数据库·

YashanDB |PHP 无法连接 YashanDB?ODBC 驱动“找不到”的锅怎么甩?

数据库砖家

数据库·

YashanDB |执行 SQL 报 YAS-02024 锁等待超时?可能是默认设置的问题

数据库砖家

数据库·

哈尔滨等保应用安全测评

黑龙江陆陆信息测评部

Aloudata Agent :基于 NoETL 明细语义层的分析决策智能体

Aloudata

数据分析 大模型 智能问数 智能归因 智能报告

白鲸开源与亚马逊云科技携手推动AI-Ready数据架构创新

白鲸开源

AWS 亚马逊 白鲸开源 WhaleStudio

YashanDB|YAS-00413 超时报错?其实是系统资源限制“卡脖子”了

数据库砖家

数据库·

BOE(京东方)发布行业首个可持续发展品牌“ONE”:以开放创新科技之力守护人类未来

爱极客侠

京东方

使用 gt-checksum 分析迁移对象

GreatSQL

python 实现消费者优先级队列

天翼云开发者社区

rython 堆队列算法

Kairos:AI Agent 时代的基础设施新范式,重塑全球算力网络

股市老人

基于 Amazon Nova 和 TEN 框架的实时音视频交互解决方案

亚马逊云科技 (Amazon Web Services)

AI算法 | 睡岗识别冠军方案解读(姿态估计)

极小新

人工智能 计算机视觉 算法竞赛 目标检测算法 人体姿态估计

从 Java 到 Go:面向对象的巨人与云原生的轻骑兵

京东科技开发者

八大年度奖项揭晓!2024 BSRC年度盛典沙龙圆满举办

百度安全

桌面日历工具有哪些?3个常用的任务管理软件盘点!

职场工具箱

项目管理 任务管理 在线白板 办公软件 日历应用程序

烟草行业信创迁移-企业综合管理平台上线运行

中烟创新

「产品功能授权」和「外部开发者授权」的差异

柯杰

授权

「Boli-职业发展助手」:技术人必备的智能职业规划与求职利器

Y11

找工作 简历 实习 校招 失业

开源鸿蒙,给机器人带来了什么?

脑极体

AI 操作系统

YashanDB |掉电后数据库启动报错 core dump?原来是 VMware 默认配置的“锅”!

数据库砖家

数据库·

YashanDB|关闭归档时报 YAS-02079?你可能忘了关闭“复制模式”

数据库砖家

数据库·

10.接口而非实现编程

杨充

字节推出 LiveCC,首个实时评论视频模型;AI 客户访谈初创 Listen Labs 融资 2700 万美元,红杉领投丨日报

声网

YashanDB|JDBC 插入慢?别忽略了“网络带宽”这个瓶颈!

数据库砖家

数据库·

Arthas sc(查看JVM已加载的类信息 )

刘大猫

人工智能 监控 Arthas 大模型 sc

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