K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[1892] 「C言語 ポインタ完全制覇」補足目次を作成しました
投稿者:(ぱ)こと管理人
2014/03/30 15:40:57

><補足> supplement を目次へ追加願います。 大変いまさらではありますが、「C言語 ポインタ完全制覇」の補足目次を作成しました。 http://kmaebashi.com/seiha/hosoku_index.html (他の本については、まあ、おいおいと) 元ネタは元原稿のLaTeXファイルから抽出したので、抜けはないはず…… と思ったのですが、 結構最後の最後まで補足の追加とかしていたようで、元原稿になくて本にはある補足が いくつか。補足を書き足してるヒマにちゃんと校正やっとけという話なのですが…… 編集さんご迷惑をおかけしました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1891] Re:「C言語 ポインタ完全制覇」について気がついた事、要望
投稿者:(ぱ)こと管理人
2014/03/24 00:51:35

ご意見ありがとうございます。 >p.149 3-2 Cの型モデル について >この章は、大変重要な事が説明されていると思いますが、それが読者にきちんと >伝わっていない可能性があると思います。 読み返してみました。ここはかなり重要な章だと思いますので、 ここが読者に伝わっていないとなると問題です。 ご指摘の件、改訂版の機会があれば検討させていただきます。 # このレベルの修正だと、第16刷とかで手直しできるレベルを # 超えていると思いますので。 ><補足> supplement を目次へ追加願います。 これは、正直、私もちょっと心に引っかかっていました。 (と言いつつ、その後の本でも直っていないわけですが……) いまさらではありますが、こちらについてはWebで補足目次を作るくらいの ことはできそうです。すぐにやるとは言えませんが、検討します。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1890] 「C言語 ポインタ完全制覇」について気がついた事、要望
投稿者:jcv
2014/03/23 19:41:55

今更と思われるかもしれませんが、技術評論社「 C言語 ポインタ完全制覇」について、 気がついた事をお知らせ致します。 参照しているのは、2013年10月10日 初版第15刷です。 p.149 3-2 Cの型モデル について この章は、大変重要な事が説明されていると思いますが、それが読者にきちんと 伝わっていない可能性があると思います。この本を順番に読んで行くと、いきなり Fig.3-1 の表が出て来たという印象を受けました。とまどわれた方も多いのでは ないかと思います。私も何を説明しているのかが理解出来ませんでした。また、 その後の派生型の話も全く記憶に残っていませんでした。最近、読み返して、やっ とこの表や、この章全体が 「Cの型」がどの様に決められているかについての説明 である事がわかりました。改めて章のタイトルを見ると、「Cの型モデル」とあり、 わかった後で読み返すと、Fig.3-1 には、『「型」を図で表現すると…』とあり、 確かに説明がされているのがわかりました。 「Cの型モデル」というこの章のタイトルは、この章の内容を端的に まとめられていて、極めて妥当なタイトルであるとは思います。 後日リファレンスマニュアルとしてこの本を利用する場合には、目次 ですぐに見つかりますので良いと思います。 p.149 の上部には、挿絵があり、その中に「3-2 Cの型モデル」とタイトルが入っ ていはいますが、このタイトル部分が挿絵の中で、色も異なり、絵の内容も本の 内容とは関連も薄く、しかもすべての章節の絵が同じなので、このタイトルに気 がつかずに読み進める読者も多いのではないかと思います。また、このタイトル を読んだとしても、はじめて読む読者が内容を知らずにこのタイトルだけを見て、 すぐに内容が思い浮ぶタイトルではないと思います。 その様な、このタイトルの内容が頭に入っていない状態でこの章を読み始めると、 その後の「3-2-1 基本型と派生型」を見ますが、この用語はこの章の中で解説が されているので、何のことかもわかりません。その状態で、本文を読んでも、 これが、Cの型の説明をしているという事が理解出来ないと思います。 せめて、直前の章の終りで、つぎの章予告等があれば話しは違いますが、直前の 章は、型の話ではありますが、間に約2ページの「補足」が入っているので、リフ レッシュされて前の内容は記憶に残っていないかもしれません。やはりこの章に ついては、最初に何の説明を行うかを記載するのが良いのではないかと思います。 <補足> supplement を目次へ追加願います。 補足には、重要な内容が多く記載されています。そして、他の人への説明に利用 させて頂きたい事や、後から読み返したい事が多いのも、補足の部分に書かれて いる内容についてです。ところが、この補足には、目次がなくアクセスが出来ま せん。更に、索引にも出て来ない事がありました。例えば、p.168 「式」に対す るsizeof は、索引で sizeof を見ても、p. 158 が出て来るだけでした。しかも この補足は違う章に入っていましたので、全ページを探す必要がありました。 (sizeof がたまたま漏れていたのかもしれませんが)是非、補足の目次の追加を お願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1888] Re:コンパイルが通りません.
投稿者:(ぱ)こと管理人
2014/01/05 14:49:53

