動的スコープとは? わかりやすく解説

動的スコープ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/03/24 07:06 UTC 版)

動的スコープダイナミックスコープ英語: dynamic scope)とは、プログラミング言語におけるスコープの一種である。

動的スコープは、実行時の親子関係の子側(呼び出された側)から親側(呼び出し側)のスコープを参照できるスコープである。このとき参照されるのは、親子関係を親側に辿り、より近いブロックにある変数である。以下の疑似コードでは:

A {
  print x
}

B {
  var x
  call A  // Aの中からxを参照することができる
}

C {
  var y
  call A  // Aの中からxを参照することはできない
}

ブロックBから呼び出されたブロックAは、ブロックBで定義されている変数xを参照できる。一方、ブロックCから呼び出されたブロックAは、ブロックBで定義されている変数xは参照できない。

動的スコープは強力な反面、ミスを招きやすいため使用に注意が必要である。例えば以下の疑似コードでは呼び出し元ブロックによって変数の値が変化することを示している。

var x = 123

A {
  var x = 456
  call C  // 456と出力される
}

B {
  call C  // 123と出力される
}

C {
  print x  // 呼び出し元によって x の値が変わる
}

動的スコープの例としては初期のLISPEmacs LispLOGOPerl(「local」宣言した変数)、Bash(関数内で「local」宣言した変数)などがある。

エクステントとの関係

以上のようにして「動的スコープ」というものの振舞として捉えられているものには、理論的には、スコープとエクステント(生存期間、寿命)との混乱がある。Common Lisp the Language, 2nd Edition では、本来正確には「indefinite scope and dynamic extent」といったように表現されるべきものであって「The term dynamic scope is a misnomer.」といったように書かれている。[1]

静的スコープとの関係

観点によっては、動的スコープは「静的スコープのバグのある実装」のようにも見えなくもない。ネストした関数などにおいて、内側から外側に出ない範囲で、かつ呼び出し階層の途中で名前を横取りされていなければ、静的スコープのように構文的に外側にある変数にアクセスできることになる。

1960年の LISP I の実装が動的スコープだったことについて、ジョン・マッカーシーは後に1979年にそれを振り返って「現代の用語では、静的コープが望まれていたのに対し、動的コープが得られた。(In modern terminology, lexical scoping was wanted, and dynamic scoping was obtained.)」と書いている[2]

参考文献

  • 西尾泰和『コーディングを支える技術 ~成り立ちから学ぶプログラミング作法』

  1. ^ 3. Scope and Extent”. cs.cmu.edu. 2024年4月7日閲覧。
  2. ^ From LISP 1 to LISP 1.5”. www-formal.stanford.edu. 2024年4月7日閲覧。

関連項目


動的スコープ (dynamic scope)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/11/26 23:22 UTC 版)

スコープ (プログラミング)」の記事における「動的スコープ (dynamic scope)」の解説

実行時動的な呼出親子関係によって導入されるスコープ関数呼び出し元で展開されたかのようなスコープ構成される実行時に名前による解決必要なため、普通にコンパイルしてこれを実現するのは面倒である。

※この「動的スコープ (dynamic scope)」の解説は、「スコープ (プログラミング)」の解説の一部です。
「動的スコープ (dynamic scope)」を含む「スコープ (プログラミング)」の記事については、「スコープ (プログラミング)」の概要を参照ください。

ウィキペディア小見出し辞書の「動的スコープ」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「動的スコープ」の関連用語

動的スコープのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



動的スコープのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの動的スコープ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのスコープ (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS