VBA是腳本語言嗎?
正好筆者有幾篇關于這個主題的討論,索性就再總結一下,希望給讀者朋友們一個更客觀的視角。
一、什么是腳本語言學術界將『為了縮短傳統的編寫-編譯-鏈接-運行(edit-compile-link-run)過程而創建的計算機編程語言』稱之為腳本語言(Script languages)。
其中編寫和運行不能省,也省不掉,那就只能在編譯和鏈接環節省。但腳本最終也是由機器執行,所以總有一個源碼到機器碼的過程,所以編譯還是有的,也省不掉的。所以說,產品沒有鏈接環節的編程語言,就是學術意義上的腳本語言。
二、有哪些常見的誤解?很多人,習慣將解釋機制的編程語言稱之為腳本語言,其實是不準確的。解釋機制,雖然普遍為腳本所采納,但并非腳本獨有。比如JAVA,它不僅有源碼到字節碼的虛擬機偽指令編譯過程,更有打包過程。比如C#/VB.NET,還有變態的二進制編譯機制。
更有甚者,按源碼存在的形態,發揮作用的方式來確定是否為腳本,顯然過于粗暴。比如,大家熟悉的VBA,網絡上能夠看得到的,幾乎都認為這是一種腳本語言。
三、為何VBA不算腳本語言?認為VBA是腳本的,大抵是因為它可以錄制宏,而且也無法脫離Office環境,運行時不需要編譯和鏈接。初看,的確像那么回事。畢竟宏語言就是腳本語言的重要分支,既然VBA至少是宏語言,那VBA是腳本語言,沒毛病啊。但事實上,VBA只是統一了Office的宏語言,也就是通過VBA的語法形式兼容原有宏功能,而Office真正的宏功能,依然被保留著,只是大家很少用了而已,相信用過的朋友是清楚的。
VBA采用了解釋機制,而且提供了強大的逐句解釋功能,所以運行時不需要編譯和鏈接,完全也是可以的。但并不意味著,VBA就沒有編譯和鏈接功能,相反編譯和鏈接是提升VBA性能中,最低門檻的方法。在早期的Office專業版中,微軟官方提供了VBA的編譯鏈接工具,不知道的朋友可關注BtOfficer相關文章,也可搜索相關主題。所以,VBA是擁有完整的編寫、編譯、鏈接和運行環節的傳統獨立開發工具。不能脫離Office環境的說法,就不攻自破了,不然VBA是如何授權給AutoCAD,WPS等一眾軟件商的呢?
VBA不脫離Office環境,主要還是因為便捷。大家都知道,Office從03之前的二進制格式,到現在的OpenXML格式,Office的VBA源碼始終是以復合文檔格式存儲的。而復合文檔中,比如Excel中包括工作簿/工作表/VBA工程加密,都僅僅是防止隨意修改,因此Office自帶的加密體系都很脆弱。很多人抱怨微軟為何不弄個強加密,提升Office用戶文件的安全性。對于Office而言,容易的編輯環境,是便捷的重要組成形式,提供強加密只會破壞這種便捷性,更何況這對Office本身的安全性并無影響。VBA以源碼形態存儲,并最終使用逐行解釋,就是在貫徹這一思想。
VBA不脫離Office環境,其次是因為定制的某些特性,需要上下文環境。比如在VBA中可以在工作表模塊中使用[a1]來代表A1單元格對象及其默認屬性,但是其他使用Office對象接口的開發工具,就不能這么干。VBA的代碼執行可以實時反饋到Office的操作UI上面,使得VBA代碼的編寫、調試和運行之間關系更加緊湊直接,沉浸式體驗非常好。這是脫離Office的開發工具,很難有的體會。
VBA不脫離Office環境,以閉源著稱的微軟,真的不知道開源的好處么?VBA以源碼形式存儲,和可有可無的加密,其實就是變相構建自己的開源生態。想想,為什么地球上有那么多圍繞VBA的生意?即便VBA已經比很多人都要老,自媒體時代,還是有大量圍繞VBA的話題?
總之,VBA兼容宏功能,具有腳本語言的特征。同時,VBA可以通過編譯鏈接成可執行文件,而脫離Office環境,是一款獨立開發工具。但是,因為微軟Office的產品定位,VBA又不得不回到源碼存儲,逐行解釋執行的獨有方式上來。這便是VBA本來的樣子!
更多論述,詳見:
1、居然還有不少人認為VB/VBA是腳本語言,偏見害人啊!
2、什么是腳本語言?為何VBA不算腳本語言?
歡迎關注BtOfficer(收藏、點贊、關注+轉發),更多精彩仍在繼續哦(專欄文章將更系統,更全面,但需要閣下支持哦),有嚴肅的技術,也有輕松的嘮嗑,更有便捷的工具,期待你的加入哦!