>例として掲載されているServer01,javaのサンプルコードですが,そのままではコンパイルが通りませんでした. はじめまして。 今手元にjavacがないので貼ったコードを再コンパイル等はしていませんが、 ぱっと見おかしいようには見えません。 コンパイルが通らないとのことですが、 ・コンパイルが通らない際のエラーメッセージ ・ご使用のjavacのバージョン といった情報を教えてもらえないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1887] コンパイルが通りません.
投稿者:新参者
2014/01/03 21:50:28

お世話になっております. 今回,クライアントサーバを1から作ってみようと思い,貴サイトを活用させていただきました. 例として掲載されているServer01,javaのサンプルコードですが,そのままではコンパイルが通りませんでした. ソースコードをここに記載します. import java.io.*; import java.net.*; public class Server01 { public static void main(String[] argv) throws Exception { try (ServerSocket server = new ServerSocket(8001); FileOutputStream fos = new FileOutputStream("server_recv.txt"); FileInputStream fis = new FileInputStream("server_send.txt")) { System.out.println("クライアントからの接続を待ちます。"); Socket socket = server.accept(); System.out.println("クライアント接続。"); int ch; // クライアントから受け取った内容をserver_recv.txtに出力 InputStream input = socket.getInputStream(); // クライアントは、終了のマークとして0を送付してくる while ((ch = input.read()) != 0) { fos.write(ch); } // server_send.txtの内容をクライアントに送付 OutputStream output = socket.getOutputStream(); while ((ch = fis.read()) != -1) { output.write(ch); } socket.close(); } catch (Exception ex) { ex.printStackTrace(); } } }
[この投稿を含むスレッドを表示] [この投稿を削除]
[1884] Re:crowbar_book_ver4について
投稿者:(ぱ)こと管理人
2013/12/02 21:13:12

>たぶんですけど、直すのに影響があんまり出ないやり方があります。crowbarスタックを >一つの配列ではなく、複数の配列をリンクするによりスタックの拡張ができます。 >スタック拡張する場合には新たな配列をmalloc()して、それをもとにあったスタックと >リンクして、それでrealloc()を回避できますますね。これが「chunked stack」とも >言います。 全体を確認していませんが、ざっと見てみると、現状のcrowbarの実装だと スタック操作がpush_value()とかpeek_stack()にカプセル化されているので、push_value()のところで新たにmalloc()してリンクリスト等で管理し、 peek_stack()にて、もし配列の下端より下の領域を参照されたらひとつ前の 領域から算出して返す、ということはできそうですね…… 実のところ同じ現象はDiksamにもあるはずで、こちらはVMの中で直接参照して います。ただし、Diksamは関数呼び出し時にスタックの拡張があるかどうかを 判定していますし、ひとつの関数の実行中だけ連続したスタック領域が見えれば 十分でしょうから、なんとかなるように思います。 (すみません、ちょっとすぐには直せませんが) ご意見ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1883] Re:crowbar_book_ver4について
投稿者:RednaxelaFX
2013/11/30 23:34:37

>どたばたしておりまして対応が遅れました。すみません。 いえ、大丈夫です。返事を頂いてありがとうございます。 >>realloc()が対象データを移動しかねないので、移動した場合、もしスタックのなかでネイティブ関数に渡す引数があれば、それを指すポインタ(arg_p)が無効化される恐れがありますね。 > >本当ですね……初歩的なミスでした。ご指摘ありがとうございます。 >直すなら、ポインタでなく添字を渡して関数経由でアクセスするようにするのかと思いますが、ネイティブ関数全体に影響が出ます。少し考えさせてください。 >ご指摘ありがとうございました。 たぶんですけど、直すのに影響があんまり出ないやり方があります。crowbarスタックを一つの配列ではなく、複数の配列をリンクするによりスタックの拡張ができます。スタック拡張する場合には新たな配列をmalloc()して、それをもとにあったスタックとリンクして、それでrealloc()を回避できますますね。これが「chunked stack」とも言います。 >>ついでに、CRB_create_interpreter()で、interpreter->stack.stack_alloc_sizeの初期値が0になってますが、それがSTACK_ALLOC_SIZEになったほうがいいではないでしょうか。 > >NULLを第一引数とするreallocはmallocと同じなので、どちらでもよいのではないでしょうか。 はい、どちらでも良いですね。 - Kris
[この投稿を含むスレッドを表示] [この投稿を削除]
[1882] Re:crowbar_book_ver4について
投稿者:(ぱ)こと管理人
2013/11/30 12:42:30

どたばたしておりまして対応が遅れました。すみません。 >realloc()が対象データを移動しかねないので、移動した場合、もしスタックのなかでネイティブ関数に渡す引数があれば、それを指すポインタ(arg_p)が無効化される恐れがありますね。 本当ですね……初歩的なミスでした。ご指摘ありがとうございます。 直すなら、ポインタでなく添字を渡して関数経由でアクセスするようにするのかと思いますが、ネイティブ関数全体に影響が出ます。少し考えさせてください。 ご指摘ありがとうございました。 >ついでに、CRB_create_interpreter()で、interpreter->stack.stack_alloc_sizeの初期値が0になってますが、それがSTACK_ALLOC_SIZEになったほうがいいではないでしょうか。 NULLを第一引数とするreallocはmallocと同じなので、どちらでもよいのではないでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1881] Re:crowbar_book_ver4について
投稿者:RednaxelaFX
2013/11/27 02:02:07

前橋様、 もう一つ、crowbarスタックとネーティブ仮引数について聞きたいことがあります。 crowbar_book_0_4では、crowbarスタックはrealloc()を使って拡張します。そしてネイティブ関数に渡す引数の配列がはcrowbarスタックに積んでいます。realloc()が対象データを移動しかねないので、移動した場合、もしスタックのなかでネイティブ関数に渡す引数があれば、それを指すポインタ(arg_p)が無効化される恐れがありますね。 ついでに、CRB_create_interpreter()で、interpreter->stack.stack_alloc_sizeの初期値が0になってますが、それがSTACK_ALLOC_SIZEになったほうがいいではないでしょうか。stack_alloc_sizeの初期値が0なら、最初にpush_value()を呼び出すと、stack_pointer == stack_alloc_sizeので無駄にMEM_realloc()でcrowbarスタック拡張をします。 - Kris
[この投稿を含むスレッドを表示] [この投稿を削除]
[1880] Re:crowbar_book_ver4について
投稿者:RednaxelaFX
2013/11/25 00:44:46

はるほど、納得いたしました。 お忙しい中、丁寧なご返事、ありがとうございました。 - Kris >確認しました。確かに無駄なことをしているように見えます。 >そもそも関数名がrelease_global_stringsなのに、文字列に対して >何かしているように見えません。 > >どうしてこうなったのかと思い、調べたのですが、どうも >ver.0.1のこのコードが原因なのかと思います。 > >http://kmaebashi.com/programmer/devlang/crowbar_src_0_1_01/S/15.html#76 >static void >release_global_strings(CRB_Interpreter *interpreter) { > while (interpreter->variable) { > Variable *temp = interpreter->variable; > interpreter->variable = temp->next; > if (temp->value.type == CRB_STRING_VALUE) { > crb_release_string(temp->value.u.string_value); > } > } >} > >ver.0.1時点では、参照カウンタのGCしかなかったので、インタプリタを >破棄するときには文字列の領域はfreeする必要がありました。その処理が >上記のコードです。 > >ver.0.2でGCを組み込んだので、interpreter->variableをNULLにしておけば、 >文字列の領域もcrb_garbage_collect()の呼び出しで解放されます。 >ただ、ver.0.2を作ったとき、ヘッダファイルを直してコンパイルエラーを取って、 >という作業をしているときに、コンパイルエラーの原因のところだけ削って >関数そのものが不要であることに気付かなかったのではないかと思います。 >すみませんでした。再確認のうえ、正誤表に載せる等対応します。 > >細かいところまでソースを読み込んでいただき、作者冥利に尽きます。 >ありがとうございました。 >
[この投稿を含むスレッドを表示] [この投稿を削除]
[1879] Re:crowbar_book_ver4について
投稿者:(ぱ)こと管理人
2013/11/24 23:19:43

>こんにちは、@rednaxelafxことKrisと申します。 中国からありがとうございます。 (中国語版がもう出版されているということを私も今知りました) >このたびはcrowbarについてちょっと聞きたいことがあります。 … >その中のcrowbar_book_0_4ですが、interface.cでのrelease_global_strings()が >こうなっています: >static void >release_global_strings(CRB_Interpreter *interpreter) { > while (interpreter->variable) { > Variable *temp = interpreter->variable; > interpreter->variable = temp->next; > } >} 確認しました。確かに無駄なことをしているように見えます。 そもそも関数名がrelease_global_stringsなのに、文字列に対して 何かしているように見えません。 どうしてこうなったのかと思い、調べたのですが、どうも ver.0.1のこのコードが原因なのかと思います。 http://kmaebashi.com/programmer/devlang/crowbar_src_0_1_01/S/15.html#76 static void release_global_strings(CRB_Interpreter *interpreter) { while (interpreter->variable) { Variable *temp = interpreter->variable; interpreter->variable = temp->next; if (temp->value.type == CRB_STRING_VALUE) { crb_release_string(temp->value.u.string_value); } } } ver.0.1時点では、参照カウンタのGCしかなかったので、インタプリタを 破棄するときには文字列の領域はfreeする必要がありました。その処理が 上記のコードです。 ver.0.2でGCを組み込んだので、interpreter->variableをNULLにしておけば、 文字列の領域もcrb_garbage_collect()の呼び出しで解放されます。 ただ、ver.0.2を作ったとき、ヘッダファイルを直してコンパイルエラーを取って、 という作業をしているときに、コンパイルエラーの原因のところだけ削って 関数そのものが不要であることに気付かなかったのではないかと思います。 すみませんでした。再確認のうえ、正誤表に載せる等対応します。 細かいところまでソースを読み込んでいただき、作者冥利に尽きます。 ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1878] crowbar_book_ver4について
投稿者:RednaxelaFX
2013/11/24 03:34:37

こんにちは、@rednaxelafxことKrisと申します。 たぶん「はじめまして」ではないかと、Twitterで検索したところ、たしかにもっと前から挨拶をしました(笑) https://twitter.com/rednaxelafx/status/14597568550 Web連載も結構前から読みましたが、「プログラミング言語を作る」が本になって本当に嬉しかったです。 去年中国の編集さんにこの本を強く薦めました。いまはやっとその中国語翻訳版が買えるようになりまして、自分のブログでこの本を押したいと思います。 このたびはcrowbarについてちょっと聞きたいことがあります。 本のサンプルコードをこちらからダウンロードしました: http://kmaebashi.com/programmer/devlang/book/unix_utf8_20091228.tgz その中のcrowbar_book_0_4ですが、interface.cでのrelease_global_strings()がこうなっています: static void release_global_strings(CRB_Interpreter *interpreter) { while (interpreter->variable) { Variable *temp = interpreter->variable; interpreter->variable = temp->next; } } この関数がもともと何をしようとしてますか?このままだと、ループしなくても、直接に interpreter->variable = NULL でも同じではないですか? もしかしたらこうしたかったとか: static void release_global_strings(CRB_Interpreter *interpreter) { while (interpreter->variable) { Variable *temp = interpreter->variable; Variable *temp_next = temp->next; temp->next = NULL; interpreter->variable = temp_next; } }
[この投稿を含むスレッドを表示] [この投稿を削除]
[1877] Re:C言語ポインタ完全制覇の質問
投稿者:April
2013/11/22 04:35:57

>>>DEBUG_WRITE(("hoge..%d\n", hoge)); >>を >>DEBUG_WRITE("hoge..%d\n", hoge); >>と書きたい場合は、 >>>>#define DEBUG_WRITE(arg) debug_write(arg) >>と書くことで同じになりますか? > >なりません。引数をひとつしか取らないマクロにふたつの引数を渡しているので >エラーになります。 >というか、そもそもこれでうまくいくのであれば誰も苦労はしないわけで、 >わざわざ二重括弧をつけたりしようとは思いません。 > >ISO C99では新機能により可変長引数を持つマクロが定義できるようになりましたが。 >http://seclan.dll.jp/c99d/c99d02.htm > >処理系をお持ちであれば、実際に試してみて、プリプロセッサの出力を >見てみるのが一番わかりやすいと思いますが、手元に実行できる環境は >ないのでしょうか? > >まあ、私も子どもの頃は、パソコン買ってもらえなくてペーパープログラマー >だったので、だとすればその苦労はわかります。 > 理解できました ありがとうございます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1876] Re:本当の基礎からのWebアプリケーション入門 typo
投稿者:(ぱ)こと管理人
2013/09/25 02:48:18

>「u行目で定数DOCUMENT_ROOTを設定しています」の「u行目」は、 >7行目の事のはずなので、typo と思われます。 ご指摘ありがとうございます。修正しました。 誤解が起きようがないtypo場所の指摘方法がさすがといいますか、 いろんな人に読まれてますね (^^;
[この投稿を含むスレッドを表示] [この投稿を削除]
[1875] 本当の基礎からのWebアプリケーション入門 typo
投稿者:jcv
2013/09/23 08:56:09

本当の基礎からのWebアプリケーション入門 ――Webサーバを作ってみよう―― Webサーバを作る ひとつのHTMLファイルを返す webserver.html の225行目 「u行目で定数DOCUMENT_ROOTを設定しています」の「u行目」は、 7行目の事のはずなので、typo と思われます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1873] Re:C言語ポインタ完全制覇の質問
投稿者:(ぱ)こと管理人
2013/08/10 11:41:06

>単純にカンマ演算子が評価されて debug_write(hoge); と同値になるだけでしょう。 うひ。その通りです。カンマ演算子をすっかり忘れていました。 ご指摘ありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1872] Re:C言語ポインタ完全制覇の質問
投稿者:774RR
2013/08/08 18:11:39

