« 今日の日記 | Main | C言語の必要性 »

2007.10.06

翻訳本

ひさらんとは一冊にかける思いが違うのは自覚しつつも、壁に投げつけたくなるような酷い翻訳本て出会ったこと無い気がする。今までの本ではSICPの日本語が難しかった。翻訳本じゃないけど、MSNの自動翻訳は頭を抱えた。MINIX本はわかりやすくは無かった気がする。アイスウィンドデイル2の翻訳は酷かった。僕はこの一点でライブドアが嫌いだ。SEGAに任せておけば良かったのに。

SystemC関連だと、日本人の書いた本の方がよっぽど酷いので、翻訳で眉をひそめる事はあっても、投げ捨てたくなることはないような。


自分の記事を読み返しみて、gccでstdio.hのincludeがいらないのはlibcがリンクされるからじゃ無い気がしてきた。

YUKI.N>gcc -c hello.c
YUKI.N>nm hello.o
00000000 b .bss
00000000 d .data
00000000 r .rdata
00000000 t .text
U ___main
U __alloca
00000000 T _main
U _printf
YUKI.N>

gcc -vでリンクされているライブラリを見てみよう。

YUKI.N>gcc -v hello.o
/usr/lib/gcc/i686-pc-cygwin/3.4.4/specs から spec を読み込み中
コンフィグオプション: /usr/build/package/orig/test.respin/gcc-3.4.4-3/configure
--verbose --prefix=/usr --exec-prefix=/usr --sysconfdir=/etc --libdir=/usr/lib -
-libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --enable-
languages=c,ada,c++,d,f77,pascal,java,objc --enable-nls --without-included-gette
xt --enable-version-specific-runtime-libs --without-x --enable-libgcj --disable-
java-awt --with-system-zlib --enable-interpreter --disable-libgcj-debug --enable
-threads=posix --enable-java-gc=boehm --disable-win32-registry --enable-sjlj-exc
eptions --enable-hash-synchronization --enable-libstdcxx-debug
スレッドモデル: posix
gcc バージョン 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)
/usr/lib/gcc/i686-pc-cygwin/3.4.4/collect2.exe -Bdynamic --dll-search-prefix=cy
g /usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../crt0.o -L/usr/lib/gcc/i686-pc-cygwi
n/3.4.4 -L/usr/lib/gcc/i686-pc-cygwin/3.4.4 -L/usr/lib/gcc/i686-pc-cygwin/3.4.4/
../../.. hello.o -lgcc -lcygwin -luser32 -lkernel32 -ladvapi32 -lshell32 -lgcc
YUKI.N>

このlgccってのが怪しいな。

YUKI.N>nm libgcc.a | grep printf
_eprintf.o:
00000000 T ___eprintf
U _fprintf

あれ。
こっちか。

YUKI.N>nm libcygwin.a | grep _printf
00000000 I __imp___printf
00000000 T __printf
00000000 I __imp__printf
00000000 T _printf
YUKI.N>

偉そうに書いて僕も間違っている。orz。
gdgdになったので、トラバもリンクも無し。

|

« 今日の日記 | Main | C言語の必要性 »

Comments

gcc は builtin でかなりの数の標準関数を持ってます.

「gcc-4.1.0/gcc/builtins.c」
http://gcc.yokinihakarae.com/S/867.html

の expand_builtin_hogehoge が,直接 RTL を構文木内に展開します.

なので,単なるライブラリ関数のリンクではなくて,かなり高度な最適化まで gcc 内部でしてくれます.

「expand_builtin_printf()」
http://gcc.yokinihakarae.com/S/867.html#L4852

「About GCC printf optimization」
http://www.ciselant.de/projects/gcc_printf/gcc_printf.html

Posted by: あろは | 2007.10.06 at 04:06 PM

あ、先越されてら(^^;
ついでに言うなら、コンパイラが情報を抱えているので、
printf の書式指定と実引数との矛盾なんかも指摘してくれます >gcc

Posted by: きむら(K) | 2007.10.07 at 04:34 AM

あろはさん、きむら(K)さん
ご指摘ありがとうございます。

てっきり、buildin関数=自動的にライブラリリンクだと思っていました。
あろはさんのリンク先を見ても、sprintfとかもstrcpyに最適化されることを確認。
strcmpの最適化も面白そう。

これからも無知をさらすと思いますが、よろしくお願いいたします。

Posted by: なつたん | 2007.10.07 at 09:45 AM

なんか外人からコメントついたので動揺中。とりあえずここに心境を書いてみる。

もう、SICPのコードの動かし方を全然覚えていない。
なによりも、globalがgrobalになっているから、そっとしておいて欲しかった。

頑張れ>俺

せっかく英文書いたのに、間違って消してしまった。半泣き。

Posted by: なつたん | 2007.10.07 at 05:16 PM

Post a comment



(Not displayed with comment.)




TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/18154/16676364

Listed below are links to weblogs that reference 翻訳本:

« 今日の日記 | Main | C言語の必要性 »