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

ZDNetのポインタ解説記事で勘違い」記事へのコメント

  • by Anonymous Coward
    ダメなライターや、ザルなチェック体制は別に珍しくないが
    指摘されても問題が何か理解出来ていない編集にはビックリだな

    • Re: (スコア:2, 興味深い)

      by Anonymous Coward
      私が驚いたのは、筆者がIBMのチーフエンジニアとして執筆や講演にご活躍されていることですね。
      自分でプログラミングすることなんか全く無いんでしょうね。
      • Re: (スコア:1, すばらしい洞察)

        by Anonymous Coward
        いや、ポインタが理解できてなくても、適切な言語を選べば、動くプログラムを書けるってことで勇気づけられたよ。

        ポインタがいまいち理解できない人には朗報だ。
        • Re: (スコア:0, すばらしい洞察)

          by Anonymous Coward
          >ポインタがいまいち理解できない
          それで正しいと思います。
          Cのポインタは、
          - スカラ値への参照
          - 配列への参照
          - 動的オブジェクトの所有権管理
          - 反復子
          これら全然違う概念を一個で実現しようとする、そもそも無茶なキメラですよ。
          私はC++使いなんですが、C++なら、状況によって参照やスマートポインタや反復子を使い分けるところです。
          理解しようとするとかえって遠回りだと思います。
          • Re: (スコア:1, すばらしい洞察)

            んんー?あんたホントにC++使い?

            >動的オブジェクトの所有権管理
            CもC++もそんなことはやってくれないよ?
            所有権はプログラマが自分で管理するか管理するためのコードを書く。これ基本。でないとメモリリークし放題。

            んとなー?抽象度の高い方から理解しようとするから理解できないんだよ。
            ポインタを理解するにはメモリイメージを持つこと。これに尽きる。
            • by Anonymous Coward
              >CもC++もそんなことはやってくれない
              明示的にdeleteするのも所有権管理の範疇ではないでしょうか?
              >ポインタを理解するにはメモリイメージを持つこと。これに尽きる。
              その通りです。抽象度の高い課題には不要な理解で、生産性を下げます。
              • >明示的にdeleteするのも所有権管理の範疇ではないでしょうか?

                感覚の問題かも知れんが、少なくとも俺はそうは思わない。
                なぜならその例でいうdeleteで言えばnew/deleteとは無関係にポインタでアクセスできてしまうから。
                「*(int*)0 = 0;」みたいないきなり「ぬるぽガッ」なコードだって書けちゃうし。

                もしnew/deleteを所有権の管理とするなら所有する主体(主語)はオブジェクトではなくプロセスという解釈が必要になる。
                でも、そうだとしてそれに意味があるのかどうかはかなり疑問。

                >抽象度の高い課題には不要な理解で、生産性を下げます。

                不要かどうかは別にして、それはそう。
                だからそういう課題でパフォーマンス的にも細かい事言われないならC/C++はそもそも不向き。
              • by Anonymous Coward
                >なぜならその例でいうdeleteで言えばnew/deleteとは無関係にポインタでアクセスできてしまうから。
                >「*(int*)0 = 0;」みたいないきなり「ぬるぽガッ」なコードだって書けちゃうし。
                その通りです。所有権管理と参照は分離されるべきなのです。
                だけどCのポインタは分離されてないよね、というのが前言の趣旨です。

                >だからそういう課題でパフォーマンス的にも細かい事言われないならC/C++はそもそも不向き。
                パフォーマンスが重要な案件でも、チューニングが必要なのは一部です。
              • Re: (スコア:0, フレームのもと)

                >だけどCのポインタは分離されてないよね、というのが前言の趣旨です。
                分離されてないも何もさっきから言ってるように、そもそもポインタには所有権管理機能なんてないんだってば。

                new/deleteやmalloc/freeはプロセスがメモリ空間を占有するものであって、ポインタがその確保した領域を占有するというものではないよ。
                そもそもポインタは先頭を指してるだけであって領域のことなんか知ったこっちゃない。

                例としては文字列でもいいけど、たとえば下みたいな構造体は「ポインタは先頭を指しているだけ」という性質を使ったもの。
                この場合はサイズが不正なのでポインタを反復子としては使えな
              • Re: (スコア:-1, オフトピック)

                by Anonymous Coward
                >そもそもポインタには所有権管理機能なんてないんだってば。
                deleteは記憶領域を返却するだけでなく、デストラクタも走ることをご存知ないですか?
                つまり、newで生成されたオブジェクトを指すポインタは、それを削除するための情報も内包している。
                それが所有権管理です。

                >ポインタは参照だの反復子だのを具象化したものなんかじゃなくて、参照だの反復子だのはポインタの使い方の例でしかないわけよ。
                ポインタは参照や反復子を実装する手段に過ぎないともいえますね。

                >>パフォーマンスが重要な案件でも、チューニングが必要なのは一部です。
                >だから?
                抽象度が高い複雑な案件でも、パフォーマンスを上げたい部分はあります。私の経験では常に。
                ポインタを使ってまでチューニングすべきところは、それができる者がやればいい。
                残りは、別の人がやってもいい。その人は、ポインタを理解している必要は無い。
                ポインタを使わない方法を知っていればよい。
                メカニズムだけ理解してポインタをわかった気になってる人が一番危険です。
              • Re: (スコア:0, フレームのもと)

                deleteは記憶領域を返却するだけでなく、デストラクタも走ることをご存知ないですか?

                だから何?デストラクタが走るのと所有権管理にどんな関係があると?
                ポインタを複製してもちゃんと管理してくれるとでも?
                というかデストラクタを書くのは誰?
                ...あー、書く必要がない人なのね。

                ポインタは参照や反復子を実装する手段に過ぎないともいえますね。

                言えない。順序が逆。
                既に上げてある通りポインタを反復子として使えない使い方もある。

                抽象度が高い複雑な案件でも、パフォーマンスを上げたい部分は

              • おおっと書き忘れてた。
                たしかにnewすると確保サイズが保存されてdeleteでちゃんと戻してくれる。でもそれはポインタの機能じゃなくてnewとdeleteの機能。ポインタに確保サイズとか入ってる糞な処理系の存在を否定はしないけど普通の処理系ではポインタに入ってるのはアドレスだけだよ。それと別のところにも書いたけど「スマートポインタ」はただのクラスであってポインタなんかじゃないよ。

                newで生成されたオブジェクトを指すポインタは、それを削除するための情報も内包している。
                なーんて言ってるし、やっぱり件の記事と大差ないな。
              • Re:まぁ、驚いたのは (スコア:2, すばらしい洞察)

                by Anonymous Coward on 2008年04月01日 20時48分 (#1323448)
                お前らみたいな奴らが居て仕事が進まないから
                Javaが生まれたということはよく分かった。

                優秀なエンジニア二人の手を止めてしまう訳か。

                # お前らがポインタを知っている事はよく分かった。
                # でも人に誤解しないように説明するスキルはそれと別だからな、ということ。
                親コメント
              • by Anonymous Coward
                ポインタなんてそんな大層なものじゃないのに。
                学習してもC/C++のポインタ程度の事柄を理解できない人は、ポインタ以外の技術も理解できないと思う。
                (大半のPGは技術を理解してる必要も無いんだけどね)
              • by Anonymous Coward
                著者乙 とでも言って欲しいのか

Stay hungry, Stay foolish. -- Steven Paul Jobs

処理中...