一通り質疑応答はきれいに終わったようなので、要らぬ一言を >debug_write(("hoge..%d\n", hoge)); >これは構文エラーです。 単純にカンマ演算子が評価されて debug_write(hoge); と同値になるだけでしょう。 hoge が整数型なら引数の型不一致エラーになるものと思われます。 hoge が char* ならエラーなく通ってしまうはず。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1871] Re:C言語ポインタ完全制覇の質問
投稿者:あり
2013/08/07 08:02:56

ありがとうございます。 理解できました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1870] Re:C言語ポインタ完全制覇の質問
投稿者:(ぱ)こと管理人
2013/08/06 22:45:11

>>DEBUG_WRITE(("hoge..%d\n", hoge)); >を >DEBUG_WRITE("hoge..%d\n", hoge); >と書きたい場合は、 >>>#define DEBUG_WRITE(arg) debug_write(arg) >と書くことで同じになりますか? なりません。引数をひとつしか取らないマクロにふたつの引数を渡しているので エラーになります。 というか、そもそもこれでうまくいくのであれば誰も苦労はしないわけで、 わざわざ二重括弧をつけたりしようとは思いません。 ISO C99では新機能により可変長引数を持つマクロが定義できるようになりましたが。 http://seclan.dll.jp/c99d/c99d02.htm 処理系をお持ちであれば、実際に試してみて、プリプロセッサの出力を 見てみるのが一番わかりやすいと思いますが、手元に実行できる環境は ないのでしょうか? まあ、私も子どもの頃は、パソコン買ってもらえなくてペーパープログラマー だったので、だとすればその苦労はわかります。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1869] Re:C言語ポインタ完全制覇の質問
投稿者:あり
2013/08/06 07:59:33

