🚀

強い型の理想郷と依存関係地獄を分つIO境界の話

に公開

Xでこんなポストを見かけたので書いてみる。

しかしIO境界を越えるとどうせテストかバリデーションが必要になる。
強い型が強いのは単体で動作するプログラムの中でだけだ。

IO境界を超えてserialize/deserializeを自動validationするには実行時型情報のような追加データが必要になる。そしてその追加データは異なる処理系間では通用しないので、処理系を跨った型付きデータのやり取りにはidlとかxmlのような言語で記述したschemaを共有する必要がある。

しかしながらこれが曲者で、schema情報は「バージョン管理」が必要になるのだ。IO境界を越えるという事は境界の両側でバージョンが異なる可能性を考慮しなければいけないという事だからだ。こいつが長らく「強い型」言語の理想を打ち砕いてきたラスボスだ。

人類はまだschemaバージョン管理の奴隷だ。良い感じにAPIバージョンの不整合が起きないように「気をつけて」使う必要がある。COMとかRESTのような「加算的」な変更しか行わないという制約は一定の成功を収めているけど修正が効かないのでリリースに気を使う。

強い型言語の理想郷で暮らすにはIOに絡むschemaのバージョン管理地獄と理想郷を地続きにするという事になり、理想郷=地獄になってしまう。それは嫌なのでidlは別に用意する。でもそれは「テストを書く」のと本質的に変わらない。

Discussion