パスワードを忘れた? アカウント作成
559168 journal

Ryo.Fの日記: メモリ確保と開放 19

日記 by Ryo.F

がんばれ!!ゲイツ君、「情報の求めるもの」より:

perlなどの言語も良いですが基礎を学ぶという意図には少し向きませんよね。ちゃんと使うメモリは自分で確保して、使い終わったら片づける。これがプログラミングの世界でちゃんと自分でできるようになったら、日常生活でも他人に迷惑をかけることのない立派な人間になれるでしょう(^^;。

ええと、わたくしRyo.Fもプログラミングに携わる方々の端くれを汚している(←意味不明)わけですが、malloc()とfree()は、わりときちんと書きます。しかし、部屋は散らかしっぱなしです。
つまり、こういうことです。
    手順は解る。それを書き下すこともできる。
    しかし、それを実行するのは僕の仕事じゃない。
ということでひとつ。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by __hage (7886) on 2005年08月30日 17時03分 (#790501)
    必ずしもmalloc/freeをきちんとする技術が基礎とは思えんのですが。
    だったらStructure and Imprementation of Computer Programを
    プログラミングの基礎教程のテキストに使っているところなんて
    とんでもないってことになりそうですw

    ゲイツ君は教条的すぎるのとあのいやみな言葉遣い
    に眩暈がするのでもう何年も読んでませんが、
    件のをさらっと読んでみました。
    Cを基礎にですか…。Cはあんまり出来のいい言語じゃないんで、
    入門には向かないと思うんですよ。
    いろいろ間抜けな仕様が多くて、特に宣言回りなんかひどいです。
    そういう瑣末なところに引っかかるのは学習の妨げにしかならんと思うのですよね。
    で、実はmalloc/freeまわりも瑣末なことだと思ってます。

    だってコンピュータって面倒な仕事を全部押しつけるために作られたものでしょう。
    メモリ管理回りを自動化できるのならそれは正しい方向なんですよw

    ただそうは言ってられない現場の泥臭いプログラミングにおいて
    Cは鋭い切れ味を発揮するプロの道具なんですよね。
    決して初学者のためには作られてないはずなんです。
    たとえて言えばファミリーカーとフォーミュラカーの違いみたいなもんでしょうw
    車の運転をしたことのないやつにフォーミュラカーを与えてもなあ、と思います。
    • ええ、ええ、私もそう思います。malloc()やfree()なんてややこしい事は、資源が許すなら自動化するに越した事はない。だって、ベテランプログラマーですらヘマをやらかしやすいところなんだから。部屋のたとえで言うなら、
          手順は解る。
          でも、それを書き下すことも、実行することも僕の仕事じゃない
      と言ったところでしょう。

      そんなことを学習するよりも、データ構造とアルゴリズムを理解する方がいいと思いますね、まずは。

      で、Rubyを使うって事で。え!ちがう?
      親コメント
      • by __hage (7886) on 2005年08月30日 18時22分 (#790537)
        >そんなことを学習するよりも、データ構造とアルゴリズムを理解する方がいいと思いますね

        私もそう思います。

        なんにしろCは、特にフリーソフト方面では共通語的な位置づけですから、
        いずれマスターすべきではあるんですが、そんなの2番目か3番目でいいんですよ。
        入門でいきなりmalloc/freeなんて、習うのも嫌でしょうし、教えるのも嫌ですw

        >で、Rubyを使うって事で。え!ちがう?

        違いませんw 普段はRuby使ってますもの。
        親コメント
        • > なんにしろCは、<<略>>そんなの2番目か3番目でいいんですよ。

          まあ、伝統的には、Assembler、Basic、Cで、三番目に覚えるものかと。
          親コメント
          • >Assembler、Basic、Cで、三番目に覚えるものかと。
            DelphiとFortranの間がわかりません。orz

            G、H、I、も思い当たらないな…

            # ぼく自身はB>C>F>A>J>Pでした(どういう流れだ)
            親コメント
            • > DelphiとFortranの間

              Effelかな。

              > G、H、I、も思い当たらないな…

              Gambas、Haskell、IDLでどうだ!

              …って、カンニング [latech.edu]したんですけど(笑)。

              > B>C>F>A>J>P

              というと、
                  Basic→Cobol→Forth→Algol→J→PL/I
              あたりですか?
              #だったらすごい。
              親コメント
            • ちなみに私は、
                  Basic→Assembler→Forth→Fortran→Pascal→Prolog→C→Lisp→C++→Perl→Cobol→Ruby
              んー、何か抜けてないかな…K言語かな…BシェルとかCシェルとかは入れなくてもいいかな…

              #/.に聞け、ネタ?
              親コメント
              • Basic→C→Fortran→Assembler→Java→Php
                です o..|rz

                CFAの間くらいにC++がありました。(正確な時期は忘れました)
                最近(ここ1年)PL/SQL(Oracleの)が追加されました。
                あとPythonがほんの少しだけ。Pascalはやったようなやらないような…?

                興味はあったけれど手がでなかったのがSchemaとLispですね…

                # Rubyはやってみたいけれど次の仕事はJ2EEとか聞いた
                親コメント
              • by __hage (7886) on 2005年08月31日 20時29分 (#791479)
                FORTRAN→Basic→Pascal→WATFIV→HyperTalk→Smalltalk→C→C++→Scheme→Ruby

                てな順番です。なんか行き当たりばったりってかんじ。
                やっぱり正統派の順序としては、

                Basic→C→Pascal→Lisp

                なんでしょうかねw Cの次はPなのかDなのか議論は残りますが。
                とかいってC++ということで既に決着ついてますね、つまんないw

                WATFIVは大学でやらされました。FORTRANのプリプロセッサとして
                実装されてる教育用言語だそうで、構造化っぽい構文が追加されてます。

                他にもちょっと手を出してそのまんまになってるJavaとかOCamlとか
                たくさんありますw

                こうして見てみると、論理型の言語には手を染めてないのだな。
                PrologはBit誌で雰囲気だけ嗅いでました。
                親コメント
              • Rubyはいいですよ~
                PHPの代替に、eRubyとかどうですかね。

                私の場合、Lispは、大学の課題で自動証明マシンを作るのに使いました。
                先生に「Lispなんかつかいやがって。インチキだ」と言われましたが、単位はもらいました(笑)。
                親コメント
              • WATFIVですか。知らないなあ。FORTRAN90とかとくらべてどうなんでしょうか?

                Prologは、大学の授業で何度もやらされました。
                どう言った訳だか、自然言語処理系の単位がたくさんあったので。
                でも、「!」の使い方を忘れた気がします(笑)。
                久々にやってみようかな…
                親コメント
              • WATFIVはもう忘れてますし、FORTRAN90は知らないんで比べられませんです orz
                探せばWATFIVのテキストはどっかにあるはずなんですが。

                >久々にやってみようかな…

                昔は処理系がみな高価でおいそれと試してみるなんてことできなかったのに、
                いい時代になったものですw
                親コメント
    • malloc()/free()をマスターした証としてガベージコレクタを実装し、以降はそいつを使え、と(笑)。冗談はともかく、malloc()/free()に限らず、リソース管理はプログラミングの基礎だと思う(確保したものは解放する、開いたものは閉じるetc...)。「やらなきゃだめなのよ」ということをわかった上でガベコレしてくれる言語実行系を使うのならいいけど、そうじゃないと変な循環参照こさえて「ガベコレされない」地獄に陥ります。Cは確かに入門用言語としてはとても薦められない代物ですが、ヘボなプログラマを変にフォローしてくれない点で鍛錬用の言語としてはいいかも、と思います。

      ;;; 最近必要に迫られてBoehm-gcの中をいじってるんだけど、いろんな意味でくらくらします。

      親コメント
      • > リソース管理はプログラミングの基礎

        初心者に最初から教えるのには、どうか、と思います。
        やっぱ最初はリソースなんて難しい事言わずにデータ構造とアルゴリズムを教えて(それ以前に文法を教えて)、
        それができてからリソース管理でいいんじゃないですかね。

        > 鍛錬用の言語

        Assembler。これ最強。デバドラのコーディング辺りから入門、と。
        あ、マシン語をスイッチパチパチで打ち込むのよりは楽ですが(笑)。
        親コメント
        • やっぱ最初はリソースなんて難しい事言わずにデータ構造とアルゴリズムを教えて(それ以前に文法を教えて)、 それができてからリソース管理でいいんじゃないですかね。

          一般的にはそう言われてるんですが、個人的にはリソースを使う際にいっしょに教えた方がいいと思ってます。アルゴリズムやデータ構造の知識のように積み上げがある訳じゃないんで、必要になった最初のタイミングで仕込んだ方が後々楽だという主張です。もちろん、アルゴリズムやデータ構造を教えるより先にリソース管理を教えるなんてナンセンスだとは思いますが、それらと切り離す必要もない。ファイルI/Oを使い始める時に「開いたら閉じる」って叩き込んどけ、と。

          Assembler。これ最強。デバドラのコーディング辺りから入門、と。 あ、マシン語をスイッチパチパチで打ち込むのよりは楽ですが(笑)。

          ま、これもよく言われる主張だし、至極もっともなんですが、今やgccのインラインアセンブラくらいしか書かないわたしがこれを言うのは面映いので、「Cでいいよ」と言っときます(笑)。というか、今時のOSだとデバイスドライバのコードでもアセンブラで書かなきゃならない分量はたかが知れてるような。組み込みにさえC/C++を使う時代ですからねぇ。

          親コメント
          • > ファイルI/Oを使い始める時に「開いたら閉じる」って叩き込んどけ、と。

            なるほど。まあ、OJT(On the Job Training)で教えるなら、そういうのもありかもしれませんね。

            でもたとえば、Rubyみたいに
            open(FILENAME,"r") do |fh|
                fh.puts "Hello, World!"
            end
            ならば、文法と同時に教えられそうですね。
            ん?これは便利すぎてダメなのかな?

            > 今やgccのインラインアセンブラくらいしか書かないわたし

            私なんか、ここ十数年アセンブラなんか書いたこともありません(笑)。
            親コメント
            • なるほど。まあ、OJT(On the Job Training)で教えるなら、そういうのもありかもしれませんね。

              OJTじゃなくても、レクチャー形式でも教えていいと思うけど...

              でもたとえば、Rubyみたいに...

              それでもいいんですよ。でも、イディオムとして教えるんじゃなくて、裏で何が行われているのかを説明して、リソースを意識させた方がいいんじゃないかと思う訳です。

              親コメント
              • > リソースを意識させた方がいいんじゃないか

                はい。理解できます。

                私は計算機科学的な見方をしてしまうので、
                一番最初はデータ構造とアルゴリズム、と思ってしまうのでしょうね。

                使えるプログラマを育てる、という意味では、資源管理は基礎中の基礎であることは間違いありません。
                Cでクイックソートが書けても、free()を忘れるようじゃ、使えませんからね。
                そういう意味で、「OJTでは」と書いたつもりです。

                でもまあ、最近の言語は、そういう面倒なことは機械任せ、という富豪的な思想になってますから、
                資源管理を意識しなければ、プログラマになれないか、と言うと、そうでもないのかな、とも思います。
                まあ、分野によるのかな。
                親コメント
              • >裏で何が行われているのかを説明して、リソースを意識させた方がいいんじゃないかと思う訳です。

                これはその通りですね。というか実感なんですけど。

                CをOJTで叩き込まれて、ある日突然裏で何が行われてるのか
                見えるようになってからスキルが上がった実感があります。
                それまではなんてぬるい(ひどい)プログラムを組んでたことかw
                もっともCは裏なんてあってなきがごとしなんですけど。
                親コメント
typodupeerror

ソースを見ろ -- ある4桁UID

読み込み中...