2005-11-01から1ヶ月間の記事一覧

時代遅れチックに少しだけ

こういうのに手を出すと時間があれだとわかってるんですが。一応お約束チックに続きを読む化。

C で落とすための最短コード

について有意義な議論をしました。以下基本的に GCC での議論。最初は、 int* p=0;*p=0;とかだったのですが、 "a"[0]=1; → *"0"=0; → *""=0; → ++*"" などと変遷しました。最後は短くなってませんがよりわけわからんということで。 --*"" がなんとなくかわい…

雑記

トラバできてた .so からロード && スケルトンをスクリプトで生成なアプローチのもの (http://nikki.hio.jp/?date=20051124#p01) をながめつつ。結局どっから情報を持ってくるかって、いう話で、最悪の場合は、人間が手動でテスト登録ルーチンを書くことにな…

Dynamic Test Runner 0.0.2

http://shinh.skr.jp/binary/dtr-0.0.2.tar.gz.o ファイルをダイナミックロードして中のテストを駆動するものです。http://d.hatena.ne.jp/shinichiro_h/20051123#1132700485の続き。ローダっぽいもの書くのは案外楽しいのでしばらく地道になんかしようと思…

mangling変更

http://www.digitalmars.com/d/changelog.html#new0140万歳。http://d.hatena.ne.jp/shinichiro_h/20040801#p2

Dynamic Test Runner 0.0.1

http://shinh.skr.jp/binary/dtr-0.0.1.tar.gzBinary 2.0 時代のテストツールを書きました。 suite.addTest(test1); suite.addTest(test2); suite.addTest(test2); suite.addTest(test4);こういうミス、よくやりますよね。 DTR によって煩雑なテスト登録作業…

mydl

.o をロードするダイナミックローダを書いてみました。http://shinh.skr.jp/koneta/mydl.tgz int add(int x, int y) { return x+y; }みたいなコードを gcc -c add.c とコンパイルしておき、 #include <stdio.h> #include "mydl.h" int main() { void* handle = mydlop</stdio.h>…

Objective-C

また ObjC いいなと思えてきた。 Binary 2.0 は死んだらしいし。というかまた C に飽きてきた。 機能つぎはぎでゲームオブジェクトを作りたいことはよくあるので、 Category とか Protocol とかがゲームとかに向いてそう。(プレイヤーの攻撃を受ける、丸い形…

curry.rb

ohaiさんとこより。http://www.kmc.gr.jp/~ohai/diary/?date=20051120#p01すばらしい。好きなところの変数を curry 化したかったので、 Boost::bind チックに。 class Symbol def bind(*p1) proc do |*p2| obj, *args = p1.map do |a| (a == :_) ? p2.shift …

実行時継承関係抽出

http://shinh.skr.jp/koneta/reflection_cpp.tar.gz以下のようなクラス階層から、 struct C { virtual void f() {} }; struct D : public C { }; struct E { }; struct F : public C, public E{ };以下のような情報を実行時に吐けるようになりました。 C <= …

reflection.cc

http://shinh.skr.jp/koneta/reflection_cpp.tar.gz以下のように、 Test クラス内の test ではじまっているメソッドをイテレートして呼び出せます。 #include "reflection.h" #include <iostream> #include <cstring> using namespace std; class Test { void test_func1(); voi</cstring></iostream>…

Binary 2.0 カンファレンス

http://namazu.org/~satoru/blog/archives/000078.htmlなんかひょんなことから喋ることになりました。ネタをマジで実現させるのは偉大だなぁ…と再確認。他の話し手とか、手元に来てる登録受付の面々を見るに、私なんかが喋ることあるのかと思いました。

ワンダと巨像

とても面白かった。ほとんど一日でクリアするとか愚かだと思った。エンディングの後のセーブデータによると14時間ほどらしい。世界の雰囲気がいいとか、グラフィック綺麗とかサウンド綺麗とかはおいておいて、システム的に良いところは、やたらでかい敵を色…

reflection.d 2.0

http://shinh.skr.jp/d/reflection.tar.bz2reflection.d を最近得た知識から書きなおして、引数に nm の出力や map ファイルを取る必要をなくしました。 Win32 では Win32API を用いて、その他環境では libbfd を用いて実行ファイル自身からシンボルテーブル…

おまけ

最適化とキーワードに応じたソースコード生成を。http://shinh.skr.jp/koneta/fngcg.cgi?key=SDLっぽいコードをソース。http://shinh.skr.jp/koneta/fngcg.rbhttp://shinh.skr.jp/koneta/ngcg_fimp.rb次世代のスーパープログラマは、 Google の I'm feeling …

超次世代IDE

http://shinh.skr.jp/koneta/ngcg.cgi上記妄想から次世代のIDEをサクっと作ってみました。なんとソースコードが全て自動生成されます。以下ソース。http://shinh.skr.jp/koneta/ngcg.rbhttp://shinh.skr.jp/koneta/ngcg_import.rb以下に依存。 Ruby/BDB (htt…

超推論言語妄想

http://www.kmonos.net/wlog/55.php#_1446051108面白いなぁ…こういうのがメインストリームになるってのはちょっと予測しずらくもあるんですが。もう少しルールが明確でないと、この場合は推論してくれるんだっけ…とか思って結局メソッド名全部書いちゃいそう…

extern void* __dso_handle;と宣言してこの __dso_handle の NULL チェックを行うことによって自分が dynamic link されているか static link されているかを知ることができる。ちなみに __dso_handle の中身はただの自分自身を差すポインタ。crt(begin|end)…

main 後も ctor が dtor になるだけでほとんど同じ。なんか気になってた __JCR_LIST__ と __JCR_END__ は Java Class Registrer とかだそうで、 _Jv_RegisterClasses とかと関係あるんだろうたぶん。 i@u gcc/i386-redhat-linux/4.0.1> nm -o *.o G global c…

objcopy --rename-section .ctors=.ctors. begin.oとかすると、たぶん最初に実行される .ctors セクションになる。もしくはリンク時に最後に書くオブジェクトファイルにするといい。このへんはリンカスクリプトの KEEP (*(SORT(.ctors.*))) KEEP (*(.ctors))…

昔やったみたいに .ctors セクションに C++ で書き込むことは簡単にできる。C でも GCC 拡張を使えばいい。 #include <stdio.h> void ctor() __attribute__((constructor)); void ctor() { printf("ctor\n"); }</stdio.h>

起動順序としては、 main 以前に、 _start => __libc_start_main => __libc_csu_init => _init から、 __do_global_ctors_aux が呼ばれる。これは __CTOR_LIST__ と __CTOR_END__ の間を実行してまわる。この間には _GLOBAL__I_main や、 _GLOBAL__I_hoge.c …

main 以前

crtbegin と crtend を見てみる。 crt* ってのは gcc が勝手にリンク時に追加する小さな static link library 。

42696e617279322e30

殺伐ロゴ。あと Binary なんだから 10.0 じゃないかとか。

Ruby/Cpp

http://shinh.skr.jp/koneta/rubycpp.tgzブリッジを書かずに Ruby から C++ を触る実験。やってることとしては、 .so を dlopen して dlinfo して内容を libbfd で読んで、 libiberty でデマングルして保持、んで Ruby から new とか method_missing が呼ば…

本5冊

どうでもいいことついでに本5冊とかが流行った時のメモが出てきたので超今さら感を漂わせながらはってみます。ところでこういう時に、「リクエストを受けたので本5冊を書いてみます」とか書いてもバレないなーと思った。 CPUの創りかた 心底作りたくなった。…

about

http://d.hatena.ne.jp/shinichiro_h/aboutちょっと書きました。基本的に正体明かしておく方針だったので写真とか前からどっかに置こうと思ってたけど、昔は持ってないという理由で、今はどれにしたらいいんだという(まぁメイドコスプレしてるヤツとかでもい…

C++のマングリングシンボルには

返り値型の情報は入っていない、ということにさっき気付きました。かなりショック。Dには入ってるのに。それと、「そもそもスクリプト言語でコンパイル言語のクラスを継承してそれをまたコンパイル言語側で使いたい」ってのは要するに Ruby/BulletML で、割…

継承とかしてみる

面白いかと思ったけどツマらなかった。そもそもスクリプト言語でコンパイル言語のクラスを継承してそれをまたコンパイル言語側で使いたいこととかあるはずない。そしてコンパイラの情報使わんとロクなことできない。ていうかまだ _ZN1C3addEii とか残ってる…

printf

それとこれは問題なく動いたから嘘ツキは死ねばいいと思った。 #include <stdio.h> int main() { int (*fp) (const char*, int); fp = printf; fp("%d\n", 1); return 0; }</stdio.h>

なにかあれば下記メールアドレスへ。
shinichiro.hamaji _at_ gmail.com
shinichiro.h