need_result 2
まじかんと雑記
http://magicant.txt-nifty.com/main/2007/06/re_need_result_.html
他の言語にはなさそうな機能だという点では興味深いが、実際にこれが役に立つかどうかは甚だ疑問。
役に立つ場面が多ければ、他の言語にも実装されるもんですからね。
他の言語に無い時点で役立ち度は低いのは確かだと思います。
シナリオ 1、副作用が無い関数なので、戻り値が使われないような使い方をされたらエラーにしたい場合。これをやるには、副作用がない全ての関数についていちいち assert need_result を記述しておく必要がある。これはかなり面倒だ。実際、多くのプログラマは assert need_result を記述することをサボる (あるいは単に忘れる) と思われる。
これは特に記述することを忘れても問題ないです。あくまで、関数の作成者が関数使用者に対してする親切ですので。
この副作用が無い関数であることを示す別案として、「pure」という予約語を用いて関数生成すると、関数呼び出し元が戻り値を必要しない呼び出しをエラーとし、また関数内で副作用がない関数以外は呼び出せない、というのも考えてます。erlangのような並列機構と絡めて色々と思案中です。
シナリオ 2、戻り値が要らないなら、返す値の計算はしない場合。現実的には、このような場合というのはかなり稀だと思われる。
稀でしょうね。あったとしても、コンパイラが最適化出来る範囲で消せば、それでいいのかもしれません。
もう一つのシナリオとして、戻り値が必要かどうかで処理を切り替える*1、というのも想定したのですが、これはあんまりやるとperlのコンテキストと同じような混乱*2が起こるかな、と思い、言いませんでした。
「ボツ構文」行きになりそうな気はしてます。