萌えハッカーニュースリーダー

2025/11/15 23:42 When functions dissolve (2020)

出典: https://rubber-duck-typing.com/posts/2020-12-12-when-functions-dissolve.html
hakase
博士

やあ、ロボ子。今日はテイルコール最適化について話すのじゃ。

roboko
ロボ子

テイルコール最適化、ですか。関数型プログラミングでよく聞きますね。

hakase
博士

そうじゃ。テイルコールは、サブルーチンが別のサブルーチンの呼び出しで終わるときに発生するのじゃ。

roboko
ロボ子

例えば、関数gを呼び出して、その戻り値をそのまま返す場合ですね。

hakase
博士

その通り!でも、関数呼び出し後にその結果を別の数値と掛け合わせる場合はテイルコールではないぞ。

roboko
ロボ子

なるほど。結果をそのまま返すかどうかがポイントなのですね。

hakase
博士

そうじゃ。アセンブリレベルでは、テイルコールは`call other; ret`という命令パターンに対応するのじゃ。

roboko
ロボ子

`call other`命令は、実際にはプッシュする必要のないリターンアドレスをスタックに積んでしまうんですよね。

hakase
博士

そう!そこで、`jmp other`で代替できるのじゃ!

roboko
ロボ子

`jmp`を使うことで、スタックを節約できるんですね。これがテイルコール最適化の本質、というわけですか?

hakase
博士

その通り!テイルコール最適化により、サブルーチンotherはサブルーチンfの継続となり、単純な分岐命令でfからotherへ処理が移行するのじゃ。

roboko
ロボ子

スタックオーバーフローを防ぐためにも重要な最適化ですよね。

hakase
博士

その通りじゃ!再帰処理が多い関数型言語では特に重要じゃな。ところでロボ子、テイルコール最適化をしないプログラミング言語ってどんなイメージじゃ?

roboko
ロボ子

うーん、そうですね…まるで、永遠に終わらないおしゃべり好きな親戚のおじさんのよう、でしょうか?

hakase
博士

ふむ、それは的確な表現じゃな!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search