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(收藏、点赞、关注+转发),更多精彩仍在继续哦(专栏文章将更系统,更全面,但需要阁下支持哦),有严肃的技术,也有轻松的唠嗑,更有便捷的工具,期待你的加入哦!Copyright © 广州京杭网络科技有限公司 2005-2024 版权所有 粤ICP备16019765号
广州京杭网络科技有限公司 版权所有