>DEBUG_WRITE(("hoge..%d\n", hoge)); を DEBUG_WRITE("hoge..%d\n", hoge); と書きたい場合は、 >>#define DEBUG_WRITE(arg) debug_write(arg) と書くことで同じになりますか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[1868] Re:C言語ポインタ完全制覇の質問
投稿者:(ぱ)こと管理人
2013/08/05 21:39:59

>>>#define DEBUG_WRITE(arg) debug_write arg  >の書き方は、 >#define DEBUG_WRITE(arg) debug_write(arg) >と書くのと同じことになりますか?  なりません。 下の書き方で以下のように呼び出すと、 DEBUG_WRITE(("hoge..%d\n", hoge)); マクロが展開された時点でこうなります。 debug_write(("hoge..%d\n", hoge)); これは構文エラーです。 DEBUG_WRITEの括弧内、つまり DEBUG_WRITE(ココ) にあるものがargの場所に配置されるのですから、当然そうなります。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1867] Re:C言語ポインタ完全制覇の質問
投稿者:あり
2013/08/05 08:11:42

返信ありがとうございます。 追加でもう一点お願いします。 >>P108の上半分の >>#ifdef DEBUG >>#define DEBUG_WRITE(arg) debug_write arg  >… の書き方は、 #define DEBUG_WRITE(arg) debug_write(arg) と書くのと同じことになりますか? 
[この投稿を含むスレッドを表示] [この投稿を削除]
[1866] Re:C言語ポインタ完全制覇の質問
投稿者:(ぱ)こと管理人
2013/08/03 16:09:15

