提到脚本,脑海里马上闪过一大堆:Python,Perl,Ruby,PHP,JS,VBS,LUA。。。 不过你有没听说过,用经典的C++做脚本语言吗?先不多说,上个图。(先别纠结那个function,那仅仅是个宏而已,待会你明白了)

  或许你在想这一定是疯了,用世界上复杂的语言做脚本,写的人累不说,脚本引擎先累坏了。各种复杂的模板库,要边解释边运行,得有多强大的虚拟机才撑得住。

  好吧,那么我们退一步,不强求解释执行,回归到原始的编译后执行。———— 不过那还算脚本吗?

  编译速度

  事实上如今高性能的脚本都是先编译后运行的,大名鼎鼎的JavaScript V8引擎,号称速度快的LUA-Jit,以及众所周知的ActionScript。。。预先编译不仅能大幅提高运行速度,更重要的是能够提前发现脚本中显式的错误。

  但脚本中所谓的编译,和传统语言的编译,还是很大区别的。脚本的编译,不过是代码上的深度优化,很快可以完成。相比复杂了多的C++来说,似乎是望尘莫及的。提到C++的编译速度,大家的映象莫过于在VC里按下F5之后,看着输出框内一条一条的“Compiling...”缓缓出现。有时仅仅测试一个微小的修改,也要等上好几秒的时间。缓慢的编译速度备受煎熬,以至于简单的程序往往选择VB或C#这样可以快速调试的语言。

  对于庞大的MFC程序来说,缓慢的编译是理所当然的。但简单的小程序出现过长的编译时间,那一定是头文件引用的不合理了。事实上,使用预处理头文件的小程序,编译仅仅是一瞬间的,之后的各种停顿往往是IDE引起的。

  那么我们来测试下,不用IDE,仅用纯命令编译个C++小程序。我们使用VC6.0的编译器:CL.exe

  为了确保纯净的编译环境,我们把CL.exe必须依赖的文件复制到新建的文件夹里。对于VC6的版本,只要有如下5个文件,可以完成.cpp到.exe的编译了。

    CL.exe
      C1XX.DLL
      C2.DLL
      MSPDB60.DLL
    Link.exe

  打开cmd,设置好环境变量,对应到VC6的头目录和库目录

    SET INCLUDE=C:Program Files (x86)Microsoft Visual StudioVC98Include

    SET LIB=C:Program Files (x86)Microsoft Visual StudioVC98Lib

  可以调用命令编译了:

cl test.cpp

  一眨眼的工夫,编译和链接完成,生成了test.exe,一切正常。而这还是在没有使用预编译头的情况下编译的。

  由此可见,即使语言本身很复杂,但只要用它写的代码不复杂,编译还是非常快的。

  仔细想想也应如此。以如今的硬件配置,运行98年的编译器,编译一个才几行代码的程序,自然是一瞬间的。

  命令行编译简单的C++程序是如此的快速,利用这个优势,继续我们的脚本探索。。。