DSLの進化に対応するため、マイグレーションツールを提供しましょう。
DSLはソフトウェアと同様に進化していくため、古いバージョンで書かれたDSLで新しいバージョンを実行すると失敗することがある。
本質的にDSLは変更することは何もなく、DSLの定義は基本的に公開されたインタフェースであり、同じ結果になるよう対応しなければならない。
内部DSLはリファクタリングツールを使えるが外部DSLには対応できない(ただし、それほど問題にはならない)。
DSLの進化に対処するテクニックの一つは、DSLをあるバージョンから別のバージョンに自動移行するツールを提供することだ。
マイグレーションには大きく分けて2つの方法がある。
増分マイグレーションは、DSLを旧から新へ自動的に移行するプログラムを生成するアプローチ。
増分マイグレーションは、変更をできるだけ小さくするようにすることが重要である。変更が小さく、複数を連結する方が簡単にマイグレーションを行える。
モデルベースのマイグレーションはSemantic Modelを使用している場合に使えるアプローチであり、リリースごとに専用のパーサを用意する。スクリプトのマイグレーションは行わない。
問題は、Semantic Modelにとって重要でないけれどもスクリプト作成者にとって残しておきたいもの(例:コメント)がマイグレーションによって失われてしまうことだ。
私が2つの選択肢についてどっちを勧めるということはない。