历史上,Visual Basic有着脚本和动态编程的基础,但是并没有被完全支持。例如,它能够通过迟绑定(即所谓的duck typing)来使用对象,但却没有能力确定他们——这样的语言特性被普遍认为是和脚本编程是不相配的。在Lang.NET的一个演示中,Paul Vick谈到如何把脚本重新带回进VB.
历史上,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示范了重写编辑器的行为来马上执行右键选中的高亮代码。