はじめに
リリースの中身のちゃんとしたやつは @lempiji さんが 書かれた のでそっちをみてください。自分の記事はチラシの裏みたいなものです…
迂闊に記事書くかーとか言っちゃったせいで言及されてしまったので書くことになってしまいました、、イキるのはだめですね。
考えてみると大した修正でもないので書くことないんだよな。まあどういうふうに修正したかとかを併せて書いてみます。
あとちょこっとざっくりしたトピックも追記しました。
なおしたバグの解説
チケット番号の並びが順番になっていないんですが、覚えているやつは修正した順に時系列で並べています。
ほんとは他のBugも解説したほうがいいかと思ったんですが(とくにBugzilla 17684とか)、これPRを6個にわけて修正されてて追うのが面倒なんですよね。なので宿題です(?)
Bugzilla 19804
これは関数の引数の型で、float型の要素をもつ構造体の静的配列でサイズが1であるときだけコンパイラがエラー tym=x27
を吐いて異常終了するというregressionでした。(あと再現条件がネストした関数をつかっているか -g
オプションをつける必要がある、というのがあったので他の人が再現できなかったっぽい)
これはBugzillaで見つける前に、なんかこういう意味不明なエラーが出るんだけどー、というブログ記事 を見かけてなおした感じです。
エラーをすでにassertで拾えてたので xmmstore
という関数で型のチェックに失敗してることがわかり x27
が Tysarray
(内部的に静的配列を表す型情報)なので、再現条件からfloatを要素に持つ構造体のサイズが1の静的配列をXMMレジスタに割り付けるような最適化をしているんだなというあたりはすぐにつきました。実際に src/dmd/backend/cod1.d
内の FuncParamRegs_alloc
関数にそういった最適化の処理が書かれていました。この関数は最適化するぞ!という情報しかもたせてないので、あとは実際にcodegenするところに同じような修正を入れてやればいいだけです。
というかこの最適化を足した後でテストしなかったってことですねこれ。
Bugzilla 19806
そういえばphobosも一個バグ修正していたのだった、URLにs足しただけなんだけど、まあこういう貢献もありです。
Bugzilla 19519
静的配列の長さがコンパイル時に決定しない、というバグです。
これ s.e
のようなドットでアクセスされるような変数を普通の変数と別に内部で扱っているんですが、そこの条件を足してなかったために長さ情報を決定する処理に到達してなかったというわりとしょうもないバグです。でもこれきづくのわりと無理ゲーだよな。このPRだけNice!ってコメントもらいました。
GDBで泥臭く頑張った感じでとくにおもしろい話はないです。
これいつからのregressionなのか調べてないな。
Bugzilla 19540
テンプレート実体化の処理をするときに typeof
の中で無名クラスをnewするときだけ発生する珍しい、別の言い方をするとこんなん普通に書いてたら遭遇せんだろというバグです。
単なる初期化漏れだったのですが、コンパイラがSEGVで落ちるというのはいかんなあ、というのでえいやっって感じでなおしました。
Bugzilla 19833
getMember
で template
を取得しようとするとその型だとできないよ、というregressionです。もくもく会のときにshooさんに報告してもらったバグです。typesem(型に関する意味論が定義されているコード)をリファクタリングしたときに誤って混入してしまったバグで、元々の処理と同じようにtemplateが渡されたときにちゃんと評価されるように修正しました。
その他の修正
- バグじゃないけどdubの
list-installed
コマンドを消しました。これ2013年からdeprecatedになってたんですがなぜか残ってたのでした。 - たぶんDWARFのDW_AT_producerのコンパイラ情報を修正したのもこのバージョンからだったはず…
その他トピック的なもの
-
lowmem
オプションを渡すとコンパイル時にGCが動くのでピーク時のメモリ消費量がぐっとへるらしいです。あと実行時間がちょっと遅くなるらしい。 - GC parallel-markingはきっと次に入るので待ちです。rainers先生はすごいのですごい。
あとがき
やってみたら意外とすんなりpatch書けたので続けて出してみた(いやまだむずかしいやつはできてないんだけど)、ってくらいの感じなのでみなさんも挑戦してみてはいかがでしょうか。自分は去年の7月くらいからときどきpatch投げてるくらいでそんなにたいしたことはできませんが、なにかしら手伝えることがあればするので気軽に尋ねてください。