就作用域而言,编译器和解释器有什么区别?
What is the difference between compiler and interpreter in terms of Scoping?
我们说编译器的范围是静态的,而解释器的范围是动态的,那么这里的范围这个词的意义是什么?为什么编译器是静态的,解释器是动态的?
We say that scope of compiler is static while scope of interpreter is dynamic
事实并非如此。一种语言是动态作用域还是静态作用域是语言的属性,而不是实现,并且完全有可能(并且很常见)为静态作用域语言编写解释器(或动态作用域语言的编译器)这很重要,但是动态作用域的语言完全不常见)。
what is the significance of the word Scope here
变量的作用域描述了在程序的哪些部分中变量名引用了该变量。因此,如果您在第 23 行定义了一个名为 x
的变量,并在第 42 行定义了另一个名为 x
的变量,然后您在程序中的某处引用了 x
,则作用域规则决定这是否引用在第 23、42 行或两者都没有定义的变量(在这种情况下,您通常会得到类似 "Variable x is not in scope" 的错误,具体取决于语言)。
动态作用域意味着函数 f
可以看到在调用 f
的其他函数中定义的任何变量。这是动态的,因为在没有 运行 的情况下,您无法确定(至少在一般情况下)f
(如果有)的哪个定义在程序中给定位置的范围内。所以 out-of-scope 错误必须是 运行 时间错误。
静态作用域(也称为词法作用域)意味着当且仅当变量在周围块中定义时,它才在作用域内。这是一个静态 属性,无需 运行 程序即可轻松检查(除非涉及其他动态功能,例如在 运行 时定义变量的能力),因此术语"static scope".
why is it static in case of compiler and dynamic in case of interpreter
不是。
我们说编译器的范围是静态的,而解释器的范围是动态的,那么这里的范围这个词的意义是什么?为什么编译器是静态的,解释器是动态的?
We say that scope of compiler is static while scope of interpreter is dynamic
事实并非如此。一种语言是动态作用域还是静态作用域是语言的属性,而不是实现,并且完全有可能(并且很常见)为静态作用域语言编写解释器(或动态作用域语言的编译器)这很重要,但是动态作用域的语言完全不常见)。
what is the significance of the word Scope here
变量的作用域描述了在程序的哪些部分中变量名引用了该变量。因此,如果您在第 23 行定义了一个名为 x
的变量,并在第 42 行定义了另一个名为 x
的变量,然后您在程序中的某处引用了 x
,则作用域规则决定这是否引用在第 23、42 行或两者都没有定义的变量(在这种情况下,您通常会得到类似 "Variable x is not in scope" 的错误,具体取决于语言)。
动态作用域意味着函数 f
可以看到在调用 f
的其他函数中定义的任何变量。这是动态的,因为在没有 运行 的情况下,您无法确定(至少在一般情况下)f
(如果有)的哪个定义在程序中给定位置的范围内。所以 out-of-scope 错误必须是 运行 时间错误。
静态作用域(也称为词法作用域)意味着当且仅当变量在周围块中定义时,它才在作用域内。这是一个静态 属性,无需 运行 程序即可轻松检查(除非涉及其他动态功能,例如在 运行 时定义变量的能力),因此术语"static scope".
why is it static in case of compiler and dynamic in case of interpreter
不是。