複数バージョンのDコンパイラを切り替えて使う
趣味の開発にD言語を使いたくなったので 人生最良の選択 *1 をしようと思いました。
今までの僕のD言語の用途は専ら AtCoder だったので、ローカルにはジャッジ環境に合わせた DMD v2.070.1 をインストールしていたのですが、これは 人生最良の選択 としては少々古すぎます。 しかしながら AtCoder のためには古いバージョンも持っておきたい……というわけで表題の通りです。
Digger という bisect ツールがあるのですが、これが今回の目的にも使えそうな感じだったので使っていきます。 以下、OS は Window を想定していますが Linux などでも大差ないと思います(多分……)。
下ごしらえの手順は以下の通り:
- 最新の DMD をインストールする: https://dlang.org/download.html
- 最新版なら dub も一緒にインストールされるはずです
dub fetch digger
で Digger をグローバルにインストールする- 適当にディレクトリを掘る (以下ここを
wd
とします) wd
でdub run digger -- build ...
を実行し、古いコンパイラをビルドする...
部分の指定方法については リポジトリの readme に豊富な例があります- atcoder 用なら
dub run digger -- build --model=64 v2.070.1
以上で wd/work
以下に古いコンパイラ(を動かすために必要なファイル群)が生成されます。
古いコンパイラを使いたいときには:
wd
に移動するdub run digger -- install
dmd --version
でバージョンをチェックして古くなってたら成功です。
digger install
は 現在のD環境を wd/work
以下のファイルで 部分的に 置き換えます。
その際、 <path to dmd>/.digger-install
に元のD環境を復元するために必要な情報が格納されます。
元に戻すときには、dub
を 経由せず、digger uninstall
のように Digger の実行ファイルを直接叩きます(切り替え先のコンパイラのバージョンによっては dub run digger -- uninstall
が動かない可能性があるからです)。
Windows の場合には digger.exe
が AppData\Local\dub\packages\digger-<version>\digger
にあるはずです。