今天的主流编程语言主要使用动态还是静态(词法)作用域?
Do mainstream programming languages today mostly use dynamic or static(lexical) scope?
我已经阅读了 this 问题,我想我已经理解了投票最多的答案,但他说
since basically every programming language in wide use today uses
lexical scoping
我也是从 coursera programming language 那里听说的,但这里有一个简单的 C 代码:
#include <stdio.h>
int x = 1;
void fun(){
printf("%d\n", x);
}
void dummy1(){
x = 2;
fun();
}
void dummy2(){
x = 3;
fun();
}
int main(){
x = 4;
fun();
dummy1();
dummy2();
return 0;
}
输出:
4
2
3
C++ 具有完全相同的行为,所以我认为 C 和 C++ 是动态作用域语言,对吗?大多数编程语言都使用静态作用域是真的吗?
您拥有的不是动态范围。您没有引入任何新变量,而是使用相同的全局变量。如果 C 和 C++ 有动态作用域那么这个(注意每个 x
是一个新变量):
#include <stdio.h>
int x = 1;
void fun(){
printf("%d\n", x);
}
void dummy1(){
int x = 2;
fun();
}
void dummy2(){
int x = 3;
fun();
}
int main(){
int x = 4;
fun();
dummy1();
dummy2();
return 0;
}
会输出
4
2
3
而是 it outputs
1
1
1
因为 fun()
总是使用初始化为 1 的相同全局 x
。这是因为 C 和 C++ 使用静态词法范围。
我已经阅读了 this 问题,我想我已经理解了投票最多的答案,但他说
since basically every programming language in wide use today uses lexical scoping
我也是从 coursera programming language 那里听说的,但这里有一个简单的 C 代码:
#include <stdio.h>
int x = 1;
void fun(){
printf("%d\n", x);
}
void dummy1(){
x = 2;
fun();
}
void dummy2(){
x = 3;
fun();
}
int main(){
x = 4;
fun();
dummy1();
dummy2();
return 0;
}
输出:
4
2
3
C++ 具有完全相同的行为,所以我认为 C 和 C++ 是动态作用域语言,对吗?大多数编程语言都使用静态作用域是真的吗?
您拥有的不是动态范围。您没有引入任何新变量,而是使用相同的全局变量。如果 C 和 C++ 有动态作用域那么这个(注意每个 x
是一个新变量):
#include <stdio.h>
int x = 1;
void fun(){
printf("%d\n", x);
}
void dummy1(){
int x = 2;
fun();
}
void dummy2(){
int x = 3;
fun();
}
int main(){
int x = 4;
fun();
dummy1();
dummy2();
return 0;
}
会输出
4
2
3
而是 it outputs
1
1
1
因为 fun()
总是使用初始化为 1 的相同全局 x
。这是因为 C 和 C++ 使用静态词法范围。