Generating Precise Dependencies for Large Software
Googleさんの巨大なC, C++のコードベース、コンパイルとかリンクに時間がかかりすぎる問題はあちこちから聞こえてくる。その答えがいくつか(その1, その2)彼ら自身によって提案されているのだけど、やっぱりC++のコードは膨大にあるわけで既存のものもメンテナンスしないといけない。あまり依存していないライブラリとかをいつまでも残していると、ライブラリに不要な影響を受けたりリファクタリングが困難になったりする。だからなるべくスリムに保ちたい。ChromiumとかChromiumとかChromiumとか。。。もうBlinkになってしまったけどね。
依存性の解析はLLVM IRを使った。既存のASTベースのやり方だとオーバーロードされると大変だし、そもそも暗黙の関数(オペレータとかコピーコンストラクタとかデコンストラクタとか)も多いしなんといってもテンプレートがうまく扱えない。
structural dependencyとbehavioural dependencyという言葉が使われてるけどよくわからない。。。ともあれ、6MLOCあるChromiumをこれで解析してみたところ238コのモジュール、47万のシンボル、1391万のシンボル参照があり…それでunderutilizedなモジュールをいくつかみつけたよ!しかも2時間ちょいで!という内容。短いので是非よんでみるとよいかと。
Counting Server is Hard
Steve Ballmarが「ウチは100万台のサーバー持ってるぜ!!」と言ってるが…そもそもどこそこは何万台のサーバー持ってるぜ!ウチは何千台だぜ!!みたいな話どんだけ信用できるのかという話。全米の統計とか個々の値段からフェルミ推定的に想像して、100万台のサーバーを持つためには
- 15~30くらいの大きめのデータセンター
- 予算 $4.25B
- 電力消費 300MW, 年間で: 2.6TWh 消費
だけ必要になる。できなくはないね、というところか*1。
バグ予測は役に立ってるのか?(Googleの場合)
Does Bug Prediction Support Human Developers? Findings from a Google Case Study
バグ予測それ自体が目覚ましい成果を挙げたわけじゃないけど、Googleの中の開発のやり方とかが詳しく書かれていてとても面白かった
*1:どんだけハッタリかましてんだよ!という御大の声が俺には聞こえる