以前、複数の組み込み機器をネットワークを介して連携させるためのミドルウェアに関する研究を行っていました。
組み込み機器にミドルウェアを搭載することで、機器間のOSやプラットフォーム・ハードウェアの差異を吸収し、様々な組み込み機器どうして連携動作を容易に実現することが可能になります。
僕が研究対象としていたのは、Sun Microsystems社が提唱する「Jini」というミドルウェアです。
会社名を見れば分かるとおり、Javaで実装されています。
組み込み機器をネットワークを介して連携される状況として、ホームネットワーク環境が挙げられます。
ホームネットワークでは、次々と発売される新しい仕様をもった新製品が、続々とネットワークに接続されていきます。
なので、組み込み機器連携のためのミドルウェアは、未知の仕様の機器がネットワークに追加された場合においても、その機器と連携できるような仕組みを持つことが必要であると考えます。
しかし、僕が研究対象としていた「Jini」はそうなってはおらず、僕はそれを解決するためにJiniを拡張し、その結果を卒業論文として提出しました。
「どうすればこの問題を解決できるんだろう」と悩んでいるときに真っ先に浮かんできたアイデアは、「クラスファイルをプログラムの実行中に動的に修正・生成する」ということでした。
クラスファイルに定義されているメソッドを修正したり、新たなメソッドを追加したりすることで、未知の機器にも対応できるんじゃないかと考えたのです。
でも、Javaの言語仕様レベルでは、そのようなことは実現できません。
Javassistという、クラスファイル/バイトコードをプログラムの実行中に動的に編集できるライブラリもありますが、そのときは知らなかったのでこのアイデアはパスし、別の方法で問題点を解決するアプローチを選択しました。
今考えれば、Javaの言語使用レベルでプログラムの動的修正・生成が実現できれば、意外と簡単に問題を解決できたのかも知れません。
しかし、Jiniというミドルウェアは、クラスベースのオブジェクト指向言語であるJavaで実装されているので、そのようなことはできません。
なら、組み込み機器連携を実現するためのミドルウェアが、プロトタイプ・ベースのオブジェクト指向言語で実装されていればどうなるんでしょう?
プロトタイプは動的にメソッドやフィールドの追加・修正が可能なので、ものすごく柔軟性が高いミドルウェアが実現できそうです。
今現在僕が知っているのプロトタイプベースのオブジェクト指向言語はJavaScriptだけなので、ミドルウェアの構築には向かないかもしれませんが、現実的な速度で動作し、ハードウェアの深い部分まで触ることができるプロトタイプ・ベースのオブジェクト指向言語が存在すれば、柔軟性の高いミドルウェアを構築できそうな気がします。
かなり興味があるので、JavaScriptの他にどのようなプロトタイプベースのオブジェクト指向が存在するのか、探してみたいと思います。