历史上,Visual Basic 有着脚本和动态编程的基础,但是并没有被完全支持。例如,它能够通过迟绑定(即所谓的 duck typing)来使用对象,但却没有能力确定他们——这样的语言特性被普遍认为是和脚本编程是不相配的。在 Lang.NET 的一个演示中,Paul Vick 谈到如何把脚本重新带回进VB 。
他的第一个演示展示了一个使用完整Visual Basci 引擎实现的提供了REPL 接口的Excel 原型。REPL,即“读取- 求值- 打印- 循环(Read-Evaluate-Print-Loop)”,是诸如Ruby、Python 和Lisp 这样的动态语言的一个标准特性。脚本窗口是基于动态语言运行时(Dynamic Language Runtime)的,所以它也可以支持IronPython 和JScript。
Paul 首先讨论了 VB 编译器的 3 个分层。在实现类似解析和代码生成这样传统编译器特性的核心(Core)服务的最上层,是项目(Project)服务。它处理了项目级的详细信息,比如引用和资源。它也包括一个反编译器,在 Visual Studio IDE 中被用来协助后台编译器实现增量改变。最外层的是工具 /IDE 服务,它包括了所有 Visual Studio 所需的特性,如代码完成与纠错。
VB 编译器的核心服务的完整版本是由非托管(unmanaged)C++ 代码编写的。为了支持运行时编译和迟绑定,由 Visual Basic 编写的核心服务的部分版本也是存在的。
未来版本的 VB 可能会包含适合运行时使用的完整版本的核心服务。或许,它甚至会包含工具 /IDE 服务层,以允许开发人员创建一个类似 VBA 的东西出来。
另外一个演示讨论了 VisualBasic.Editor 和 VisualBasic.Compiler 命名空间。该演示展示了如何在一个 WinForms 应用程序中托管一个 VB 编辑器。这一编辑器还比较粗糙,但是它已经能够支持类似语法着色这样的事情了。在这个演示中,Paul 示范了重写编辑器的行为来马上执行右键选中的高亮代码。
这些特性并没有一个时间线或计划。当有更多的信息时,会发表到 Paul Vic 的博客上。
查看英文原文: Bringing Scripting back to VB
评论