>P108の上半分の >#ifdef DEBUG >#define DEBUG_WRITE(arg) debug_write arg  … >でdebug_writeのうしろに空白があって、argがあるのがどういうことか理解できません。 このDEBUG_WRITEの使い方についてはその続きで説明しており、以下のように書いています。 DEBUG_WRITE(("hoge..%d\n", hoge)) これをプリプロセッサにかけたときにどうなるかは、やってみれば一番わかると思いますが、 この2重の括弧の内側が、括弧ごと展開されますので、こうなります。 debug_write ("hoge..%d\n", hoge) これで可変長引数を取るデバッグライト用関数debug_write()を 呼び出すことができるわけです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1865] C言語ポインタ完全制覇の質問
投稿者:あり
2013/08/02 08:15:58

P108 デバッグライト用の関数を作ってみよう に関して質問があります。 P108の上半分の #ifdef DEBUG #define DEBUG_WRITE(arg) debug_write arg  #else ・・・・ でdebug_writeのうしろに空白があって、argがあるのがどういうことか理解できません。 説明いただけないでしょうか。 よろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1863] 管理者により削除されました
2013/05/15 01:35:25

テストはテスト用掲示板にてお願いします。
[この投稿を含むスレッドを表示]
[1862] Re:フローチャートについて
投稿者:(ぱ)こと管理人
2013/05/09 02:47:21

