把腳本重新帶回進VB

字號:

歷,Visual Basic有著腳本和動態(tài)編程的基礎,但是并沒有被完全支持。例如,它能夠通過遲綁定(即所謂的duck typing)來使用對象,但卻沒有能力確定他們——這樣的語言特性被普遍認為是和腳本編程是不相配的。在Lang.NET的一個演示中,Paul Vick談到如何把腳本重新帶回進VB.
    他的第一個演示展示了一個使用完整Visual Basci引擎實現(xiàn)的提供了REPL接口的Excel原型。REPL,即“讀取-求值-打印-循環(huán)(Read-Evaluate-Print-Loop)”,是諸如Ruby、Python和Lisp這樣的動態(tài)語言的一個標準特性。腳本窗口是基于動態(tài)語言運行時(Dynamic Language Runtime)的,所以它也可以支持IronPython和JScript.
    Paul首先討論了VB編譯器的3個分層。在實現(xiàn)類似解析和代碼生成這樣傳統(tǒng)編譯器特性的核心(Core)服務的最上層,是項目(Project)服務。它處理了項目級的詳細信息,比如引用和資源。它也包括一個反編譯器,在Visual Studio IDE中被用來協(xié)助后臺編譯器實現(xiàn)增量改變。最外層的是工具/IDE服務,它包括了所有Visual Studio所需的特性,如代碼完成與糾錯。
    VB編譯器的核心服務的完整版本是由非托管(unmanaged)C++代碼編寫的。為了支持運行時編譯和遲綁定,由Visual Basic編寫的核心服務的部分版本也是存在的。
    未來版本的VB可能會包含適合運行時使用的完整版本的核心服務?;蛟S,它甚至會包含工具/IDE服務層,以允許開發(fā)人員創(chuàng)建一個類似VBA的東西出來。
    另外一個演示討論了VisualBasic.Editor和VisualBasic.Compiler命名空間。該演示展示了如何在一個WinForms應用程序中托管一個VB編輯器。這一編輯器還比較粗糙,但是它已經(jīng)能夠支持類似語法著色這樣的事情了。在這個演示中,Paul示范了重寫編輯器的行為來馬上執(zhí)行右鍵選中的高亮代碼。