アカウント名:
パスワード:
今回のバージョンにはループ最適化に関する致命的なバグ [lucidimagination.com]があるそうです。
(重要な用途には用いないこと || 関連する最適化オプションを無効にすること) && 今後のアップデートを速やかに導入することをお薦めします。
Miyakawaさんの張ったリンク先には
> Don’t use Java 7 for anything (unless maybe you know you don’t have any loops in your java code)
って書いてありますね。ループのないコードなら OK ってことです。
Java 7 のループは if と goto で書きましょう。;-)
って書いてから「もしかして Java って goto なかったような?」と思ったら、ほんとにありませんね。使わないと気付かないもんだなぁ…
どうやったら loop が書けるんだろう?
末尾再帰で書きましょう。最適化でループで展開されるみたいなんで・・・あれ?
ところで、何でいまだに人間様が末尾再帰で書いてやらなきゃならないんですかね。人間が通常の再帰を末尾再帰に書き換えることができるなら、どうして機械にはそれができないんでしょうか。末尾再帰に書き換え不可能な再帰があるのは知ってますけど、そんなのはエラーにしても十分実用的ではないですか。だって計算量が指数関数的どころの騒ぎではないのに、アッカーマン関数なんてベンチマーク等の目的以外で実用的なプログラムに使いますか?
できますよ。CPS変換すれば再帰は全部末尾再帰になります。簡単です。ただし、非末尾再帰をCPS変換したものはスタック消費がヒープ消費に化けるだけなので節約になりませんが。
空間計算量O(n)な非末尾再帰をO(1)な末尾再帰に自動で書き換えるのは、trivialなケースを除いてはそう自明ではないような…(trivialなケースなら、CPS変換の後、念入りな依存性解析で何とかなりそうな)。 何とかならないケースでは、何と何をトレードするかについて、プログラムソースに現れないメタなコスト評価を人間がやってるように思います。それをソース上に記述できれば自動化できるんでしょうが、その意図を記述するには最初から末尾再帰で書くのが一番わかりやすくて楽なんじゃないかと。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
身近な人の偉大さは半減する -- あるアレゲ人
ループ最適化に関するバグ (スコア:5, 参考になる)
今回のバージョンにはループ最適化に関する致命的なバグ [lucidimagination.com]があるそうです。
(重要な用途には用いないこと || 関連する最適化オプションを無効にすること) && 今後のアップデートを速やかに導入することをお薦めします。
Re: (スコア:0)
Re: (スコア:1)
Miyakawaさんの張ったリンク先には
> Don’t use Java 7 for anything (unless maybe you know you don’t have any loops in your java code)
って書いてありますね。ループのないコードなら OK ってことです。
Java 7 のループは if と goto で書きましょう。;-)
Re: (スコア:1)
って書いてから「もしかして Java って goto なかったような?」と思ったら、ほんとにありませんね。使わないと気付かないもんだなぁ…
どうやったら loop が書けるんだろう?
Re: (スコア:1, おもしろおかしい)
末尾再帰で書きましょう。
最適化でループで展開されるみたいなんで・・・あれ?
Re: (スコア:0)
ところで、何でいまだに人間様が末尾再帰で書いてやらなきゃならないんですかね。
人間が通常の再帰を末尾再帰に書き換えることができるなら、どうして機械にはそれができないんでしょうか。
末尾再帰に書き換え不可能な再帰があるのは知ってますけど、そんなのはエラーにしても十分実用的ではないですか。だって計算量が指数関数的どころの騒ぎではないのに、アッカーマン関数なんてベンチマーク等の目的以外で実用的なプログラムに使いますか?
Re:ループ最適化に関するバグ (スコア:0)
できますよ。CPS変換すれば再帰は全部末尾再帰になります。簡単です。ただし、非末尾再帰をCPS変換したものはスタック消費がヒープ消費に化けるだけなので節約になりませんが。
空間計算量O(n)な非末尾再帰をO(1)な末尾再帰に自動で書き換えるのは、trivialなケースを除いてはそう自明ではないような…(trivialなケースなら、
CPS変換の後、念入りな依存性解析で何とかなりそうな)。 何とかならないケースでは、何と何をトレードするかについて、プログラムソースに現れないメタなコスト評価を人間がやってるように思います。それをソース上に記述できれば自動化できるんでしょうが、その意図を記述するには最初から末尾再帰で書くのが一番わかりやすくて楽なんじゃないかと。