K.Maebashi's BBS

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

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

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

[890] Re:Brainfuck
投稿者:(ぱ)
2007/02/20 02:13:25

Code Golf自体は以前「Matzにっき」からリンクを辿って、ページの構成が わかりにくいのもあってちょっと眺めただけでしたが。 >最近Pythonを覚えて、Code Golf(http://codegolf.com/) >というコンペにはまっているのですが、Brainfuck問題というのがあり、(ぱ)さんのソースを参考にさせて頂いたのですが、最後の問題が4秒以内という制限にTime outでパスしません。恐らくあと1秒くらい短縮しないとダメみたいです。 ええと、Brainfuck問題というのは http://codegolf.com/brainfuck ここのことで、「最後の問題」というのは、このページの一番下のところにある Rot-13の問題のことですか? WikipediaのRot-13のページ: http://ja.wikipedia.org/wiki/ROT13 で、課題は、 ・マスタングさんがPythonで書いたBrainfuckの処理系に、 ・課題のページで与えられているBrainfuckのコードを食わせて、 ・正しい解答が、4秒以内に得られること ですよね? (「4秒以内」という制限がどこに書いてあるのか、見つけられていませんが) >ネックは、入力の1文字1文字をループで回しているところだと思うのですが、3百万回のループが問題になっていそうです。スクリプトはループに弱いので。 うちの処理系をベースにしたのであれば、実行部分は、アルゴリズム的に小手先で 最適化できる余地はあんまりないのではないでしょうか(Brainfuck処理系には、 「]」が来たとき実行時に「[」を検索しているようなものもありますが、うちの 処理系はそのへんは読み込み時に済ませていますし)。 Pythonの実装に依存するチューニングの余地はあるかもしれません。読み込んだ Brainfuckプログラムをどのような内部形式で保持するか、とか。 >何か一般的に早くアウトプットを得る方法はあるのですか?とりあえず、'++++'などを'+4'のようにすればループ回数が劇的に減るかなと思っているのですが、まだ試していません。うまい文字列変換が思いつかないので。 5秒を4秒にする程度のことであれば、「++++」を「+4」のようなひとつのコードに するというアイディアで十分かとは思いますが、それをすべきタイミングは Brainfuckソースを読み込んで内部形式に変換するところでしょうから、 「文字列変換」ではないですよね。 >あと(ぱ)さんはスクリプトは勉強とかされていますか? (「スクリプト」が何なのかが不明ですが)いろいろな言語の本やら解説ページやら 読んではいますが、簡単なチュートリアルの例題とかではなく、実際に日頃から 自分の問題を解くために使っていないと、「身に付く」ことにはならないようですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[889] Brainfuck
投稿者:マスタング
2007/02/20 02:13:25

お久しぶりです、マスタングです。もし分かれば教えて欲しいです。 最近Pythonを覚えて、Code Golf(http://codegolf.com/) というコンペにはまっているのですが、Brainfuck問題というのがあり、(ぱ)さんのソースを参考にさせて頂いたのですが、最後の問題が4秒以内という制限にTime outでパスしません。恐らくあと1秒くらい短縮しないとダメみたいです。 ネックは、入力の1文字1文字をループで回しているところだと思うのですが、3百万回のループが問題になっていそうです。スクリプトはループに弱いので。 何か一般的に早くアウトプットを得る方法はあるのですか?とりあえず、'++++'などを'+4'のようにすればループ回数が劇的に減るかなと思っているのですが、まだ試していません。うまい文字列変換が思いつかないので。他に何かうまい方法ありますか? あと(ぱ)さんはスクリプトは勉強とかされていますか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[888] Re:大感激です
投稿者:(ぱ)
2007/02/20 02:13:25

>プログラミング(超)初心者です。 はじめまして。ほめていただきありがとうございます。 最近仕事に追われておりまして、Webページの更新もすっかり滞り、 この掲示板も放置状態でしたが、久々に投稿いただきその点でもありがとうございます。 >前橋先生の他の本を購入しようと思っています。 それはもう是非(商魂モード)
[この投稿を含むスレッドを表示] [この投稿を削除]
[887] 大感激です
投稿者:White_Star_Cat
2007/02/20 02:13:25

プログラミング(超)初心者です。 「C言語体当たり学習 徹底入門」を図書館で借りました。 あまりのわかりやすさに大感激です。 (^o^)/ 前橋先生の他の本を購入しようと思っています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[886] 管理者により削除されました
2007/02/20 02:17:27

広告なので削除しました。
[この投稿を含むスレッドを表示]
[885] 管理者により削除されました
2007/02/20 02:19:26

広告なので削除。
[この投稿を含むスレッドを表示]
[884] Re:crowbar ver.0.4.02
投稿者:kit
2007/02/20 02:13:25

>そういえばLGPLはスタティックリンクはだめでしたっけ。すっかり忘れてました。 必ずしもスタティックリンクが駄目というわけじゃないですが、 スタティックリンクすると、 LGPL http://www.gnu.org/licenses/lgpl.html の第6項 a) みたいな制約を満たさないといけなくなります。 すなわち、LGPL なライブラリを再リンクできるようにするため、 アプリケーションの側のオブジェクトコードか、ソースコードを 提供する必要が生じます。 それよりはダイナミックリンクして、第6項 b) の適用を選んだ方が 楽なことが多いんじゃないかと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[883] 本当の基礎からのWebアプリケーション入門 ―Webサーバを作ってみよう―
投稿者:(ぱ)
2007/02/20 02:13:25

Subject変えました。 >>「本当の基礎からのWebアプリケーション入門 ―Webサーバを作ってみよう―」 > > ネットワークに関してはほとんど無知なので何とも言えませんが、Webサーバの >作成は原点に戻りすぎではありませんか?随分と役に立つとは思いますけど。 昔、「インターネットを256倍使うための本」というのがあって、その中に、 「シェルによるhttpdの実装」というのがありました。 …今探したらソースが公開されていました。こちらです。 http://www.ascii.co.jp/books/support/4-7561-1663-9/supplement/0001/shttpd こちらによれば、 http://www.ascii.co.jp/books/support/4-7561-1663-9/supplement/ 「筆者が偉いんではなく、shが偉いんでもなく、ズバリinetdが偉い」そうですが、 その部分をJavaかなんかでちょろっと書いてしまえば、Webサーバとしての機能は すぐに実装できそうですし、それをベースにいろいろ拡張すれば勉強になるんじゃ ないかなあ、と思うわけです。ブラウザが何を送ってきてるのか目で見えますし、 どう対応すればいいかもわかるので。
[この投稿を含むスレッドを表示] [この投稿を削除]
[882] Re:crowbar ver.0.4.02
投稿者:(ぱ)
2007/02/20 02:13:25

>SDL は LGPL なので、スタティックリンクするよりは、Windows の場合なら >実行ファイルと同じディレクトリに展開されるようにアーカイブを作る方が >いいでしょうね。 そういえばLGPLはスタティックリンクはだめでしたっけ。すっかり忘れてました。 >LGPL よりライセンスの緩いライブラリとしては Allegro というのがあるよう >です。http://www.talula.demon.co.uk/allegro/ こちらも情報ありがとうございます。 >行数については、大学時代には、1日1000行、6日で6000行書いちゃう先輩が >いました。まあ、この人は特別で、絶対真似できんと当時から言ってましたが。 現在なら、1日1000行はやれないこともないのですが…あくまで「非常時」だけですね。 後で読みたくないコードになることが多いので。
[この投稿を含むスレッドを表示] [この投稿を削除]
[881] Re:『センス・オブ・プログラミング!』誤植
投稿者:トル
2007/02/20 02:13:25

>Cで掲示板というのは別の意味ですごいというか、ずいぶん手間がかかったのでは >ないでしょうか。PHPを覚えるほうが手っ取り早いような。  PHPの$_POSTの代わりの物をせっせと作っていたりした辺りを手間と言えば確かにPHPより はずいぶん手間がかかりました。  一番時間がかかったのはデータベースを使わなかったので、保存や読み込みの辺りです。 ちょうどその頃「プログラミング言語を作る」でyaccとlexが使われていたので、興味本位で 使ってみたりしました。楽ができたかと聞かれますと微妙ですが。 >「本当の基礎からのWebアプリケーション入門 ―Webサーバを作ってみよう―」  ネットワークに関してはほとんど無知なので何とも言えませんが、Webサーバの作成は原点に 戻りすぎではありませんか?随分と役に立つとは思いますけど。 >掲示板のプログラムを公開することは、Webページのひとつも立てれば可能では >ないでしょうか。お金もかかりませんし。  それは可能ですが、見てくれる相手が未だにいないのが悩みの種です。メーリングリストなどに 参加してみたいとは思うのですが、今は色々とありますのでまだ先の事になると思いますし。
[この投稿を含むスレッドを表示] [この投稿を削除]
[880] Re:『センス・オブ・プログラミング!』誤植
投稿者:(ぱ)
2007/02/20 02:13:25

>P.198 L.3 (4-6-1) >Line polyline_array[LINE_MAX]; 確認しました。ご指摘ありがとうございました。正誤表に入れておきます。 > 話が変わりますが、「PHPとMySQLで掲示板を作る」を前に読ませていただき、 >私も作ってみたいな~、と思い、前橋さんの掲示板を参考にして作ってみました。 >まともに使える言語がCしかなく、練習の意味合いも込めてCで作ったのですが、 >あまり上手くは作れませんでした。 Cで掲示板というのは別の意味ですごいというか、ずいぶん手間がかかったのでは ないでしょうか。PHPを覚えるほうが手っ取り早いような。 とはいえ、CGIはWebアプリケーションの基本ですから、(Perlでもよいので)一度は 作っておくべきものかとは思います。最近は、PHPやらJSPやらStrutsやら、果ては ASP.NET等いろいろ便利な道具があって、もちろんそれはそれでよいのですが、 結局下回りを知らないと困ることもありますから。 「本当の基礎からのWebアプリケーション入門 ―Webサーバを作ってみよう―」 なんての、誰か書いてくれませんかね… > 独学で、周りにプログラミングのできる知り合いがおらず、評価したりして >もらえないので寂しいです。 掲示板のプログラムを公開することは、Webページのひとつも立てれば可能では ないでしょうか。お金もかかりませんし。 > あと、「プログラミング言語を作る」も楽しく読ませていただいています。 ありがとうございます。停滞しておりましてすみません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[879] Re:crowbar ver.0.4.02
投稿者:kit
2007/02/20 02:13:25

SDL は LGPL なので、スタティックリンクするよりは、Windows の場合なら 実行ファイルと同じディレクトリに展開されるようにアーカイブを作る方が いいでしょうね。 Linux の場合は、ディストリビューションに最初からついてきて、デフォルト でインストールされることが多いので、特に考慮の必要はないと思います。 LGPL よりライセンスの緩いライブラリとしては Allegro というのがあるよう です。http://www.talula.demon.co.uk/allegro/ 行数については、大学時代には、1日1000行、6日で6000行書いちゃう先輩が いました。まあ、この人は特別で、絶対真似できんと当時から言ってましたが。 大学祭の展示が素晴らしいってのは同感です。
[この投稿を含むスレッドを表示] [この投稿を削除]
[878] 『センス・オブ・プログラミング!』誤植
投稿者:トル
2007/02/20 02:13:25

正誤表に載っていませんでしたので、お知らせします。(初版第一刷) P.198 L.3 (4-6-1) Line polyline_array[LINE_MAX]; とありますが、 PolyLine polyline_array[LINE_MAX]; ではないでしょうか?  話が変わりますが、「PHPとMySQLで掲示板を作る」を前に読ませていただき、 私も作ってみたいな~、と思い、前橋さんの掲示板を参考にして作ってみました。 まともに使える言語がCしかなく、練習の意味合いも込めてCで作ったのですが、 あまり上手くは作れませんでした。  独学で、周りにプログラミングのできる知り合いがおらず、評価したりしてもらえないの で寂しいです。  あと、「プログラミング言語を作る」も楽しく読ませていただいています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[877] Re:crowbar ver.0.4.02
投稿者:(ぱ)
2007/02/20 02:13:25

どうもです。返答が遅くなりましてすみません。 >> そろそろWindowsに特化してもいいんじゃないかと思っていたり(謎)。 >これって昔聞いたあの話の関連ですかね。  この文言はcrowbar 0.4の時のToDoリストに入ってまして、この時は そういうこともそれなりに考えていたのですが、今はちょっと別方面に 手を出しつつあって、どうしようかなあ、という状態です。 >だとすると、SDL をライブラリとして使えば、Windows に特化しなくても >いいのではないかって気もします。  毎度アドバイスありがとうございます。  ちょっと調べてみましたが、このへんを見る限り、使い方はそんなに 難しくなさそうです。 http://lazyfooproductions.com/SDL_tutorials/index.php  ただ、あっち方面を目指す場合、「.EXEファイル単体で動く」というのは それなりに重要な用件であるように思います。crowbarもそっち方面を目指すなら、 HSPやひまわりがそうであるように、インタプリタとスクリプトをひとつの .EXEにまとめられなきゃな、と思っていました。そこに別のDLLが必要に なるというのはちょっと…(Windows限定なら、staticに固めてしまえばよいのかも しれませんが) >大学祭で見たアレも SDL で作ってた >そうです。たかだか千数百行であれくらいできてしまうってのも驚き >でしたが。  そう思います。  でも、自分が大学生だった頃のことを考えると、「千数百行」は「たかだか」では なかったわけで、その意味でもびっくりです。今の現役生はがんばってるなあ、と。  
[この投稿を含むスレッドを表示] [この投稿を削除]
[876] crowbar ver.0.4.02
投稿者:kit
2007/02/20 02:13:25

> そろそろWindowsに特化してもいいんじゃないかと思っていたり(謎)。 これって昔聞いたあの話の関連ですかね。 だとすると、SDL をライブラリとして使えば、Windows に特化しなくても いいのではないかって気もします。大学祭で見たアレも SDL で作ってた そうです。たかだか千数百行であれくらいできてしまうってのも驚き でしたが。
[この投稿を含むスレッドを表示] [この投稿を削除]
[874] 管理者により削除されました
2007/02/20 02:18:23

広告なので削除しました。
[この投稿を含むスレッドを表示]
[872] Re:List 4-6
投稿者:(ぱ)
2007/02/20 02:13:25

> たとえ話は好きじゃないですが、材木屋さんになったと想像してください。 >材木がコンベアーに(縦方向に)乗って流れてくるのですが、材木の長さはまちまちです。 >あなたはそれを箱詰めして発送しなければなりません。 1点補足します。 あなたが立っている場所からはコンベアーの端しか見えず、材木はとても長いので、 材木が最後まで流れてこないと材木の長さがわからない、と思ってください。 …やっぱり、このたとえ話もはずしたかな?
[この投稿を含むスレッドを表示] [この投稿を削除]
[871] Re:List 4-6
投稿者:(ぱ)
2007/02/20 02:13:25

>お世話になります。プログラミング初心者です。 > >「ポインタ完全制覇」のp218のList 4-6のプログラムで質問させてください。 > >76--79行目でmallocを使っているのは何故なのでしょうか。 > >代わりに、 > >return st_line_buffer; > >では駄目なのでしょうか。  マスタングさんが書いておられるように、この書き方では、2行目が読み込まれたときに1行目の領域が上書きされてしまいます。st_line_bufferが指す先の領域はひとつしかないからです。  ただし、たとえば以下のように書けば、 temp = st_line_buffer; st_line_buffer = NULL; st_current_buffer_size = NULL; return temp;  次のread_line()の呼び出しでは新たな領域が割り当てられますから、正しく動作することでしょう。ただし、st_line_bufferはALLOC_SIZE(256バイト)ずつまとめて伸びていきますから、行の長さによってはメモリが無駄になります。  256バイトずつではなく、1バイトずつrealloc()していけばこの無駄はなくせますが、p.221で説明しているようにrealloc()はそれなりに重い関数なので、あまり頻繁にrealloc()しないため、こうしているわけです。  List 4-6では、以下の戦略をとっています。 (1)ファイルから文字を1文字ずつ読み込み、いったん「一時置き場」に蓄える。 (2)「一時置き場」はひとつしかない。 (3)行が「一時置き場」に入りきらない場合、「一時置き場」は256バイトを単位に  まとめて拡張される。一時置き場が縮むことはない。 (4)行を最後まで読み終わり、行の長さが確定した時点で、その行の長さに  ぴったり合わせたサイズの領域を新たに確保し、そこにコピーして、  利用者に返す。  たとえ話は好きじゃないですが、材木屋さんになったと想像してください。材木がコンベアーに(縦方向に)乗って流れてくるのですが、材木の長さはまちまちです。あなたはそれを箱詰めして発送しなければなりません。  コンベアーの端に広めの作業領域を作り、いったん材木をそこに置いて、正確な長さを測ってから、ぴったりの大きさの箱を作るという方法が無駄がないと思いませんか? このプログラムではそういう方針をとっているわけです。  
[この投稿を含むスレッドを表示] [この投稿を削除]
[870] Re:定義
投稿者:(ぱ)
2007/02/20 02:13:25

>僕が混乱したのは、きっと、1次式の定義に「式」という1次式を含む未定義の >クラスが登場したと受け止めたからだと思います。 その受け止め方は正解です。そして再帰的定義というのはそういうものです。 ちょうどうちのページにこんな文書がありまして、簡易的な電卓の構文規則を載せています。 http://kmaebashi.com/programmer/devlang/yacclex.html 7: expression /* 「式」とは… */ 8: : term /* 「項」、 */ 9: | expression ADD term /* または、「式」 + 「項」 */ 10: | expression SUB term /* または、「式」 - 「項」 */ 11: ; 12: term /* 「項」とは、 */ 13: : primary_expression /* 「一次式」、 */ 14: | term MUL primary_expression /* または、「項」 * 「一次式」 */ 15: | term DIV primary_expression /* または、「項」 / 「一次式」 */ 16: ; 17: primary_expression /* 「一次式」とは… */ 18: : DOUBLE_LITERAL /* 実数のリテラル */ 19: ; この電卓は括弧が使えないのでprimary_expressionの定義は異なりますが、 この電卓でも、式の定義にはやっぱり式が登場します。 K&Rをお持ちであれば、巻末の構文規則(p.298あたり)でCの式の構文が定義されています。 >式は1次式から構成されるものなのでしょうが、どのように構成されるものをそう言うのか、 >そこでの記述では不明だと思います。定義になっていないのでは。 ポインタ完全制覇における式の定義に関する説明は、 ・「式には1次式と呼ばれるものがあります」 ・「式に対して演算子を適用したり、演算子でもって式と式をつなぎ合わせたもののことも、   また式と呼びます」  となっています。  Cには関数呼び出し等を含めたくさんの演算子がありますし、sizeof(型)はどうなるのか等、この定義では曖昧すぎるというご意見はあるかと思いますが、この場所でそれを延々と書くのもよろしくないと判断した、のだと思います。ずいぶん前の話なので記憶が曖昧ですが。  
[この投稿を含むスレッドを表示] [この投稿を削除]
[869] Re:List 4-6
投稿者:マスタング
2007/02/20 02:13:25

一部、間違えました。 (誤) >char s1, s2; (正) char *s1, *s2;
[この投稿を含むスレッドを表示] [この投稿を削除]
[868] Re:List 4-6
投稿者:マスタング
2007/02/20 02:13:25

>「ポインタ完全制覇」のp218のList 4-6のプログラムで質問させてください。 > >76--79行目でmallocを使っているのは何故なのでしょうか。 > >代わりに、 > >return st_line_buffer; > >では駄目なのでしょうか。違いがわからないのですが。 これは、オブジェクト指向の防御的コピーに近いですが、 read_line()が、st_line_bufferを素直に返している訳ではないので ちょっと違うかもしれません。 read_line.cファイルが1つのオブジェクト、st_line_bufferがprivateな メンバと考えると、実装詳細を直接戻すと、カプセル化が崩れるという 考え方も可能だと思います。 違いは以下です。 // もし、read_line()で、st_line_bufferを返す場合 char s1, s2; s1 = read_line(fp); // 例えば、s1が、"abc" s2 = read_line(fp); // 例えば、s2が、"def" // ここで、s1もs2も、"def"となる! // もし、read_line()で、コピーを返せば、 // s1は"abc"、s2は"def"となる。
[この投稿を含むスレッドを表示] [この投稿を削除]
[867] List 4-6
投稿者:黒霧お湯割
2007/02/20 02:13:25

お世話になります。プログラミング初心者です。 「ポインタ完全制覇」のp218のList 4-6のプログラムで質問させてください。 76--79行目でmallocを使っているのは何故なのでしょうか。 代わりに、 return st_line_buffer; では駄目なのでしょうか。違いがわからないのですが。 ご教授いただけると幸いです。
[この投稿を含むスレッドを表示] [この投稿を削除]
[866] Re:定義
投稿者:黒霧お湯割
2007/02/20 02:13:25

ご回答ありがとうございました。 > 説明不足でしたでしょうか。 > 「定義するもの自身をその定義で書いた」もののことを「再帰的定義」と言いまして、プログラミングの世界ではさほど珍しいものではありません。 僕が混乱したのは、きっと、1次式の定義に「式」という1次式を含む未定義のクラスが登場したと受け止めたからだと思います。 式は1次式から構成されるものなのでしょうが、どのように構成されるものをそう言うのか、そこでの記述では不明だと思います。定義になっていないのでは。
[この投稿を含むスレッドを表示] [この投稿を削除]
[865] Re:定義
投稿者:774RR
2007/02/20 02:13:25

>そのため 「部分式 1+2*3 」に括弧をつけて (1+2*3) と書くと、これが部分式になるという規則が必要なのです。 typo これぢゃ意味判らん orz 部分式 1+2*3 に括弧をつけて (1+2*3) と書くと、これが一次式になる ですな。
[この投稿を含むスレッドを表示] [この投稿を削除]
[864] Re:定義
投稿者:774RR
2007/02/20 02:13:25

もっとあえて蛇足するなら (1+2*3)+4*5 とかを考えるといいかもしれません この例では括弧内を先に、括弧外の + を後に評価してもらわなければなりません。 もっというなら + より先に 4*5 を評価してもらわなければなりません。 そのため 「部分式 1+2*3 」に括弧をつけて (1+2*3) と書くと、これが部分式になるという規則が必要なのです。 実際のプログラムも再帰を使います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[863] Re:定義
投稿者:(ぱ)
2007/02/20 02:13:25

>1次式の定義の中で、「式を()で囲んだもの.」とあるのですが、 >定義するもの自身をその定義で書いたらいけないと思うのですが。  説明不足でしたでしょうか。  「定義するもの自身をその定義で書いた」もののことを「再帰的定義」と言いまして、プログラミングの世界ではさほど珍しいものではありません。 「再帰的定義」でGoogle: http://www.google.co.jp/search?hl=ja&q=%E5%86%8D%E5%B8%B0%E7%9A%84%E5%AE%9A%E7%BE%A9&lr= >きっと、その上3つを指しているんだと思うのですが・・・。 ポインタ完全制覇p.165より引用します。 | 1次式とは以下のものを指します。 | ・識別子(変数名、関数名のこと) | ・定数(整数定数と浮動小数点定数を含む) | ・文字列リテラル(""で囲まれた文字列) | ・式を()で囲んだもの  「その上3つ」と解釈すると、「(hoge)」とか「(0.5)」とか「("abc")」とかになりますが、「(hoge + 5)」と書いても1次式なので、その解釈ではまずいです。「その上3つ」は「1次式」の定義ですが、4つ目では「『式』を()で囲んだもの」と書いています。
[この投稿を含むスレッドを表示] [この投稿を削除]
[862] 定義
投稿者:黒霧お湯割
2007/02/20 02:13:25

「C言語ポインタ完全制覇」の165ページなのですが。1次式の定義の中で、「式を()で囲んだもの.」とあるのですが、定義するもの自身をその定義で書いたらいけないと思うのですが。きっと、その上3つを指しているんだと思うのですが・・・。僕には精神衛生上きついっす。
[この投稿を含むスレッドを表示] [この投稿を削除]
[861] Re:「疑り深いあなたのためのオブジェクト指向再入門」読みました
投稿者:(ぱ)
2007/02/20 02:13:25

>これは、オブジェクト指向とは言わないのではないでしょうか? >あえて言うなら、オブジェクト指向の特徴の一つである『データ抽象化』でしか >ないと思います。オブジェクト指向というには、『継承』の概念が実装されている >必要もあると思います。  まあそうなのかもしれませんけど、「どこまでやってるとオブジェクト指向であるか」といった用語の定義的な議論は、既にずいぶん曖昧な定義で使われている「オブジェクト指向」という言葉については、不毛だと思います。 前にもあげたページだと思いますが http://www.shiro.dreamhost.com/scheme/trans/reesoo-j.html | オブジェクト指向というものが動く標的であるため、オブジェクト指向の熱心な | 支持者はこのメニューのうちの適当なサブセットを気まぐれに選んで、それを以って | 他の言語はオブジェクト指向ではないと説得しようとする。 私も以下のように書きました。 http://kmaebashi.com/programmer/object/intro.html | ※2 「それは抽象データ型だ」という意見もあるかもしれませんが、抽象データ型は | オブジェクト指向に至るためには必須の概念です。 Matzにっきより。 http://www.rubyist.net/~matz/20030729.html#p01 |「オブジェクト指向」のもっとも重要な概念は通常のプログラミングにも登場して | いる。たとえば、Cで | FILE *f = fopen(path, "r"); | という呼び出しは「pathにあるファイルをオープンして、ファイルオブジェクトを | 得る」という処理そのものだ。別にオブジェクト指向は必要ない。CのFILE*には | fprintf()やfclose()などのいくつかの「メソッド」がある。 >(ただし、Xtも単なる抽象データ型だったかも。継承を実装していたか記憶が > 定かではありません。 継承は実現していましたね。たとえばMotifのRowColumnはManagerのサブクラスです。 # んで、JavaのレイアウトマネージャがComponentクラス階層の中になく、 # プラグイン的に突っ込むようになっているのを見て衝撃を受けましたとも。
[この投稿を含むスレッドを表示] [この投稿を削除]
[860] Re:「疑り深いあなたのためのオブジェクト指向再入門」読みました
投稿者:ytanaka
2007/02/20 02:13:25

>オブジェクト指向の標準関数がありますね。FILE * を介して行なうファイル入出力です これは、オブジェクト指向とは言わないのではないでしょうか? あえて言うなら、オブジェクト指向の特徴の一つである『データ抽象化』でしかないと思います。オブジェクト指向というには、『継承』の概念が実装されている必要もあると思います。 >その他、X Window System の Xlib やそのツールキットもオブジェクト指向です。 私は、学生の頃、Xtのソースを読んで、『なんだこのコーデイングは?なんで構造体に関数のポインタぶち込んでるんや?』『おお!そういうことか!すげー!』と凄い衝撃を覚えました。 このころは、まだオブジェクト指向という言葉を知らなかったのですが、あとからC++を勉強したときには、C言語のテクニックを駆使して無理やりオブジェクト指向に仕上げたXtはやっぱり凄かったんだと再認識しましたね。(ただし、Xtも単なる抽象データ型だったかも。継承を実装していたか記憶が定かではありません。でも、構造体に関数をぶち込んでいる時点でFILEとfopen等よりも高度ですね。関数のポインタを書き換えて振る舞いを変えさせることもできましたしね。)
[この投稿を含むスレッドを表示] [この投稿を削除]
[859] Re:JAVA VMエラー
投稿者:aaa
2007/02/20 02:13:25

>本屋でJAVA謎+落とし穴徹底解明を見つけました。 >あまりにも難しい内容ですが今困っていますので教えてください。 >WIN XPSP2で証券会社のHPにアクセスすると下記ERRで強制終了します。 >またSUN JAVAコンソールをクイックしても同じERRになります。 > > ># ># An unexpected error has been detected by HotSpot Virtual Machine: ># ># EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d6c20e6, pid=1228, tid=2324 ># ># Java VM: Java HotSpot(TM) Client VM (1.5.0_02-b09 mixed mode) ># Problematic frame: ># V [jvm.dll+0x820e6] ># > >--------------- T H R E A D --------------- > >Current thread (0x0562a6a8): JavaThread "main" [_thread_in_vm, id=2324] > >siginfo: ExceptionCode=0xc0000005, reading address 0x00000008 > >Registers: >EAX=0x00000000, EBX=0x00000000, ECX=0x00000008, EDX=0x00000000 >ESP=0x069f5f74, EBP=0x069f5fac, ESI=0x0562a6a8, EDI=0x00000000 >EIP=0x6d6c20e6, EFLAGS=0x00010246 > >Top of Stack: (sp=0x069f5f74) >0x069f5f74: 6d6c494b 00000000 00000000 0562a764 >0x069f5f84: 6d317763 0000000c 09352923 00000000 >0x069f5f94: 100f38a0 00000000 00000000 056cf3a8 >0x069f5fa4: 0562a6a8 00000000 069f5fd0 6d304c3a >0x069f5fb4: 0562a764 6d317774 00000000 0562a764 >0x069f5fc4: 00000000 00000000 0562a764 069f5ff8 >0x069f5fd4: 6d30543a 0562a764 069f6003 6d317774 >0x069f5fe4: 6d317768 6d317750 055f5684 0562a764 > >Instructions: (pc=0x6d6c20e6) >0x6d6c20d6: e8 0c 2a ff ff c3 8b 44 24 04 8b 0d b0 64 7a 6d >0x6d6c20e6: 8b 04 01 c3 8b 44 24 04 8b 0d ac 64 7a 6d 8b 04 > > >Stack: [0x06900000,0x06a00000), sp=0x069f5f74, free space=983k >Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code) >V [jvm.dll+0x820e6] >C [java.dll+0x4c3a] >C [java.dll+0x543a] >C [java.dll+0x54d3] >C [java.dll+0x18ba] >j java.lang.ClassLoader$NativeLibrary.load(Ljava/lang/String;)V+0 >j java.lang.ClassLoader.loadLibrary0(Ljava/lang/Class;Ljava/io/File;)Z+300 >j java.lang.ClassLoader.loadLibrary(Ljava/lang/Class;Ljava/lang/String;Z)V+48 >j java.lang.Runtime.load0(Ljava/lang/Class;Ljava/lang/String;)V+57 >j java.lang.System.load(Ljava/lang/String;)V+7 >v ~StubRoutines::call_stub >V [jvm.dll+0x818e8] >V [jvm.dll+0xd4989] >V [jvm.dll+0x817b9] >V [jvm.dll+0x887ae] >C [jpishare.dll+0x4380] >C [jpishare.dll+0x1eb2] >C [jpiexp32.dll+0x5744] >C [npjpi150_02.dll+0x1abf] >C [ole32.dll+0x2206a] >C [ole32.dll+0x40a03] >C [ole32.dll+0x4071d] >C [ole32.dll+0x27b76] >C [ole32.dll+0x27a62] >C [ole32.dll+0x27c48] >C [ole32.dll+0x27bf4] >C [ole32.dll+0x4112b] >C [ole32.dll+0x410e2] >C [ole32.dll+0x27c9b] >C [ole32.dll+0x27a62] >C [ole32.dll+0x27a7c] >C [ole32.dll+0x27a62] >C [ole32.dll+0x278f6] >C [ole32.dll+0x277af] >C [ole32.dll+0x27731] >C [urlmon.dll+0x3c5c7] >C [urlmon.dll+0x3cb1e] >C [urlmon.dll+0x3ce5a] >C [mshtml.dll+0x273785] >C [mshtml.dll+0x273afa] >C [mshtml.dll+0x26e889] >C [mshtml.dll+0x275cfe] > >Java frames: (J=compiled Java code, j=interpreted, Vv=VM code) >j java.lang.ClassLoader$NativeLibrary.load(Ljava/lang/String;)V+0 >j java.lang.ClassLoader.loadLibrary0(Ljava/lang/Class;Ljava/io/File;)Z+300 >j java.lang.ClassLoader.loadLibrary(Ljava/lang/Class;Ljava/lang/String;Z)V+48 >j java.lang.Runtime.load0(Ljava/lang/Class;Ljava/lang/String;)V+57 >j java.lang.System.load(Ljava/lang/String;)V+7 >v ~StubRoutines::call_stub > >--------------- P R O C E S S --------------- > >Java Threads: ( => current thread ) > 0x066f0878 JavaThread "traceMsgQueueThread" daemon [_thread_blocked, id=2540] > 0x066decc0 JavaThread "AWT-Windows" daemon [_thread_in_native, id=560] > 0x066de8d8 JavaThread "AWT-Shutdown" [_thread_blocked, id=460] > 0x066dab40 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=1336] > 0x06657588 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=2148] > 0x0659d750 JavaThread "CompilerThread0" daemon [_thread_blocked, id=292] > 0x06554df8 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=2536] > 0x06592a50 JavaThread "Finalizer" daemon [_thread_blocked, id=2532] > 0x0563a580 JavaThread "Reference Handler" daemon [_thread_blocked, id=2528] >=>0x0562a6a8 JavaThread "main" [_thread_in_vm, id=2324] > >Other Threads: > 0x06581580 VMThread [id=2496] > 0x05659768 WatcherThread [id=744] > >VM state:not at safepoint (normal execution) > >VM Mutex/Monitor currently owned by a thread: None > >Heap > def new generation total 576K, used 334K [0x100b0000, 0x10150000, 0x10810000) > eden space 512K, 52% used [0x100b0000, 0x100f3a80, 0x10130000) > from space 64K, 100% used [0x10140000, 0x10150000, 0x10150000) > to space 64K, 0% used [0x10130000, 0x10130000, 0x10140000) > tenured generation total 1408K, used 201K [0x10810000, 0x10970000, 0x160b0000) > the space 1408K, 14% used [0x10810000, 0x10842500, 0x10842600, 0x10970000) > compacting perm gen total 8192K, used 3930K [0x160b0000, 0x168b0000, 0x1a0b0000) > the space 8192K, 47% used [0x160b0000, 0x16486a20, 0x16486c00, 0x168b0000) >No shared spaces configured. > >Dynamic libraries: >0x00400000 - 0x00419000 C:\Program Files\Internet Explorer\iexplore.exe >0x7c940000 - 0x7c9dd000 C:\WINDOWS\system32\ntdll.dll >0x7c800000 - 0x7c931000 C:\WINDOWS\system32\kernel32.dll >0x77bc0000 - 0x77c18000 C:\WINDOWS\system32\msvcrt.dll >0x77cf0000 - 0x77d7f000 C:\WINDOWS\system32\USER32.dll >0x77ed0000 - 0x77f16000 C:\WINDOWS\system32\GDI32.dll >0x77f20000 - 0x77f96000 C:\WINDOWS\system32\SHLWAPI.dll >0x77d80000 - 0x77e29000 C:\WINDOWS\system32\ADVAPI32.dll >0x77e30000 - 0x77ec1000 C:\WINDOWS\system32\RPCRT4.dll >0x76350000 - 0x764bc000 C:\WINDOWS\system32\SHDOCVW.dll >0x765c0000 - 0x76653000 C:\WINDOWS\system32\CRYPT32.dll >0x77c40000 - 0x77c52000 C:\WINDOWS\system32\MSASN1.dll >0x75410000 - 0x75485000 C:\WINDOWS\system32\CRYPTUI.dll >0x76be0000 - 0x76c0e000 C:\WINDOWS\system32\WINTRUST.dll >0x76c40000 - 0x76c68000 C:\WINDOWS\system32\IMAGEHLP.dll >0x770d0000 - 0x7715c000 C:\WINDOWS\system32\OLEAUT32.dll >0x76970000 - 0x76aad000 C:\WINDOWS\system32\ole32.dll >0x59250000 - 0x592a4000 C:\WINDOWS\system32\NETAPI32.dll >0x76660000 - 0x76704000 C:\WINDOWS\system32\WININET.dll >0x76f10000 - 0x76f3c000 C:\WINDOWS\system32\WLDAP32.dll >0x77bb0000 - 0x77bb8000 C:\WINDOWS\system32\VERSION.dll >0x762e0000 - 0x762fd000 C:\WINDOWS\system32\IMM32.DLL >0x60740000 - 0x60749000 C:\WINDOWS\system32\LPK.DLL >0x73f80000 - 0x73feb000 C:\WINDOWS\system32\USP10.dll >0x77160000 - 0x77262000 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll >0x7d5b0000 - 0x7ddad000 C:\WINDOWS\system32\SHELL32.dll >0x5ab60000 - 0x5abf7000 C:\WINDOWS\system32\comctl32.dll >0x58730000 - 0x58768000 C:\WINDOWS\system32\uxtheme.dll >0x74660000 - 0x746ab000 C:\WINDOWS\system32\MSCTF.dll >0x75ed0000 - 0x75fcd000 C:\WINDOWS\system32\BROWSEUI.dll >0x20000000 - 0x20010000 C:\WINDOWS\system32\browselc.dll >0x76d90000 - 0x76db2000 C:\WINDOWS\system32\appHelp.dll >0x76f80000 - 0x76fff000 C:\WINDOWS\system32\CLBCATQ.DLL >0x77000000 - 0x770ab000 C:\WINDOWS\system32\COMRes.dll >0x73620000 - 0x7364e000 C:\WINDOWS\system32\msctfime.ime >0x4edc0000 - 0x4ee16000 C:\WINDOWS\system32\imjp81.ime >0x648f0000 - 0x649c0000 C:\WINDOWS\system32\imjp81k.dll >0x3b100000 - 0x3b11b000 C:\WINDOWS\IME\IMJP8_1\Dicts\IMJPCD.DIC >0x75c40000 - 0x75cdc000 C:\WINDOWS\system32\urlmon.dll >0x77fa0000 - 0x77fb1000 C:\WINDOWS\system32\Secur32.dll >0x76570000 - 0x765c0000 C:\WINDOWS\System32\cscui.dll >0x76550000 - 0x7656c000 C:\WINDOWS\System32\CSCDLL.dll >0x76040000 - 0x76199000 C:\WINDOWS\system32\SETUPAPI.dll >0x10000000 - 0x100af000 c:\program files\google\googletoolbar1.dll >0x71a00000 - 0x71a0b000 C:\WINDOWS\system32\WSOCK32.dll >0x719e0000 - 0x719f7000 C:\WINDOWS\system32\WS2_32.dll >0x719d0000 - 0x719d8000 C:\WINDOWS\system32\WS2HELP.dll >0x76af0000 - 0x76b1b000 C:\WINDOWS\system32\WINMM.dll >0x5a820000 - 0x5a827000 C:\WINDOWS\system32\serwvdrv.dll >0x58a60000 - 0x58a67000 C:\WINDOWS\system32\umdmxfrm.dll >0x74cd0000 - 0x74d61000 C:\WINDOWS\system32\MLANG.dll >0x76940000 - 0x76964000 C:\WINDOWS\system32\ntshrui.dll >0x76ad0000 - 0x76ae1000 C:\WINDOWS\system32\ATL.DLL >0x759b0000 - 0x75a60000 C:\WINDOWS\system32\USERENV.dll >0x71a50000 - 0x71a62000 C:\WINDOWS\system32\MPR.dll >0x75eb0000 - 0x75eb7000 C:\WINDOWS\System32\drprov.dll >0x71b60000 - 0x71b6e000 C:\WINDOWS\System32\ntlanman.dll >0x71c20000 - 0x71c35000 C:\WINDOWS\System32\NETUI0.dll >0x71be0000 - 0x71c20000 C:\WINDOWS\System32\NETUI1.dll >0x71bd0000 - 0x71bd7000 C:\WINDOWS\System32\NETRAP.dll >0x71b40000 - 0x71b53000 C:\WINDOWS\System32\SAMLIB.dll >0x75ec0000 - 0x75ec9000 C:\WINDOWS\System32\davclnt.dll >0x73cc0000 - 0x73cd3000 C:\WINDOWS\system32\shgina.dll >0x758b0000 - 0x759a3000 C:\WINDOWS\system32\MSGINA.dll >0x762b0000 - 0x762c0000 C:\WINDOWS\system32\WINSTA.dll >0x73520000 - 0x7355d000 C:\WINDOWS\system32\ODBC32.dll >0x76300000 - 0x76348000 C:\WINDOWS\system32\comdlg32.dll >0x03aa0000 - 0x03ab7000 C:\WINDOWS\system32\odbcint.dll >0x092d0000 - 0x09349000 C:\WINDOWS\system32\Audiodev.dll >0x086c0000 - 0x08904000 C:\WINDOWS\system32\WMVCore.DLL >0x070d0000 - 0x0710b000 C:\WINDOWS\system32\WMASF.DLL >0x67930000 - 0x679d1000 C:\WINDOWS\system32\DBGHELP.DLL >0x76e90000 - 0x76ecc000 C:\WINDOWS\system32\RASAPI32.DLL >0x76e40000 - 0x76e52000 C:\WINDOWS\system32\rasman.dll >0x76e60000 - 0x76e8f000 C:\WINDOWS\system32\TAPI32.dll >0x76e30000 - 0x76e3e000 C:\WINDOWS\system32\rtutils.dll >0x72220000 - 0x72225000 C:\WINDOWS\system32\sensapi.dll >0x03dd0000 - 0x03e52000 C:\WINDOWS\system32\shdoclc.dll >0x04060000 - 0x0406e000 C:\Program Files\Adobe\Acrobat 7.0\ActiveX\AcroIEHelper.dll >0x7c340000 - 0x7c396000 C:\WINDOWS\system32\MSVCR71.dll >0x75de0000 - 0x75e8f000 C:\WINDOWS\system32\SXS.DLL >0x040c0000 - 0x04620000 C:\WINDOWS\system32\xpsp2res.dll >0x71980000 - 0x719bf000 C:\WINDOWS\system32\mswsock.dll >0x607c0000 - 0x60816000 C:\WINDOWS\system32\hnetcfg.dll >0x719c0000 - 0x719c8000 C:\WINDOWS\System32\wshtcpip.dll >0x04b20000 - 0x04b3c000 c:\progra~1\mcafee.com\vso\McVSSkt.dll >0x76ed0000 - 0x76ef7000 C:\WINDOWS\system32\DNSAPI.dll >0x76930000 - 0x76938000 C:\WINDOWS\system32\LINKINFO.dll >0x76f70000 - 0x76f76000 C:\WINDOWS\system32\rasadhlp.dll >0x03d80000 - 0x03d9c000 C:\Program Files\Adobe\Acrobat 7.0\ActiveX\PDFShell.dll >0x7cca0000 - 0x7cf85000 C:\WINDOWS\system32\mshtml.dll >0x74600000 - 0x74627000 C:\WINDOWS\system32\msls31.dll >0x74630000 - 0x7465a000 C:\WINDOWS\system32\msimtf.dll >0x64890000 - 0x648eb000 C:\WINDOWS\IME\imjp8_1\IMJPCIC.DLL >0x75ba0000 - 0x75c0e000 C:\WINDOWS\system32\jscript.dll >0x75390000 - 0x75401000 C:\WINDOWS\system32\mshtmled.dll >0x72c70000 - 0x72c79000 C:\WINDOWS\system32\wdmaud.drv >0x72c60000 - 0x72c68000 C:\WINDOWS\system32\msacm32.drv >0x77b90000 - 0x77ba5000 C:\WINDOWS\system32\MSACM32.dll >0x77b80000 - 0x77b87000 C:\WINDOWS\system32\midimap.dll >0x71c90000 - 0x71cac000 C:\WINDOWS\system32\ACTXPRXY.DLL >0x6bf50000 - 0x6bf85000 C:\WINDOWS\system32\dxtrans.dll >0x6d5d0000 - 0x6d5da000 C:\WINDOWS\system32\ddrawex.dll >0x736b0000 - 0x736f9000 C:\WINDOWS\system32\DDRAW.dll >0x73b10000 - 0x73b16000 C:\WINDOWS\system32\DCIMAN32.dll >0x6bf90000 - 0x6bfea000 C:\WINDOWS\system32\dxtmsft.dll >0x1c000000 - 0x1c006000 C:\WINDOWS\HKNTDLL.dll >0x5ec50000 - 0x5ec89000 C:\WINDOWS\ime\mscandui.dll >0x6d590000 - 0x6d5a1000 C:\Program Files\Java\jre1.5.0_02\bin\npjpi150_02.dll >0x5c9a0000 - 0x5c9b7000 C:\WINDOWS\system32\OLEPRO32.DLL >0x6d400000 - 0x6d417000 C:\Program Files\Java\jre1.5.0_02\bin\jpiexp32.dll >0x76f60000 - 0x76f68000 C:\WINDOWS\System32\winrnr.dll >0x6d450000 - 0x6d468000 C:\Program Files\Java\jre1.5.0_02\bin\jpishare.dll >0x6d640000 - 0x6d7c5000 C:\PROGRA~1\Java\JRE15~1.0_0\bin\client\jvm.dll >0x6d280000 - 0x6d288000 C:\PROGRA~1\Java\JRE15~1.0_0\bin\hpi.dll >0x76ba0000 - 0x76bab000 C:\WINDOWS\system32\PSAPI.DLL >0x6d610000 - 0x6d61c000 C:\PROGRA~1\Java\JRE15~1.0_0\bin\verify.dll >0x6d300000 - 0x6d31d000 C:\PROGRA~1\Java\JRE15~1.0_0\bin\java.dll >0x6d630000 - 0x6d63f000 C:\PROGRA~1\Java\JRE15~1.0_0\bin\zip.dll >0x6d000000 - 0x6d166000 C:\Program Files\Java\jre1.5.0_02\bin\awt.dll >0x72f50000 - 0x72f76000 C:\WINDOWS\system32\WINSPOOL.DRV >0x73890000 - 0x73960000 C:\WINDOWS\system32\D3DIM700.DLL >0x6d240000 - 0x6d27d000 C:\Program Files\Java\jre1.5.0_02\bin\fontmanager.dll >0x6d1f0000 - 0x6d203000 C:\Program Files\Java\jre1.5.0_02\bin\deploy.dll >0x049c0000 - 0x049dd000 C:\Program Files\Java\jre1.5.0_02\bin\RegUtils.dll >0x08910000 - 0x08bd6000 C:\WINDOWS\system32\msi.dll > >VM Arguments: >jvm_args: -Xbootclasspath/a:C:\PROGRA~1\Java\JRE15~1.0_0\lib\deploy.jar;C:\PROGRA~1\Java\JRE15~1.0_0\lib\plugin.jar -Xmx96m -Djavaplugin.maxHeapSize=96m -Xverify:remote -Djavaplugin.version=1.5.0_02 -Djavaplugin.nodotversion=150_02 -Dbrowser=sun.plugin -DtrustProxy=true -Dapplication.home=C:\PROGRA~1\Java\JRE15~1.0_0 -Djava.protocol.handler.pkgs=sun.plugin.net.protocol -Djavaplugin.vm.options=-Djava.class.path=C:\PROGRA~1\Java\JRE15~1.0_0\classes -Xbootclasspath/a:C:\PROGRA~1\Java\JRE15~1.0_0\lib\deploy.jar;C:\PROGRA~1\Java\JRE15~1.0_0\lib\plugin.jar -Xmx96m -Djavaplugin.maxHeapSize=96m -Xverify:remote -Djavaplugin.version=1.5.0_02 -Djavaplugin.nodotversion=150_02 -Dbrowser=sun.plugin -DtrustProxy=true -Dapplication.home=C:\PROGRA~1\Java\JRE15~1.0_0 -Djava.protocol.handler.pkgs=sun.plugin.net.protocol vfprintf >java_command: <unknown> > >Environment Variables: >PATH=C:\PROGRA~1\Java\JRE15~1.0_0\bin;C:\Program Files\Internet Explorer;;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;. >USERNAME=管理人室 >OS=Windows_NT >PROCESSOR_IDENTIFIER=x86 Family 15 Model 4 Stepping 1, GenuineIntel > > >--------------- S Y S T E M --------------- > >OS: Windows XP Build 2600 Service Pack 2 > >CPU:total 1 family 15, cmov, cx8, fxsr, mmx, sse, sse2, ht > >Memory: 4k page, physical 244464k(55328k free), swap 598668k(323724k free) > >vm_info: Java HotSpot(TM) Client VM (1.5.0_02-b09) for windows-x86, built on Mar 4 2005 01:53:53 by "java_re" with MS VC++ 6.0 > >
[この投稿を含むスレッドを表示] [この投稿を削除]