タグ

ブックマーク / shinh.hatenablog.com (6)

  • kati について - 兼雑記

    https://github.com/google/kati kati について、ドキュメント書こう…と思っていたのですがなかなか進まないので、とりあえず日語で書いてみることにしました。何書くかがあまり明確じゃないテーマなので、何書くか考えるのと英語考えるのを両方同時にやるのが少し大変で。 動機 kati は GNU make のクローンです。いずれ完全なコンパチになると嬉しいですが、なかなか難しいだろうと個人的には諦めています。用途に対して実用的ならば良いかなと。 動機としては、 Android platform のビルドシステムが、なかなかシュールな GNU make 黒魔術で構成されていて、 make が実際になんかしはじめるまでが遅かったので、そこを高速化したいというものでした。 ビルドシステムが遅いという時、まずだいたいヌルビルドとフルビルドの2点を考えます。ヌルビルドてのは生

    kati について - 兼雑記
  • StringPiece というライブラリの話 - 兼雑記

    例えばこう、ディレクトリの名前とその中のファイル名を / でくぎって結合する関数を書くとします。引数が std::string でも使いたいし const char* でも使いたい、ということで、たいていは void JoinFilePathStr(const string& dir, const string& base, string* out) { out->clear(); out->append(dir); out->push_back('/'); out->append(base); }なんてのを書くんじゃないかと思います。この関数で問題になるのは const char* を渡すと不要な string object が一度できることで、敬虔な C++ 屋さんだと、 void JoinFilePathStr(const string& dir, const char* base,

    StringPiece というライブラリの話 - 兼雑記
  • mutual exclusion ってなんかかっこいい - 兼雑記

    なんか必殺技ぽい。 まぁそれはそうとお勉強会で当は SELinux の勉強をするつもりだったんだけど、電車の中でふと mutex 的なものを書いたことないなーと思い出したのでちょっと書いてみました。 元のプログラムはカウンタ。こんなやつ。 int cnt; void* count_up(void* idp) { int id = (int)idp; int i; printf("thread %d start\n", id); for (i = 0; i < 10000000; i++) { cnt++; } printf("thread %d end\n", id); return NULL; } int main() { int i; pthread_t th[NUM_THREADS]; for (i = 0; i < NUM_THREADS; i++) { pthread_crea

    mutual exclusion ってなんかかっこいい - 兼雑記
    cubicdaiya
    cubicdaiya 2009/10/27
  • colordiff.py - 兼雑記

    colordiff がイマイチだという niha さんの話を見て、rietveld みたいな感じで色つけてくれる diff 欲しいよねえ的なことを書きました。そしたらなんか、突然ふってわいた記憶によると、微妙に書きかけた記憶があるなぁ…と思い、作業用ディレクトリを見たら colordiff というディレクトリがあって、完成しかけみたいな状態で放置プレイされてました。 というわけで置いておきます。 http://shinh.skr.jp/koneta/#colordiff 適当にパス通ったとこに置けば、 diff -u hoge fuga | colordiff.pyとかでいいはずです。スクリーンショット: なんか微妙に色のつけかたがダメな部分があるけど、まぁ実用上問題はないんじゃないかな…

    colordiff.py - 兼雑記
  • [Program][Bin] valgrind で main 奪う - 兼雑記

    ことほどさように main は全人類の至宝 LD_PRELOAD をもってしても簡単に奪えないということは、 main 蹂躙厨の間では有名な事実なのですが、 valgrind 使うと割に簡単なことに気付きました。 いつも通り Hello, world を書きます。 #include <stdio.h> int main() { puts("('-') Hello, world!"); } で実行。 > ./a.out ('-') Hello, world!平和です。こんな時代が続けば良かったのに! 不審なコードを書きます。 #include <stdio.h> void _vgrZU_Za_main() { puts("('-') ku ku ku ..."); } 主にシンボル名が不審です。さて実行。 > LD_PRELOAD=./hook_main.so valgrind --tool

    [Program][Bin] valgrind で main 奪う - 兼雑記
  • TCC をリンカに - 兼雑記

    Linux の DMD で作業してるとすぐ気付くんですが、コンパイルは速いのでボトルネックは GCC というか GNU ld だったりするんです。小さいファイルの場合特に。んでていうか ld ってなんかやけに遅いよねぇとか思ってたのでリンカ書いてみる…とか思った時代が私にもあったのですが、ふと思い出して TCC でリンクしてみたら速かったのでした。 とりあえず ffi.d はテストがたくさんあるから遅い…てことでちょっと普段と違う環境で TCC でえいやっとやってみたところ 3.59sec vs 17.24sec とのことで、おおすばらしーと思ったのでした。んで家帰ってやってみるとエラー出るのでした。リンカスクリプトの AS_NEEDED が読めない問題。これは前から知っててた問題で、 libc.so の該当個所を適当に削ったりしてたんですが、まぁ TCC いじるのが正道だろうといじったら

    TCC をリンカに - 兼雑記
    cubicdaiya
    cubicdaiya 2007/04/09
  • 1