質問: スタックトレースは、実行中の関数やオブジェクトにエラーが発生したらその関数を処理してくれるメモリ上のスタック?と呼ばれる部分で、 エラーがでた瞬間を書き写し、履歴として残すものだそうです。スタックが何をするのかは、垣間見えましたが**スタック**そのものが何なのかはよく分かりません。 メモリは、現実の世界で例えるならば作業を行う机ですが、スタックは何なのでしょうか。また、javascriptでスタックコールという単語も見かけますがこれの意味も教えてください。
回答: スタックというのは英語の訳そのままですが「積み上げ」の構造を意味するものだと思います。 机の上に積み上げられた本の山をイメージするとわかりやすいですが、積み上げられた本は上から取るしかできないので、最初に置いたものが、最後に取れる(FILO)ようなな構造です。 ※最後に置いてものが、最初に取れる(LIFO)ともいえます。 プログラムの世界ではこの構造のものがたくさんあります。例えば関数呼び出しは、ある関数の中で関数を呼び、さらにその中で関数を読んだ場合、関数が終了すると一つ前の関数に戻るので、スタック構造をしています。 コールスタックとはこの呼び出し元の関数の情報を積み上げたデータ構造だと思います。 ※スタックトレースは、積み上げられた関数がどの順に呼ばれたのか調べたものです。 もし自分で積み上げ式の本を扱うクラスを作るなら、スタックブックみたいなクラスを作ればわかりやすいですよね。 ちなみに、スタックと似た構造としてキューというのがあります。これは筒のイメージで、筒の一方から入ったもんが、逆側から順番に出てくる(FIFO)構造です。