Help us understand the problem. What is going on with this article?

DMD 2.086.0リリースによせて?個人的な活動記録

はじめに

リリースの中身のちゃんとしたやつは @lempiji さんが 書かれた のでそっちをみてください。自分の記事はチラシの裏みたいなものです…

迂闊に記事書くかーとか言っちゃったせいで言及されてしまったので書くことになってしまいました、、イキるのはだめですね。
考えてみると大した修正でもないので書くことないんだよな。まあどういうふうに修正したかとかを併せて書いてみます。

あとちょこっとざっくりしたトピックも追記しました。

なおしたバグの解説

チケット番号の並びが順番になっていないんですが、覚えているやつは修正した順に時系列で並べています。

ほんとは他のBugも解説したほうがいいかと思ったんですが(とくにBugzilla 17684とか)、これPRを6個にわけて修正されてて追うのが面倒なんですよね。なので宿題です(?)

Bugzilla 19804

対応したPR

これは関数の引数の型で、float型の要素をもつ構造体の静的配列でサイズが1であるときだけコンパイラがエラー tym=x27 を吐いて異常終了するというregressionでした。(あと再現条件がネストした関数をつかっているか -g オプションをつける必要がある、というのがあったので他の人が再現できなかったっぽい)

これはBugzillaで見つける前に、なんかこういう意味不明なエラーが出るんだけどー、というブログ記事 を見かけてなおした感じです。

エラーをすでにassertで拾えてたので xmmstore という関数で型のチェックに失敗してることがわかり x27Tysarray (内部的に静的配列を表す型情報)なので、再現条件からfloatを要素に持つ構造体のサイズが1の静的配列をXMMレジスタに割り付けるような最適化をしているんだなというあたりはすぐにつきました。実際に src/dmd/backend/cod1.d 内の FuncParamRegs_alloc 関数にそういった最適化の処理が書かれていました。この関数は最適化するぞ!という情報しかもたせてないので、あとは実際にcodegenするところに同じような修正を入れてやればいいだけです。

というかこの最適化を足した後でテストしなかったってことですねこれ。

Bugzilla 19806

そういえばphobosも一個バグ修正していたのだった、URLにs足しただけなんだけど、まあこういう貢献もありです。

Bugzilla 19519

対応したPR

静的配列の長さがコンパイル時に決定しない、というバグです。

これ s.e のようなドットでアクセスされるような変数を普通の変数と別に内部で扱っているんですが、そこの条件を足してなかったために長さ情報を決定する処理に到達してなかったというわりとしょうもないバグです。でもこれきづくのわりと無理ゲーだよな。このPRだけNice!ってコメントもらいました。
GDBで泥臭く頑張った感じでとくにおもしろい話はないです。

これいつからのregressionなのか調べてないな。

Bugzilla 19540

対応したPR

テンプレート実体化の処理をするときに typeof の中で無名クラスをnewするときだけ発生する珍しい、別の言い方をするとこんなん普通に書いてたら遭遇せんだろというバグです。
単なる初期化漏れだったのですが、コンパイラがSEGVで落ちるというのはいかんなあ、というのでえいやっって感じでなおしました。

Bugzilla 19833

対応したPR

getMembertemplate を取得しようとするとその型だとできないよ、というregressionです。もくもく会のときにshooさんに報告してもらったバグです。typesem(型に関する意味論が定義されているコード)をリファクタリングしたときに誤って混入してしまったバグで、元々の処理と同じようにtemplateが渡されたときにちゃんと評価されるように修正しました。

その他の修正

  • バグじゃないけどdubの list-installed コマンドを消しました。これ2013年からdeprecatedになってたんですがなぜか残ってたのでした。
  • たぶんDWARFのDW_AT_producerのコンパイラ情報を修正したのもこのバージョンからだったはず…

その他トピック的なもの

  • lowmem オプションを渡すとコンパイル時にGCが動くのでピーク時のメモリ消費量がぐっとへるらしいです。あと実行時間がちょっと遅くなるらしい。
  • GC parallel-markingはきっと次に入るので待ちです。rainers先生はすごいのですごい。

あとがき

やってみたら意外とすんなりpatch書けたので続けて出してみた(いやまだむずかしいやつはできてないんだけど)、ってくらいの感じなのでみなさんも挑戦してみてはいかがでしょうか。自分は去年の7月くらいからときどきpatch投げてるくらいでそんなにたいしたことはできませんが、なにかしら手伝えることがあればするので気軽に尋ねてください。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away