分享

问答集锦:什么是脚本语言?

 我是皮卡丘 2022-01-15

上一篇文章里,我们介绍了编译型语言与解释型语言的主要区别,即怎样把我们编写的源代码文件转换成计算机能读懂的0101这种机器码。编译型语言的做法是“一次性翻译”,生成一个新的完全由0101构成的文件并执行;而解释型语言则是不创建任何新文件,在运行程序时由“解释器”现场翻译,读一行源代码就翻译并执行一行。此外还有一种处于二者之间的方式,叫做“半编译半解释”型语言,具体细节不再赘述。

为了更直观的看到二者的区别,我给大家举两个例子。首先看一下编译型语言的代表:C 。下面左上方就是C语言编写的源代码文件,保存到D盘vbademo目录下,并命名为  test.c  。但是这个文件里使用的并不是机器语言,所以无法被计算机执行。因此我们需要运行一个C语言编译器,使之对test.c 里面的源代码进行翻译,最终把翻译出来的机器语言版本都存放到一个新的文件中,并把这个新的文件命名为 test.exe 。而这个exe文件,就可以直接双击运行。

图片

 

接下来看一个解释型语言的例子,我用了Python(其实严格的说,Python属于半编译半解释型,它会把源代码文件先翻译成pyc文件,然后执行。不过这里为了方便阐释,我们就假设它是纯粹的解释型语言)。左图是使用Python写的源代码,保存为 test.py 文件。然后我们不必再像C语言那样费力的编译它,而是直接在Windows的命令行窗口中运行一个名为Python的解释器软件,并告诉这个软件去翻译执行 test.py 这个文件。于是,Python就读取test.py ,读一句翻译一句,并交给计算机执行,最终运行完毕。

 

图片

现在回到VBA上面来,给大家提一个问题:VBA也是一个解释型的语言,但是我们能像运行Python程序那样,直接在Windows中运行VBA写的程序吗?比如在命令行窗口里面敲入:  VBA  test.xlsm?

图片

显然不可以,因为我们知道,VBA只能在Excel中运行,而不能直接在Windows这个操作系统中运行。相比之下,Python写出来的程序却是独立于任何应用软件,可以直接在操作系统中独立运行的。因此,我们称VBA这种语言为“依赖于宿主系统的脚本语言”。“依赖于宿主”的意思,是说它必须寄宿在某个软件中才能运行;而“脚本”的意思,则是说该语言的设计初衷,是帮助我们方便管理宿主软件、提高对宿主软件的使用效率,而不是像传统的C、Java等语言那样以开发完全独立的软件为目标。

于是我们终于看到了“脚本语言”这个概念。首先说明一点,计算机历史发展到今天,“脚本语言”与普通语言之间的差别已经越来越小,从语法等等角度看已经没有什么区别了,我想也许在不久的将来,“脚本语言”这个概念本身也会消失吧。所以我们下面讲的,都是基于一些传统的“遗留观念”做出的区分。

最常见的脚本语言,是为了方便我们管理“操作系统”这个大软件而设计的。系统管理员经常要遇到大量的重复操作,比如,鉴于这几天比特币勒索病毒肆虐,我们需要把D盘上各个文件夹中所有修改日期在2017年5月1日以后的文件都查找出来以便检查,该怎么办?

如果我们还是手动打开每个目录、按日期排序再用逐个复制文件名,大家可以自己想象一下需要多少时间。但是如果我们能够做一个小程序,先用DIR命令(这是从早年Dos系统就一直遗留至今的windows命令,作用是列示全部文件名)列示出D盘上所有文件信息,然后再从这些信息中自动筛选出修改日期符合条件的文件,是不是就可以省去很多时间了呢?

好,如果大家使用的是win7以上的windows,那么可以打开windows系统菜单——“附件”——“Windows Power Shell”这个工具,然后在命令行窗口中输入这个命令:  

dir -r d:\ | ? {$_.lastwritetime -gt '5/1/17’ -AND $_.lastwritetime -lt '5/13/17’}

这就是一个脚本语言程序,使用的是windows的powershell语言,意思就是说,将D盘上所有修改日期在2017年5月1日到2017年5月13日之间的文件都列示出来,包括所有子文件夹下的内容。这里面 gt 就是“Greater Than”,相当于vba的 >=,lt就是 <=,AND我想大家都认识了。

如果大家的系统安装了powershell,那么只要这一行代码,就可以把D盘所有符合条件的文件全部列出来供你检查。比如下面就是我电脑上运行的部分结果(将目录名和文件名涂成黑色是为了避免泄露系统配置信息,从而招致黑客针对性攻击。并非是这些文件含有不可描述之内容):

图片

 

这就是脚本语言的初始含义,即通过一些简单的程序语句(比如上面的AND等),将操作系统的命令(比如DIR、Delete等)组合起来深化应用,从而实现那些“规则明确、机械重复”的日常操作。

显然,这种脚本语言并不需要十分复杂、严谨的语法设计,只要能够应付简单的判断、循环和字符串解析等就可以满足系统操作管理的需要。这就是为什么很多人一提起“脚本语言”就会觉得没有C、Java等传统语言那么专业的原因。

不过最近这些年,由于脚本语言的应用范围已经远远超出了管理操作系统的范畴,所以现代脚本语言都重新经过了良好的设计,其严谨性、优雅性完全足以媲美各种传统语言。比如很多同学追问的Python,也被大多数人归类为脚本语言。因此我在前面说,脚本语言与传统语言的界限很可能会消失。

搞清楚脚本语言的概念,我们下次就介绍一下具体几种脚本语言的历史,包括JavaScript、VBScript等等。

(未完待续)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多