汇聚知识碎片,解决技术难题,专注提供易语言源码资源,视频教程,等在线学习交流论坛
 
发新帖
楼主: 底筋面粉
查看: 1200|回复: 0

你真的知道什么是脚本吗?

[复制链接]
底筋面粉 发表于 2019-10-9 19:45:59 | 显示全部楼层
本帖最后由 底筋面粉 于 2020-3-30 13:21 编辑

脚本(Script)有2个最基本的特征:普遍为文本形式,通过程序解析运行

1、脚本主要是以文本的形式直接发布,即使以加密或打包的方式隐藏文本源代码,但实际运行时仍然需要释出源代码才能执行,或者虽然支持编译为字节码,但该语言大多数的应用程序都是以文本的方式发布。

2、脚本语言主要是由宿主程序(Host)在运行时调用,脚本语言不能独立编写应用,不能编写与宿主程序类型不同的应用。脚本语言调用的功能主要由宿主程序提供,脚本不能独立编写应用程序。

某些编程语言的标准支持库都是封装的VC++写的代码,自己都不能实现自己的标准支持库。大多时候都要靠VC++之类其他的第三方编程语言封装出宿主形式的功能函数,然后寄生在宿主身上。说简单一点,要知道一个语言是不是脚本语言,关键不是看他“怎么做”!而是看他能“做什么”?!

这个意思也并不是非常极端的要自己从零开始实现一切,很多新手总是觉得搞个语言一定要自己能实现自己,包括操作系统的接口函数都不能用,一定要自己从零开始写操作系统才牛逼。如果把编程语言比作一个人,如果你不需要父母能自己把自己生出来,并不就能证明你有多牛逼。但是你被生出来了,长大了,你还不能自己做饭给自己吃,这就是个问题了。所以关键不是你怎么被生出来,而是你被生出来以后你能干什么,能不能自己做饭给自己吃。

很多人把“解释语言”、或者有虚拟机的语言理解为脚本语言,这是完全错误的,例如Java、C#是解释语言,但是他们都可以独立编写应用程序,并且主要的发布方式不是发布文本源代码,而是编译为字节码,或者独立的执行程序。所以他们并不是脚本语言。

再例如C语言、C++虽然是原生编译语言,他是也可以作为脚本语言使用,典型的例如我们常用的TCC,就是使用C语言作为脚本语言来使用,可见“脚本”并不是一种语言分类,而是一种发布形式。我们一般说某某语言是一种脚本语言,更多时候是在说他的编写、发布方式主要是脚本形式。虽然每种语言理论上都可以作为“脚本”来发布,但是注意我前面多次提到的“主要”这个词,例如C语言主要的发布形式不是“脚本”,所以不会把C语言叫“脚本语言”。

脚本语言只能受制于宿主应用程序的类型,例如你写PHP,那么你不可能用PHP写出一个php_cgi.exe, 而只能让你的脚本运行于php_cgi.exe这样的宿主应用环境下,你能看到的大多数PHP应用程序都是以文本源代码的方式发布。 虽然aardio也像PHP一样可以用来写网站,但是我们可以用 aardio 开发一个 php_cgi.exe, 我们不仅仅可以用aardio来写网站,我们还可以用 aardio 写HTTP服务器,写FastCGI 服务端,写各种各样类型的桌面应用程序,包括开发各种宿主应用程序( 拿其他编程语言来当脚本玩耍 )。

一些人把Python叫脚本语言,也有一些人在网上争论“Python到底是不是脚本”这个东西。Python虽然也可以编译为字节码,他主要的发布形式也是发布文本格式的py源代码,并且依赖外部安装的Python.exe来运行Python代码,但是Python可以独立写出各种类型的应用,甚至是OpenStack这样大型的系统程序。所以虽然Python通常是以脚本的形式发布应用程序,但是他在语言特性上来说如果你硬要把他称为“脚本”,那也是非常强大的一种“脚本”。

脚本语言并不能编写EXE文件这样的独立应用程序,并且他在运行时需要一个外部的宿主EXE文件来执行脚本,有些脚本软件的打包程序可以把EXE文件以及脚本代码打包并捆绑为一个独立的EXE文件,但是他在运行时仍然会释放出脚本的文本形式的源代码来运行,另外脚本中调用的主要功能函数都是由宿主EXE提供的,脚本通常不能独立的调用系统接口,独立的“创造”更多扩展功能的函数。Javascript一般被认为是一种典型的脚本语言,他最初依附于浏览器,而JS脚本最初更多的是被用来调用宿主程序的各种接口,并且他开发的应用类型局限于网页脚本,但现在有了Node.Js 这样的东西,越搞越像Python了,而且还有Electron这样的方案可以用来写桌面软件,但实际上这种桌面软件最后都要依附于Electron.exe以及里面的浏览器运行环境,而且他发布打包的asar格式,实际上还是以文本格式发布Javascript源代码(虽然是打了一个包),所以他仍然更像一个浏览器壳子下运行的脚本打包器,即使是很简单的一些需求,如果Electron这个宿主里没有提供接口,那只能干巴巴的等着Electron升级,而不能直接去调用操作系统的接口,这是脚本语言的一大限制。

你真的知道什么是脚本吗?

快速回复 返回顶部 返回列表