>アルゴリズムについてろくに知らないくせに軽視するという傾向がありました。 あう。すみません。 勉強はなんであっても重要ですよね。それこそフロチャートだって、記号の 意味くらいは知っていたほうがよいかと思いますし。 >それと、「インタプリタは翻訳しない」(インタプリタ自身が命令セットを持っている) >ことを他書がどう書いているか、一時期、気になってました。「翻訳する」などとなって >いても、表面上は誤りとも言い切れない表現の本が多いようです(そもそもあまり意識 >していないような)。その点、村瀬康治さんは、さすがに正確に書かれています。 とりあえず手元にある本では、 パソコンプログラミング入門以前 伊藤華子著 初版(1998年) 第10刷(2001年) | 中には、オブジェクトプログラムを生成しない「インタープリタ方式」で、 | ソースプログラムを一括変換しないで、一部分ずつを翻訳し直接実行する | スタイルもあります。 この本ではこの後、通訳に原稿をまるごと翻訳してもらう方法(コンパイル方式)と 比較して、同時通訳をインタプリタにたとえています。これはさすがに言い訳 できないと思います。 プログラムはなぜ動くのか 知っておきたいプログラミングの基礎知識 矢沢久雄著 1版7刷 (1刷ともに2001年) | Q.:コンパイラとインタプリタの違いは何ですか? | A.:コンパイラは、実行前にソースコードをネイティブ・コードに一括して | 翻訳します。インタプリタは、実行時にソースコードの内容を1行ずつ | ネイティブ・コードに逐次変換します。 「これが驚異のべすとせらあ?」とセンス・オブ・プログラミングに書いた本は 実はこれです。 改訂版が出ているので立ち読みしましたが、該当の記述はなくなっているようです。 どちらも増刷を繰り返している、かなり売れている本なんですよねえ。 >「Java謎+落とし穴」、第二版を期待しつつ。 残念ながらその予定はないのですが、この本は、amazonのレビューとかでも 書かれているとおり、今となっては古い本になってしまっていると自分でも思います。 でもなー、あの時点で、Genericsや列挙の不在はもちろん、引数と戻り値の 共変、反変まで書いたってのは、手前味噌ながらなかなかのものだと思うんですよ。 Web上で書評を見ても、2章のポインタ議論あたりまでしか言及されてないのが 多くてですね(愚痴)
[この投稿を含むスレッドを表示] [この投稿を削除]
[1861] Re:フローチャートについて
投稿者:動坂亭
2013/05/07 22:40:31

