私は、職業プログラマですが、プログラミング言語を仕事で作る機会はありませんでした。趣味ではちょこちょこやっていた程度です。今回ADPを作るにあったって以下の2点で、C++の仮想関数を使いました。
・パーサー
・ユニフィケーション
ADPの文法ですが、パーサーが書きやすいように作成しています。つまり、変数は$で始まるとか文字列は"や'で始まるとか最初の一文字を読んだ時点で言語要素が判るようにしています。そのタイミングで対応するオブジェクトを作成し、そのオブジェクトでコンパイルを実行するということをやっています。ユニフィケーションも同様にオブジェクト間のマッチングを仮想関数(マルチメソッド)で行っています。
あと、STLを使っているのですが、vectorとかstringを普通に使用していますので、大変楽に開発ができています。
C++を選んだ欠点ですが、他言語インタフェースでCを呼び出す時、オブジェクトの変換が必要になることです。これはオーバーヘッドになりますので、悩ましいところです。もっともC++を呼び出すようにすればオーバーヘッドはなくなりますがC++しかダメってのもな・・・。