50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

Flink VS Spark

五分钟学大数据

flink spark 3月日更

NodeJS基础入门教程(1)-一文让你快速了解什么是NodeJS

AlbertYang

nodejs

APICloud多端开发 | 在线教育App模板源码讲解

YonBuilder低代码开发平台

软件开发 在线教育 移动开发 APP开发 APICloud

vue+typescript实现组件封装之button篇

小小

typescript Vue

盘点数字人民币试点地区 哪里既可申请开通又能领红包?

CECBC

数字人民币

百度AI人才培养课程0元报名倒计时

百度大脑

百度 AI 飞桨

从无到有实现音视频通讯

anyRTC开发者

ios android 音视频 WebRTC RTC

区块链重新定义支付结算,让行业更便捷高效

CECBC

移动支付

第七次作业

秦挺

寻找被遗忘的勇气(二十五)

Changing Lin

3月日更

Docker 教程(1)---Docker简介与安装

AlbertYang

Docker

「 视频云大赛 — 大咖驾到 」驱动下一代技术浪潮,我们更专注价值落地

阿里云CloudImagine

阿里云 音视频 视频处理

2021最新整理Java面试合集(1000道附答案解析)

比伯

Java 编程 架构 面试 程序人生

全文检索工具包Lucene入门教程

AlbertYang

lucene

Service Mesh框架选型对比分析:Linkerd、Envoy、Istio、Conduit

xcbeyond

Service Mesh 服务网格 3月日更

阿里P9在Github上分享的Java面试突击手册,凭借它,我拿下了阿里P7的offer!

Java架构之路

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

字节金三银四Java面试题库被泄露,GitHub连夜被下架

Java架构师迁哥

UDTS上线数据集成服务,汇聚多源数据帮助企业高效分析决策

UCloud技术

数据传输 数据集成

大咖云集!阿里达摩院领航大数据 + AI向量检索专场Meetup回顾(内含讲师PPT领取)

Proxima 技术社区

人工智能 大数据 阿里巴巴 搜索 向量检索

简单粗暴实现深色模式

小小

深色模式

比特币:21世纪的终极离岸银行

CECBC

比特币

为智能世界“高”歌:HEIGHT,五种风景,一个答案

脑极体

9种常用便捷的Java异常处理方法,帮你脱身繁琐

北游学Java

Java 异常 异常检测 异常处理

Hystrix 实战经验分享

vivo互联网技术

Java 服务器 熔断 Hystrix

使用组件的细节点

小小

rmtc交易所系统开发平台丨rmtc交易所源码设计

系统开发咨询1357O98O718

zookeeper的watch机制

大数据技术指南

大数据 zookeeper 3月日更

面试字节跳动定级2-2,拿32*16offer,P8大佬的面试教程给了我春天!

Java架构之路

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

什么样的技术能进入一线大厂?这份阿里、百度、腾讯等 20家Java岗招聘要求梳理报告,会给你答案;

Java架构之路

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

身份认证之多因素身份认证(MFA)

龙归科技

第三方登录 统一身份认证

搭建博客可能会用到的 Git 命令|学习笔记

彭宏豪95

学习 极客时间 笔记

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