argius note

プログラミング関連

多値について

もっと初歩的な立場から見ると、「配列や構造体のポインタで返せば良いのでは?」なのですが、

これができるのに、わざわざ多値を持ち込む「実用上の」理由は、性能だ。 valuesで返される多値はそれ自体はfirst classじゃない。 (各値はfirst classだけど、多値全体としてはそうじゃない)。多値は、それがvaluesで作られてからcontinutationに渡されるまでしか総体として存在しないのだ (立場によっては、全く存在しないと言っても良いだろう)。だから、処理系はvaluesで返される値をヒープアロケートする必要がない。レジスタに乗り切る分はレジスタで返してもいいし、 continuationへ値をスタック渡しする場合はスタックに積んで返しても効率が良いだろう。

Scheme:多値

を読んで、なるほどと思いました。
戻り値のためだけにポインタや参照を渡したり、配列や構造体を生成するのは、メモリの動的確保(ヒープアロケート)が発生しまって効率が悪いですよね。

参考資料