Visual Basic はこれまでずっと,静的型付と動的型付の境界線上にいた。初期の VB では今日 “ダック・タイピング(duck typing)” と呼ばれる遅延バインディング (Late Binding) がサポートされていて,変数型の明示的な宣言やローカル変数の宣言そのものでさえ省略することができた。ただし変数の型を宣言した場合には,早期バインディング (Early Binding)で処理されることによって,実行時型チェックとパフォーマンス向上を実現していた。
Visual Basic 4 で COM が導入されたときに VB は,他の言語に類を見ないユニークな機能を手にいれた。変数型を宣言したときにコンパイラがそれを実装クラスではなく,暗黙的にインターフェース参照として解釈するようになったのだ。ただしすべてのクラスには同じ名称のインターフェースが暗黙的に定義されているため,この変更が明確でない場合もある。問題なのは,このスキームでは他のクラスのインターフェースを明示的に実装することはできても,他のクラスを直接継承する手段がない点にある。VB 開発者の多くはこの欠点に不満であったが,Google が最近発表した プログラム言語 Go でもこれと同じようなデザインが採用されている。
VB.NET とも呼ばれる Visual Basic 7 では,無制限なインターフェース形式のポリモーフィズムが言語から削除され,代わりに Java で一般的になった実装継承と明示的な複数のインターフェースの組み合わせが採用された。さらに VB では,コンパイラが明示的な型宣言とキャストを要求する Option Strict ディレクティブも追加されている。
このように VB が静的型付パラダイムに向けて歩み続けている間,他の世界ではそれと逆に Python や Ruby といった動的型付を持つ言語への移行が進みつつあった。Visual Basic がこれに気づいて元の方向に引き返す行動を起こすまでには,この後さらに2つのバージョンを必要とした。
VB 9 では動的型付の領域において,興味深い機能がいくつか導入されている。その第1が大成功を収めた XML リテラルと XML 解析機能だ。このシンタックスは Haskell プログラム言語用に提案され、その後 C# でプロトタイプが作成された。Visual Basic は、開発レベルの言語としてこのシンタックスを採用した2番目の言語になった。ちなみに最初の言語は ECMA Scriptfor XML であり,2004年に最初の標準化が行われている。
特定の型セット用のシンタックスが VB に追加されたのはこの XML 解析が初めてではない。バージョン3から6までの間にデータアクセス用の感嘆符(!)オペレータというものがあった。これは現在もディクショナリ形式の検索でサポートされてはいるが、ほとんど忘れられた存在である。以下のように記述する。
firstName = recordset!FirstName lastName = recordset!LastName
Visual Basic 9 には完成にたどり着けなかった機能もある。リフレクション API を明示的に使用せず,実行時の名前指定によるオブジェクト生成やプロパティ操作を行う機能がそれであって,次例のような記述をする。
className = “Customer” memberName = “FirstName” x = New (className) x.(memberName) = “Fred”
VB 10 は真の動的型付言語と呼べる最初のものだ。これまでこの機能は,一時的な型のみにその対象が限定されていた。実際のところ,新たな型を生成したり既存の型を操作したりすることは,VB に動的言語ランタイム (Dynamic Language Rntime / DLR) サポートが組み込まれるまで実現できていなかったのだ。現在ベータ版である Visual Basic 10 では,JavaScript のような言語にあるプロトタイプ形式のものも含めて,開発者自身によるオブジェクトモデルの生成が可能となる。
Microsoft の Lucian Wischik 氏は将来的な展望として,XML解析機能のシンタックスを拡張可能にすることを検討中である,と表明している。現時点で想定される対象は XAML や Siliverlight における HTML DOM のサポートだが,それら以外の任意のツリー形式のデータ構造にも対応できる。
Visual Basic の若き弟である VBScript が備えている,独自の機能についても記しておくべきだろう。ほとんどのインタプリタ言語がそうであるように,VBScript は文字列に格納された任意のコードを実行することができる。このような評価(Eval)・実行(Execute)機能は VB 6 アプリケーションにおいても,エンドユーザ・スクリプティングなど動的な処理が必要とされる時によく利用されている。将来的にはこの役割は,IronPython や IronRuby が担うことが期待される。