Rubyにパッチが取り入れられた(およびその過程)
単純なバグフィックスだけど無事取り入れられた。CはK&R本で教養程度にしか覚えていない。
毎日trunk, masterをビルドする
毎日trunkの最新バージョンをビルドする。板前が朝に包丁を研ぐように、ミュージシャンが演奏ごとに楽器を調律するように言語処理系を継続的にメンテナンスする。いかにtrunkといえど2、3週放置するとバグに気づいてもすでに修正済みになっていたりする。
実稼働環境と同じに揃える必要があるなど特段の理由がない限り、このtrunkビルドを常に使う。おおよそのエッジケースはテストでカバーされているので、普通の人が頭をひねった程度で出てくる例はすでにテストされていると考えてよい。なので実際にgemを使ったりアプリケーションを動かしてみて、「まぐれ当たり」を引けるような使い方をしている。
あとどの言語でも最新バージョンに追加された機能周辺は他と比べテストの網羅性が甘く感じることが多い、組み合わせにより思わぬバグが出てくることがある。あった。
同じ環境の安定版と動作を比較する
要はxxenvを使う。「まぐれ当たり」を引いて意図しない挙動が発生した時に安定版と切り替え、原因を特定していく。その際、観測に影響を与えるコンパイラやミドルウェアの違いを排除するために、同じ端末に同条件で複数バージョン保持できて、なおかつビルド、インストールコマンド入力の手間を省けるxxenv, xx-build系は欠かせない。
動作がおかしいからといって即gdb使おうとしなくても、xxenvにprintデバッグとブレークポイントからのステップ実行を組み合わせることで、ある程度問題自体を理解することはできる。今まで即gdb使わないと解決しないレベルの問題にぶち当たったことがないから、そう言えるだけかもしれないが。
結局言いたいこと
- CHH/phpenv · GitHubは
git pull
ができないのであまり気持ちのいいものではない - phpenv/phpenv · GitHubは最近更新がない
- phpbrew/phpbrew · GitHubはmasterがビルドできない
どれもしっくりこないのでいいphpenv系を教えてください。今はphpbrewとphp-buildを組み合わせて使っている。