最近の記事でEmerging Languages CampのオーガナイザであるAlex Payne氏がこの5年でプログラミング言語の世界がどのように変わったか、これからどのように変わっていくのかについて考えを披瀝している。InfoQは氏に話を聞いた。
氏は最近の言語の進化の物語とその未来を語る上で手助けになる3つの条件を挙げる。
- ツールの重要性
- "実装戦略"として仮想マシンを使う
- 他言語化
氏が言うように、Goの作者であるRob Pike氏が2010年に言語について振り返ったとき、氏はなぜ"30年以上の蓄積があるプログラミング言語理論の研究を無視しているように思われる"言語を開発したのか、質問された。もちろん、Goの保守的な特性は普及を妨げるものではないと氏は言う。一方で、Scalaは"当初からツーリングに苦労してきた"。その結果、多くのScala開発者は"なじみのJavaの世界"へ戻ってしまうか、Clojure、Go、Rustの世界へ行ってしまった。
機能に従って言語が普及するわけではないことをどのように説明しますか。
一番簡単な解釈は、 “ある言語が親しみにくければ、その言語がいかにリッチな機能を持っていようが関係ない”ということだと思います。私の友人にはClojureやClojureScriptで仕事をしている人がたくさんいます。Clojureは完全にモダンな言語であると評判です。関数型であり、高性能な不変データ型を持ち、core.typed
を使って“gradual typing”を実現できますし、core.logic
を使えば論理プログラミングも可能です。しかし、Clojureは開発環境を整え実行することですら大変難しいです。ClojureScriptの場合は輪をかけて難しい。Clojure用のEmacsの構成もありますし、チュートリアルもあります。Leiningen向けのプロジェクトテンプレートやIDEのプラグインもあります。しかし、Clojureのツーリングはコミュニティによって提供されているので、変わり続けます。最新のライブラリを用意していないと、先月にセットアップしたのものが今日は動かない、ということが起き得ます。
他方、GoのチームはGoを生産的に使うためのツーリングも用意しています。これによって、統合作業はよりミスが少なくなり、簡単になります。つまり、Goは実際に試してみやすいのです。Clojureはセットアップも難しく、言語の文法とプログラミングのパラダイムもなじみが薄いです。Clojureはプログラマにたくさんの機能を提供します。しかし、生産的に使いにくいのです。
先進的な言語であるにも関わらず、ツーリングが弱点になってしまうのはなぜでしょうか。
言語が複雑であればあるほど、ツールを開発するのは難しいのです。大半の言語設計者にとってツーリングについて考えるのは後回しです。しかし、この状況は変わりつつあるようです。これは、スチュワードシップの問題だと思います。お話したように、多くの言語はツール(エディタのサポート、パッケージマネジャー、リンターなど)をコミュニティに任せています。サードパーティの言語ツールは良くできているものもありますし、そうでないものもあります。いずれにせよ、そのようなツールには言語の作者自身あ作った品質基準や完成度基準がはないのです。このような中心的な計画がないことが、多くのプロジェクト間でスムーズに開発するのに必要な調整を困難にしています。
私たちは5年前よりツーリングの価値についてしっかり理解できているでしょうか。
わかりません。MicrosoftとAppleはこの点を完全に理解しています。彼らが提供するツールは完璧ではありませんが、それぞれのプラットフォームでのソフトウエアの急増を実現できるようにしています。
今年のEmerging Languages Campはツーリングにまでフォーカスを広げていましたね。どうでしたか。
"プログラミングの未来"という包括的な主題の下、プレゼンターにはさまざまなレベルでプログラミングプロセスを改善するプロジェクトについて話をしてもらうように呼びかけました。最終的にはツーリングに関するいくつかの発表がありました。3Dシェーダを設計するためのPhotoshopのようなアプリケーションについての発表や、動的に分析してコード補完をするEclipseプラグインについての発表がありました。
来年も同じような話題にフォーカスするかはわかりません。しかし、今回のイベントはうまくいきましたし、ツールに関するプレゼンも好評だったと思います。
言語の“実装戦略”としてVMを使うことの価値は何だったのでしょうか。なぜ、もうこれ以上、要件を満たさないかもしれないのでしょうか。
2008年、私は高級言語(Java、Erlang、JavaScriptなど)向けの"VMは盛り上がるだろう"と予測しました。Clojure、CoffeeScript、Scalaのような言語が生まれ成功したことで私の予測は当たりました。しかし、実装戦略としてのVMは限界を見せ始めています。CoffeeScriptへの興味の衰え、ScalaがJavaに取って代わられていること、そして、Clojureコミュニティで定期的に話題になるLLVMへの移植がその証左です。
もし、もうひとつ予測をするとすれば、今から5年後のプログラミング言語はRust、Julia、GoのようにホストVMから解放されます。モノのインターネットの世界では、私たちは太ったVMが動作する余地がない方向へ動いています。
プロの開発者がある程度複数の言語を扱うのはほとんど共通認識になっている、とあなたは書いていましたね。なぜこの点が重要なのでしょうか。
ネットワークでつながったことなるシステムを扱っている限り、複数の言語を扱う必要があります。現在開発されているソフトウエアのほとんどがネットワークとつながっています。典型的にはクライアント/サーバ形式のアーキテクチャになります。異なる技術がクライアントとサーバを“占めた”のです(JavaScriptは例外ですが)。これによってある程度複数言語を扱える必要が生まれています。
モダンなフロントエンドのウェブ開発ですら、複数の言語を使います。マークアップ、テンプレート、スタイリングの言語を、JavaScriptの複数の方言とともに使います。すべての言語を統一するという試みもありましたが、ほとんどの開発者は複数の言語を使うことに満足しているようです。
2010年から、Emerging Languages Campはプログラミング言語の作者、研究者、プログラミングの世界を前進させることに情熱を注いでいる人のためのイベントとして開催されている。今年は9月17日にセントルイスで開催された。