如果一个语言使用的策略支持编译器静态决定某个问题,那么我们说这个语言使用了一个静态(static)策略,或者说这个问题可以在编译时刻(compile time)决定。另一方面,一个只允许在运行程序的时候做出决定的策略被称为动态策略(dynamic policy),或者被认为需要在运行时刻(run time)做出决定。
比如说,动态类型语言:是指在运行期间才去做数据类型检查的语言。在用动态语言编程时,不用给变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来,如python。
所谓的动态类型语言,意思就是类型的检查是在运行时做的,比如如下代码是不是合法的要到运行时才判断(注意是运行时的类型判断):
def sum(a, b): return a + b
静态类型语言:与动态类型语言刚好相反,它的数据类型检查发生在在编译阶段,也就是说在写程序时要声明变量的数据类型。C/C++、C#、JAVA都是静态类型语言的典型代表
静态作用域与动态作用域
x的一个声明的作用域(scope)是指程序的一个区域,在其中对x的使用都指向这个声明。如果仅通过阅读程序就可以确定一个声明的作用域,那么这个语言使用的是静态作用域(static scope),或者说词法作用城(lexical scope)。否则,这个语言使用的是动态作用域(dynamic scope)。如果使用动态作用域,当程序运行时,同一个对x的使用会指向x的几个声明中的某一个。