今日は某社に依頼されて、プログラム言語を巡る状況をどのように見ているかを語ってきました。
こういう話をしてくれ、という依頼があれば、ただ働きでなければ喜んで出かけていきます。(と一応は営業活動的なことも書いておきながら)
そこで語ったことの概要のメモを以下にまとめておきます。
以下の話は何であるか §
私に見えた世界を状況把握のために整理したもので、正しいかどうかは全く不明。あくまで、私にはこう見えたという話であって、当事者は全く違うことを考えているかもしれない。また、多くの推測を含む。
ゆえに、これを事実であるかのように受け取ってはならない。
古い対立軸 §
Java対C#(.NET Framework)。
こんなものは既に過去のものであって、完全に古い。
新しい対立軸その1・大きな対立軸 §
大きく堅い言語(Java,C#)対小さく柔らかい言語(LL)。
LLとは、Lightweight Languageで、Ruby, Python, PHP, Perl, JavaScript等々を示す。
C#において、型推論によって型を明示しない変数宣言を可能にしたり、無名の関数をサポートするような方向性は、C#がライバルとして意識する対象がJavaではなくLLである可能性を示唆する。
(古くて新しい)新興勢力である小さく柔らかい言語は強い影響力を発揮しており、大きく堅い言語の方がその影響により変化する傾向が見られる。
新しい対立軸その2・小さな対立軸 §
Borland勢力対伝統的MS勢力。
MS社内に存在していることを推定している対立軸。
かつてBorlandでDelphiを手がけたAnders HejlsbergらのMS内Borland勢力はC#や.NET Frameworkを担っている。
一方、伝統的MS勢力とはMS-Cから連なるVisual C++系、あるいはPlatform SDK系の開発ツールを担ってきた者達。間違いなくWindowsというOSの開発を支えてきて、今もWindows Vistaの開発を支えている層。
ここで、Borland勢力は、MS社内での支持を失いつつある可能性がある。
Windows Vistaにおける.NET Framework対応に対する消極性の背景には、.NET FrameworkがOSレベルでの要求を満たし得なかった可能性が考えられる。
また、C#に追加される驚くほど多くの機能は、失われた支持を取り戻すための巻き返し策か、あるいは支持を失わせしめる理由となった可能性も考えられる。
また、C#ではないC++/CLIという言語が積極的に生みされている状況は、C#の代替言語が求められている可能性を示唆する。
問題は言語ではなくクラスライブラリ §
開発言語の相違は、実はあまり大きな問題ではない。ソースコードを別言語に変換することは実行可能なタスクであり、やってやれないことはない。
しかし、クラスライブラリへの依存性は別。充実した特定のクラスライブラリに依存したプログラムは容易に別のクラスライブラリに移行できない。
これは、同じ実行環境上のクラスライブラリにも適用される。たとえば、J#のクラスライブラリと、.NET Frameworkの基本的なクラスライブラリは同じILで記述されているが、例外処理機構等が同じではないため、混用すると上手く機能しないことがある。
混乱期の到来 §
プログラム言語の選択という観点から見ると、現在はまさに混乱期にあると言える。
どれを選べば数年後に良い結果を出すか、全く見通すことができない。
2つの対立軸「大きく堅い言語(Java,C#)対小さく柔らかい言語(LL)」「Borland勢力対伝統的MS勢力」の勝敗の先行き、あるいは他の要因によって、いくらでも変化する可能性がある。
つまり、現在お勧めのプログラム言語は存在しない。(強いて言えばC++とC++/CLI)
また、特定のプラットホームや技術への強い拘束を伴うクラスライブラリの利用はハイリスクと言える。
他にもある多数の波乱要因 §
波乱要因は他にも多数ある。
現在の常識が非常識に転換する可能性もあり得る。
実際に、多重継承を禁止することの害等、常識に対する疑問はいくつか個人的に持っている。
最後に §
繰り返しますが、ここに書かれた内容をけして信じないように!
ちなみに、そんな話を他社まで行って話をしてくるのか?と言われればその通りです。なぜなら、決断するのは私ではなく彼らであって、彼らが必要としているのは決断するためのヒントや考え方だからです。