NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

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

关注

评论

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

NFTScan 正式上线 Linea NFTScan 浏览器和 NFT API 数据服务

NFT Research

NFT\ NFTScan Linea

铜锁 SM2 算法性能优化实践(一)|综述

铜锁开源密码库

密码学 隐私保护 数据安全 密码学和算法 国密

赛桨PaddleScience v1.0正式版发布,飞桨科学计算能力全面升级!

飞桨PaddlePaddle

人工智能 百度 paddle AI 飞桨

基于 Orbit 的云原生应用交付基础原则与良好实践

CODING DevOps

解码 LangChain|用 LangChain 和 Milvus 从零搭建 LLM 应用

Zilliz

Milvus Zilliz AIGC langchain

活动回顾丨阿里云 Serverless 技术实战与创新广州站回放& PPT 下载

阿里巴巴云原生

阿里云 Serverless 云原生

人工智能驱动科学研究:ModelWhale 助力医疗领域科研范式改革

ModelWhale

人工智能 数据分析 数字化医疗 模型推理 AI for Science

PCB反复评审难题,终极解决办法有了?

华秋PCB

工具 PCB PCB设计 布线 器件选型

软件测试/测试开发丨学习笔记之 Python 函数

测试人

Python 程序员 软件测试 函数

为什么低代码只能掀起小浪花?了解低代码的得失与前景

这我可不懂

软件开发 低代码 JNPF

Nautlius Chain主网正式上线,模块Layer3时代正式开启

EOSdreamer111

对话网心科技李浩|携“边缘云+AI”之势,拓展算力业务场景落地

网心科技

「硬核」实操如何拥有一个自己的数字人模型

EquatorCoco

人工智能 AI 虚拟数字人

一文读懂React中的RSC是什么?

汽车之家客户端前端团队

RLHF如何赋能生成式AI

澳鹏Appen

大模型训练 大模型 生成式AI LLM RLHF

没有人能真正精通C++

互联网工科生

c++ 语言

HarmonyOS课程体验官招募(第四期),寻找乐于分享,精益求精的伙伴

HarmonyOS开发者

HarmonyOS

用Vue如何实现低代码开发平台?

高端章鱼哥

低代码 低代码开发 JNPF

阿里云斩获 4 项年度云原生优秀案例丨阿里云云原生 6 月动态

阿里巴巴云原生

阿里云 云原生

业务开发“银弹” ——低代码平台建设

互联网工科生

软件开发 低代码 业务开发

中台,真的是一场自欺欺人的骗局吗?

EquatorCoco

中台 中台架构

云原生微服务应用的平台工程实践

阿里巴巴云原生

阿里云 云原生

广州市番禺区委领导一行莅临和鲸科技考察交流

ModelWhale

人工智能 数据科学 产业创新 人才生态

我用ChatGPT润色的课题论文初体验|社区征文

爱技术的药学生

AI 论文写作 GPT 年中技术盘点

情景规划与财务建模,运行全面预算管理的新机制

智达方通

智达方通 全面预算管理 企业财务计划与分析 财务建模

用微服务架构推进企业数字化转型升级

力软低代码开发平台

开发者评价:Serverless 容器最值得推荐的能力是什么?

阿里巴巴云原生

阿里云 Serverless 容器 云原生

和鲸科技受邀参与 2023 中国大学生计算机设计大赛国赛评审

ModelWhale

人工智能 大数据 数据分析 高等教育 以赛促学

用极限网关实现 ES 容灾,简单!

极限实验室

ES 容灾 网关 功能测试

什么是从人类反馈中强化学习(RLHF)?

这我可不懂

ChatGPT LLM RLHF

Nautlius Chain主网正式上线,模块Layer3时代正式开启

股市老人

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