编译型与解释型语言

编程语言通常分为以下两类之一:

编译型与解释型语言定义

语言 定义
编译型 输入的代码在保存为可执行文件之前被缩减为一组特定于机器的指令。
解释型 代码以输入的相同格式保存。

编译型程序通常比解释型程序运行更快,因为解释型程序必须在运行时缩减为机器指令。但是,使用解释型语言可以做到编译型语言无法做到的事情。例如,解释型程序可以在运行时通过添加或更改函数来修改自身。在解释型环境中开发应用程序通常也更容易,因为不必每次想测试一小段代码时都重新编译应用程序。

那么,DScript 是编译型还是解释型?实际上,DScript 两者兼具。当在 DScript 中输入定义时,它们会立即被缩减为一组基本原语。如果输入

x:=2+3

DScript 将其缩减为

_DEF(x,_ADD(2,3))

输入的原始代码会被丢弃,只保存这个简化后的代码。当打开已保存的应用程序并查看其节点定义时,DScript 会反编译简化后的代码,生成与最初输入的代码类似的呈现形式。

当执行应用程序时,DScript 在运行时解释缩减后的代码。因此,DScript 部分是解释型语言。但是,代码仅在首次执行时被解释。此后每次执行的都是编译后的代码。

例如,考虑以下循环:

for(var n=0; n<1000; n++)   total+=n;

在执行此代码时,每个单独的表达式被求值 1000 次。但是,DScript 仅在第一次迭代时解释代码,其余 999 次迭代使用编译后的代码。由于程序消耗的几乎所有 CPU 时间都用在循环内部,这种执行策略在保持解释型语言灵活性的同时显著提高了性能。