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

null参照の考案は10億ドル単位の過ち?」記事へのコメント

  • by Anonymous Coward
    NULLがない場合は、何で初期化したらいいんでしょうか?

    # え?NULLがあっても、NULLなんかでは初期化しませんか。そうなんですか。
    • by Anonymous Coward

      私もその辺がよく分からないのですが、
      初期化されたか=保持されている値が有効か否かのフラグを
      アドレス値とは別に持たせるべきだったとでもいうのでしょうか?

      • by Anonymous Coward on 2009年03月05日 22時03分 (#1525716)
        初期化のために1bit犠牲にして、
        初期化状態では参照禁止、
        参照するためには有効な値を入れてください。
        使い終わったら再初期化して参照禁止にできます。

        というような感じになるのではないでしょうか。
        親コメント
        • 初期化のために1bit犠牲にして、

          そんな事をしたらアクセス出来るメモリが半分になってしまうか、ポインタを格納するのに2ワード必要になってしまいます。

          それよりポインタを作成した時に、中身が自動的にNULLの値になっている様な言語仕様にした方が良いかと。実際、Javaが似た様な事をしてます(Javaにはポインタ自体は無いけどオブジェクトのレファレンスが似た様な格好なので)。

          親コメント
          • by Anonymous Coward

            >アクセス出来るメモリが半分になってしまうか

            一番上じゃなく一番下のBITをフラグに使えばいいじゃん。
            (今時の大抵のCPUは)メモリのアライメントとかごにょごにょしてるから、N(2とか4とか)で割り切れないアドレスのメモリは必ず「割り切れるアドレスなデータの続き」として扱う傾向が強い。1byte単位でイテレートして舐めるときならともかく、遠くから名指しで飛び込まれるときは必ずNで割り切れるアドレスだということになり、普通のポインタは下の1bitなり2bitなりが遊ぶことになる。

            と、ruby(MRI)の解説の受け売りでした。4byte境界を前提とし、最下位BITが立っているものは小さいInt、最下位は寝てるけどその次が起きてる奴はSymbolの内部番号、に割り当ててるんだってね。もちろん両方寝てる奴は普通のObjectを参照。

            #これが出来ないくせに普通に性能出てるJRubyナニモノ?ていうか逆にいえばそれに時々負けるMRIって何?

            • by Anonymous Coward

              1byte単位でイテレートして舐めるときならともかく、

              ともかくじゃねーだろwww

              char *p = buff;

              while (*p++!='\0') {
              なんとか
              }

              みたいな処理は「ともかく」でごまかせるほどレアな処理だと思ったか?

              • by Anonymous Coward
                strcpyできないぉ… ('・ω・`)
        • by moca (33770) on 2009年03月06日 1時12分 (#1525824) 日記

          1bitなんて使わなくても
          0 = NULL
          1 = 未初期化
          それ以外 = 有効なポインタ
          みたいなのでいいじゃない。Win32APIにもINVALID_HANDLE_VALUEとかありますし。

          親コメント
        • by Anonymous Coward

          1bit犠牲にする意味は?
          そうするぐらいならNULLなら参照禁止
          でいいじゃない。

コンピュータは旧約聖書の神に似ている、規則は多く、慈悲は無い -- Joseph Campbell

処理中...