パスワードを忘れた? アカウント作成
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

Java SE 7 リリース」記事へのコメント

  • 今回のバージョンにはループ最適化に関する致命的なバグ [lucidimagination.com]があるそうです。

    (重要な用途には用いないこと || 関連する最適化オプションを無効にすること) && 今後のアップデートを速やかに導入することをお薦めします。

    • by Anonymous Coward
      でもそのバグにあたらないコーティングをするならGoodです!
      • 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 が書けるんだろう?

          • Re: (スコア:1, おもしろおかしい)

            by Anonymous Coward

            末尾再帰で書きましょう。
            最適化でループで展開されるみたいなんで・・・あれ?

            • by Anonymous Coward on 2011年07月31日 15時18分 (#1995277)

              ところで、何でいまだに人間様が末尾再帰で書いてやらなきゃならないんですかね。
              人間が通常の再帰を末尾再帰に書き換えることができるなら、どうして機械にはそれができないんでしょうか。
              末尾再帰に書き換え不可能な再帰があるのは知ってますけど、そんなのはエラーにしても十分実用的ではないですか。だって計算量が指数関数的どころの騒ぎではないのに、アッカーマン関数なんてベンチマーク等の目的以外で実用的なプログラムに使いますか?

              親コメント
              • by Anonymous Coward
                そういうセマンティクスの書き換えが言語仕様的にものすごく難しそうなC言語でさえgccはやってる [fc2.com]みたいなので、単なる手抜きではないですかね。
              • by Anonymous Coward

                できますよ。CPS変換すれば再帰は全部末尾再帰になります。簡単です。ただし、非末尾再帰をCPS変換したものはスタック消費がヒープ消費に化けるだけなので節約になりませんが。

                空間計算量O(n)な非末尾再帰をO(1)な末尾再帰に自動で書き換えるのは、trivialなケースを除いてはそう自明ではないような…(trivialなケースなら、
                CPS変換の後、念入りな依存性解析で何とかなりそうな)。 何とかならないケースでは、何と何をトレードするかについて、プログラムソースに現れないメタなコスト評価を人間がやってるように思います。それをソース上に記述できれば自動化できるんでしょうが、その意図を記述するには最初から末尾再帰で書くのが一番わかりやすくて楽なんじゃないかと。

UNIXはシンプルである。必要なのはそのシンプルさを理解する素質だけである -- Dennis Ritchie

処理中...