동적 스코프
동적 스코프 언어
| 언어 | 비고 |
|---|---|
| Bash / Shell | 셸 스크립트 |
| Emacs Lisp | 기본 동작 (렉시컬 옵션 가능) |
| Perl | local 키워드 사용 시 |
| TeX | 문서 조판 언어 |
| 초기 Lisp | 구형 Lisp 방언들 |
Bash 예시
x=10
foo() {
echo $x
}
bar() {
local x=20
foo # 호출 시점의 x를 참조 → 20 출력
}
bar # 20
foo # 10
foo는 호출된 위치의 x 값을 참조합니다.
왜 렉시컬 스코프가 주류인가?
| 렉시컬 스코프 | 동적 스코프 |
|---|---|
| 코드만 보고 예측 가능 | 실행 흐름을 따라가야 예측 가능 |
| 디버깅 용이 | 디버깅 어려움 |
| 컴파일러 최적화 쉬움 | 최적화 어려움 |
| 클로저 구현 자연스러움 | 클로저 구현 복잡 |
요약
동적 스코프는 셸 스크립트, Emacs Lisp 정도에서 사용되고, JavaScript, Python, Java, C 등 대부분의 언어는 렉시컬 스코프를 채택했습니다.