前橋様 お忙しい中、丁寧にご回答いただき、ありがとうございました。 お答えを自分なりに咀嚼し、今後に活かしたいと思います。もちろん、フロチャートは書かない(こだわらない、忘れる)ようにします。 ちなみに、柴田芳樹さんという方も、「人月の神話」でフローチャートが否定されていることについて「当然のこと」と書かれていました(「ソフトウェア開発の名著を読む」P46)。 「センス・オブ・プログラミング」の感想をあと少し書きますと、これも、影響を受けやすい(読者たる)私自身の責任ですが、アルゴリズムについてろくに知らないくせに軽視するという傾向がありました。最近それを自覚するに至り、まずは人並みにマスターしてから、と思っています。 それと、「インタプリタは翻訳しない」(インタプリタ自身が命令セットを持っている)ことを他書がどう書いているか、一時期、気になってました。「翻訳する」などとなっていても、表面上は誤りとも言い切れない表現の本が多いようです(そもそもあまり意識していないような)。その点、村瀬康治さんは、さすがに正確に書かれています。 「Java謎+落とし穴」、第二版を期待しつつ。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1860] Re:フローチャートについて
投稿者:(ぱ)こと管理人
2013/05/05 15:38:27

こんにちは。本を購入いただきありがとうございます。 >一方で、大滝みや子さんの「かんたんアルゴリズム解法」では、副題に「流れ図」と >あるように、フローチャートを扱っています。この本は、基本情報技術者試験の >テキストであるわけですが、国家試験である(らしい)同試験で、初心者に >フローチャートを学ばせていることと、先の常識との関係を、どのように整理すれば >よいでしょうか。 国家試験だからといって必ずしも適切な問題を出しているとは限りませんし、 ひとまず「基本情報 フロチャート」で検索したらまず出たのが以下の過去問でしたが、 http://www.k4.dion.ne.jp/~type_f/FE_18S_AM/FE_18S_AM_42.html この問題は、何についての理解を試しているのでしょう…… フロチャートの書式? それとも、アルゴリズムの基本的な考え方? フロチャートの書式を問う問題には見えないですよね。記号の意味自体は、 それこそ初めて見る人でも、だいたい見当がつきそうです。 この問題はアルゴリズムの考え方を問う問題で、たまたまそこでフロチャートを 使っていると見るべきであるように思います。それが適切かどうかはさておき。 (「Pascal風擬似言語」でもよいと思うのですが、言語非依存にしておかないと 都合が悪い事情はあるかも) >「センス・オブ・プログラミング」でも、基本情報技術者試験の試験範囲と >重なる入門的話題(基数、加算器など)も多く取り上げられていますことから、 >フローチャートはそのレベル以前、とも考えられず、フローチャートには >どういう態度で接すべきか、分かっていません。基本中の基本としては、 >必要なのでしょうか? 実のところフロチャートの記号なんて数種しかありませんし、記号の意味を 覚えておいて無駄になるということはないと思います。 ただ、入門者がおもちゃプログラムを作るときを含め、設計の役にはまったく 立たないと思います。理由は、「センス・オブ・プログラミング」にも書きましたが、 フロチャートは、いまどきの普通のプログラミング言語と比べても「機械語寄り」の 低レベルな記法であるからです。こんなものを書くくらいなら、対象の言語で 直接書くほうがよっぽどマシですし、その方が、コンパイラに怒られたり 動かしてバグを出したり等、勉強にもなります。 ただし、私もフロチャートを書くことはたまにはあって、それは、たとえば システムの運用担当者さん向けに、「エラーが発生したときにどうすべきか」といった 説明資料を作るような時です。これは、フロチャートにしたがって運用担当者さんが それこそCPUのように機械的に動けるように指示するものなので、より「低レベル」な 記法の方が好ましいわけです。 そのようなケース以外で、設計のためにフロチャートを書くことは、もちろん 実務ではありませんし、入門時にどうだったかといえば、私自身はBASIC時代に 入門しているわけでフロチャートも書きましたが、会社に入ったとき同期の連中は まるっきり初心者の人もいましたが、フロチャートなしで入門していました。 動坂亭さんが今までどんなプログラムを作ってこられたかわかりませんが、 何らかのテーマを決めてコードをガリガリ書いていけば100行くらいすぐですし、 100行のコードは、既にフロチャートで表現するのは難しいのではないでしょうか。 フロチャートを書くかどうか迷っている暇にどんどんコードを書いたほうが有益だと 思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1859] フローチャートについて
投稿者:動坂亭
2013/05/03 23:02:01

