Ryo.Fの日記: メモリ確保と開放 19
日記 by
Ryo.F
がんばれ!!ゲイツ君、「情報の求めるもの」より:
perlなどの言語も良いですが基礎を学ぶという意図には少し向きませんよね。ちゃんと使うメモリは自分で確保して、使い終わったら片づける。これがプログラミングの世界でちゃんと自分でできるようになったら、日常生活でも他人に迷惑をかけることのない立派な人間になれるでしょう(^^;。
ええと、わたくしRyo.Fもプログラミングに携わる方々の端くれを汚している(←意味不明)わけですが、malloc()とfree()は、わりときちんと書きます。しかし、部屋は散らかしっぱなしです。
つまり、こういうことです。
手順は解る。それを書き下すこともできる。
しかし、それを実行するのは僕の仕事じゃない。
ということでひとつ。
malloc/freeが基礎、ねえ… (スコア:1)
だったらStructure and Imprementation of Computer Programを
プログラミングの基礎教程のテキストに使っているところなんて
とんでもないってことになりそうですw
ゲイツ君は教条的すぎるのとあのいやみな言葉遣い
に眩暈がするのでもう何年も読んでませんが、
件のをさらっと読んでみました。
Cを基礎にですか…。Cはあんまり出来のいい言語じゃないんで、
入門には向かないと思うんですよ。
いろいろ間抜けな仕様が多くて、特に宣言回りなんかひどいです。
そういう瑣末なところに引っかかるのは学習の妨げにしかならんと思うのですよね。
で、実はmalloc/freeまわりも瑣末なことだと思ってます。
だってコンピュータって面倒な仕事を全部押しつけるために作られたものでしょう。
メモリ管理回りを自動化できるのならそれは正しい方向なんですよw
ただそうは言ってられない現場の泥臭いプログラミングにおいて
Cは鋭い切れ味を発揮するプロの道具なんですよね。
決して初学者のためには作られてないはずなんです。
たとえて言えばファミリーカーとフォーミュラカーの違いみたいなもんでしょうw
車の運転をしたことのないやつにフォーミュラカーを与えてもなあ、と思います。
Re:malloc/freeが基礎、ねえ… (スコア:1)
手順は解る。
でも、それを書き下すことも、実行することも僕の仕事じゃない
と言ったところでしょう。
そんなことを学習するよりも、データ構造とアルゴリズムを理解する方がいいと思いますね、まずは。
で、Rubyを使うって事で。え!ちがう?
Re:malloc/freeが基礎、ねえ… (スコア:1)
私もそう思います。
なんにしろCは、特にフリーソフト方面では共通語的な位置づけですから、
いずれマスターすべきではあるんですが、そんなの2番目か3番目でいいんですよ。
入門でいきなりmalloc/freeなんて、習うのも嫌でしょうし、教えるのも嫌ですw
>で、Rubyを使うって事で。え!ちがう?
違いませんw 普段はRuby使ってますもの。
Re:malloc/freeが基礎、ねえ… (スコア:1)
まあ、伝統的には、Assembler、Basic、Cで、三番目に覚えるものかと。
Re:malloc/freeが基礎、ねえ… (スコア:1)
DelphiとFortranの間がわかりません。orz
G、H、I、も思い当たらないな…
# ぼく自身はB>C>F>A>J>Pでした(どういう流れだ)
Re:malloc/freeが基礎、ねえ… (スコア:1)
Effelかな。
> G、H、I、も思い当たらないな…
Gambas、Haskell、IDLでどうだ!
…って、カンニング [latech.edu]したんですけど(笑)。
> B>C>F>A>J>P
というと、
Basic→Cobol→Forth→Algol→J→PL/I
あたりですか?
#だったらすごい。
Re:malloc/freeが基礎、ねえ… (スコア:1)
Basic→Assembler→Forth→Fortran→Pascal→Prolog→C→Lisp→C++→Perl→Cobol→Ruby
んー、何か抜けてないかな…K言語かな…BシェルとかCシェルとかは入れなくてもいいかな…
#/.に聞け、ネタ?
Re:malloc/freeが基礎、ねえ… (スコア:1)
です o..|rz
CFAの間くらいにC++がありました。(正確な時期は忘れました)
最近(ここ1年)PL/SQL(Oracleの)が追加されました。
あとPythonがほんの少しだけ。Pascalはやったようなやらないような…?
興味はあったけれど手がでなかったのがSchemaとLispですね…
# Rubyはやってみたいけれど次の仕事はJ2EEとか聞いた
Re:malloc/freeが基礎、ねえ… (スコア:1)
てな順番です。なんか行き当たりばったりってかんじ。
やっぱり正統派の順序としては、
Basic→C→Pascal→Lisp
なんでしょうかねw Cの次はPなのかDなのか議論は残りますが。
とかいってC++ということで既に決着ついてますね、つまんないw
WATFIVは大学でやらされました。FORTRANのプリプロセッサとして
実装されてる教育用言語だそうで、構造化っぽい構文が追加されてます。
他にもちょっと手を出してそのまんまになってるJavaとかOCamlとか
たくさんありますw
こうして見てみると、論理型の言語には手を染めてないのだな。
PrologはBit誌で雰囲気だけ嗅いでました。
Re:malloc/freeが基礎、ねえ… (スコア:1)
PHPの代替に、eRubyとかどうですかね。
私の場合、Lispは、大学の課題で自動証明マシンを作るのに使いました。
先生に「Lispなんかつかいやがって。インチキだ」と言われましたが、単位はもらいました(笑)。
Re:malloc/freeが基礎、ねえ… (スコア:1)
Prologは、大学の授業で何度もやらされました。
どう言った訳だか、自然言語処理系の単位がたくさんあったので。
でも、「!」の使い方を忘れた気がします(笑)。
久々にやってみようかな…
Re:malloc/freeが基礎、ねえ… (スコア:1)
探せばWATFIVのテキストはどっかにあるはずなんですが。
>久々にやってみようかな…
昔は処理系がみな高価でおいそれと試してみるなんてことできなかったのに、
いい時代になったものですw
Re:malloc/freeが基礎、ねえ… (スコア:1)
malloc()/free()をマスターした証としてガベージコレクタを実装し、以降はそいつを使え、と(笑)。冗談はともかく、malloc()/free()に限らず、リソース管理はプログラミングの基礎だと思う(確保したものは解放する、開いたものは閉じるetc...)。「やらなきゃだめなのよ」ということをわかった上でガベコレしてくれる言語実行系を使うのならいいけど、そうじゃないと変な循環参照こさえて「ガベコレされない」地獄に陥ります。Cは確かに入門用言語としてはとても薦められない代物ですが、ヘボなプログラマを変にフォローしてくれない点で鍛錬用の言語としてはいいかも、と思います。
;;; 最近必要に迫られてBoehm-gcの中をいじってるんだけど、いろんな意味でくらくらします。
Re:malloc/freeが基礎、ねえ… (スコア:1)
初心者に最初から教えるのには、どうか、と思います。
やっぱ最初はリソースなんて難しい事言わずにデータ構造とアルゴリズムを教えて(それ以前に文法を教えて)、
それができてからリソース管理でいいんじゃないですかね。
> 鍛錬用の言語
Assembler。これ最強。デバドラのコーディング辺りから入門、と。
あ、マシン語をスイッチパチパチで打ち込むのよりは楽ですが(笑)。
Re:malloc/freeが基礎、ねえ… (スコア:1)
一般的にはそう言われてるんですが、個人的にはリソースを使う際にいっしょに教えた方がいいと思ってます。アルゴリズムやデータ構造の知識のように積み上げがある訳じゃないんで、必要になった最初のタイミングで仕込んだ方が後々楽だという主張です。もちろん、アルゴリズムやデータ構造を教えるより先にリソース管理を教えるなんてナンセンスだとは思いますが、それらと切り離す必要もない。ファイルI/Oを使い始める時に「開いたら閉じる」って叩き込んどけ、と。
ま、これもよく言われる主張だし、至極もっともなんですが、今やgccのインラインアセンブラくらいしか書かないわたしがこれを言うのは面映いので、「Cでいいよ」と言っときます(笑)。というか、今時のOSだとデバイスドライバのコードでもアセンブラで書かなきゃならない分量はたかが知れてるような。組み込みにさえC/C++を使う時代ですからねぇ。
Re:malloc/freeが基礎、ねえ… (スコア:1)
なるほど。まあ、OJT(On the Job Training)で教えるなら、そういうのもありかもしれませんね。
でもたとえば、Rubyみたいにならば、文法と同時に教えられそうですね。
ん?これは便利すぎてダメなのかな?
> 今やgccのインラインアセンブラくらいしか書かないわたし
私なんか、ここ十数年アセンブラなんか書いたこともありません(笑)。
Re:malloc/freeが基礎、ねえ… (スコア:1)
OJTじゃなくても、レクチャー形式でも教えていいと思うけど...
それでもいいんですよ。でも、イディオムとして教えるんじゃなくて、裏で何が行われているのかを説明して、リソースを意識させた方がいいんじゃないかと思う訳です。
Re:malloc/freeが基礎、ねえ… (スコア:1)
はい。理解できます。
私は計算機科学的な見方をしてしまうので、
一番最初はデータ構造とアルゴリズム、と思ってしまうのでしょうね。
使えるプログラマを育てる、という意味では、資源管理は基礎中の基礎であることは間違いありません。
Cでクイックソートが書けても、free()を忘れるようじゃ、使えませんからね。
そういう意味で、「OJTでは」と書いたつもりです。
でもまあ、最近の言語は、そういう面倒なことは機械任せ、という富豪的な思想になってますから、
資源管理を意識しなければ、プログラマになれないか、と言うと、そうでもないのかな、とも思います。
まあ、分野によるのかな。
Re:malloc/freeが基礎、ねえ… (スコア:1)
これはその通りですね。というか実感なんですけど。
CをOJTで叩き込まれて、ある日突然裏で何が行われてるのか
見えるようになってからスキルが上がった実感があります。
それまではなんてぬるい(ひどい)プログラムを組んでたことかw
もっともCは裏なんてあってなきがごとしなんですけど。