Headspring SystemsのCTOであるJeffrey Palermo氏は、C#で動的な性質を扱う折衷案を提示した。メソッド全体を動的にすることを可能にしつつ、アセンブリを静的にたもつ方式だ。
Palermo氏は、最近行われた静的型付けvs動的型付けに関する議論について言及し、動的プログラミングは、ライブラリを利用するようになると次の理由から扱いづらくなると述べている。
ドキュメントが豊富で完全なもので無い限り、そのライブラリが何をサポートするかを本当に知ることはできません。オブジェクトを利用する際に、そのオブジェクトでは、どういったプロパティやメソッドが利用できるのかを記述したインターフェースの型もないのです。ドキュメントがすべてのAPIをカバーしていないのであれば、それがどう振る舞うかを調べるテストを書かないといけないのです。
彼が考える別の問題は次のようなものだ。
動的言語をつかっていると、プログラムを組むために、システムに関してより多くのことを頭の中にいれておかなければならないのです。どのオブジェクトがどのメソッドをオーバーライドしているのか、どのオブジェクトが新しい機能をもっているのかといったようなことです。
これらの問題はどれも、外部のライブラリを利用しなければならない際に問題となるが、自分のコードだけで完結している場合は、コード自身を所有しているので、それほど問題とならないだろう。
C# 4.0ではdynamic lookupが導入され、開発者は動的型付けのオブジェクトを宣言できるようになっている。この機能は、PythonやRubyといった動的言語から開発者が簡単にオブジェクトを扱えるようにしたり、IDispatch経由でアクセスするCOMオブジェクトや、HTMLやDOMのように変化する構造をもつオブジェクト、リフレクションで取得された.NETの型などを扱いやすくすることを意図されたものだった。動的な型をもつオブジェクトは、いくつかの制限付きで、動的言語で通常利用されるように使うことができる。
Palermo氏は、明示的に動的だと個別に宣言することなく、メソッドの中のすべてのオブジェクトを動的な型として扱えるdynamicキーワードをC#に導入するように提案している。これによって動的型付けを好む開発者はC#の中で自由に使える一方、安全のために言語をアセンブリの境界のレベルでは静的にたもつことが可能になる。
これは望ましい折衷案なのであろうか?