はじめまして。 私はプログラミング初心者ですが、前橋様のご著書は、「プログラミング言語を作る」を含め、全て所有しています(読めてはいません)。つまりファンということになり、影響も受けていると思います。 さて、「センス・オブ・プログラミング」でフローチャートを書いてはいけない、とされています。他の著者の本でも、このことは常識とされているものも見かけますし、素人たる私としても、疑問の余地がない事実なのであろうと推測します。(ごくごく単純な、構造化プログラミングぐらいの世界で、実務の役に立たないという趣旨なのかなと思ってます) 一方で、大滝みや子さんの「かんたんアルゴリズム解法」では、副題に「流れ図」とあるように、フローチャートを扱っています。この本は、基本情報技術者試験のテキストであるわけですが、国家試験である(らしい)同試験で、初心者にフローチャートを学ばせていることと、先の常識との関係を、どのように整理すればよいでしょうか。 「センス・オブ・プログラミング」でも、基本情報技術者試験の試験範囲と重なる入門的話題(基数、加算器など)も多く取り上げられていますことから、フローチャートはそのレベル以前、とも考えられず、フローチャートにはどういう態度で接すべきか、分かっていません。基本中の基本としては、必要なのでしょうか? ご教示いただけましたら幸いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[1858] kmaebashi.com停止のお詫び(1年ぶり2回目)
投稿者:(ぱ)こと管理人
2013/03/26 03:09:41

おそらく3/22~3/25にかけて、本Webサイトkmaebashi.comが停止しておりました。 管理人である私が、忙しさにかまけてレンタルサーバの利用料金の振込みを失念していたのが原因です。3/23(土曜)に振り込み、月曜に復旧していただきました。 利用者の皆様にはご迷惑をおかけしまして申しわけありませんでした。 1年前… orz http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=1812&range=1
[この投稿を含むスレッドを表示] [この投稿を削除]