lld − 開発ツールの主要コンポーネントの1つをスクラッチから作成した話 by rui ueyama
lldとは
ちゃんと動けばいい
速く動けばいい
採用事例
FreeBSD
BSD系はGNUを使いたくないらしい
/usr/bin/ldがlldになっている
既にある殆どのコマンドがlldでリンクできる
Chrome
Wndows版Firefox
ARM版Rust
昔のリンカと比べて
グラフにすると表示できないぐらい速い
1980年代に作られたプログラムと比べたら当然
gnu goldと比べる
lldは2〜4倍速い
特に速くするつもりではなく書いたが、速くなった
chromeをビルドする
debug情報付きで2GBぐらい
17000ファイル
18000000セクション
6300000シンボル
13000000リロケーション
1リロケーションごとに1μsecかかると、全体で13secになってしまう
社内転職
windows用のコンパイラとリンカどっち作る?
どこから手を付ける?
Linkers & LoadersというMSの本
これだけでは足りない
間違っていてもヒントが無い
cannot execute binary file
わからないから1bitだけ変更したり
まず正常にロードされるbinaryを作るところから
空のasmをコンパイルしてbinaryを作る
だんだんできてくる
hello worldがリンクできるようになるまで数ヶ月かかった
大きなプログラムは1年かかった
変に並列化しない
小さなfor文のparallel化とか、だけやる
7箇所だけ
プログラムとしてのシンプルさを保つ