【レポート】LL Tiger 2010

恒例の「LL祭」に異変!? ScalaやClojure、HTML5も!

2010/08/11

 毎年夏になると開かれるLL(Lightweight Language:軽量プログラミング言語)の総合イベントが今年もやってきた。2010年7月31日、東京・虎ノ門にあるニッショーホールで「LL Tiger」(http://ll.jus.or.jp/2010/)が開催された。丸一日、各言語に関する最新トピックを紹介する講演やライトニングトーク、パネル討論会などで盛り上がった。

 2003年以来開催されているLLイベントは今年で8回目。今年はLLの定義からは外れていそうな、JavaVM上の2大注目言語、「Scala」や「Clojure」のほか、Web関連技術で注目されている「HTML5」が午前中の「Language Update」に登場するなど、例年とやや異なる出だしとなった。ここでは午前のセッション、LL関連のアップデートをレポートする。

Perl6は永遠のベイパーウェア返上?

photo01.jpg ブロガーの小飼弾氏。iPadで(!)、スクリプトの実行を実演。サーバ上にサンドボックスを用意して実行する環境だったようだ

 Language Updateに最初に登壇したのは、ブロガーの小飼弾氏。Perl関連の活動でも知られる小飼氏は、6月に話題となったPerlの商標権問題に「そんなことがあったね」という感じで軽く触れた後、Perl6の最新動向について紹介した。

 ちょうどイベント開催直前の7月29日に、Perl6の実装の1つ「Rakudo Star」がリリースされていた。小飼氏が「(Perlに深くコミットしている)私ですら、Perl6はベイパーウェアじゃないかと思うぐらいですが」と笑いながら前置きするように、このRakudoもまた、公式の「Perlバージョン6」と言えるものではないという。

 それでもPerl6で予定されている言語の新機能などの多くがRakudo Starでは動いていて、こうした機能の一部について小飼氏はコード例を示しつつ、実演してみせた。例えば、Perl6では、より例外処理が綺麗に書ける「try/catch」が使えるようになるほか、遅延評価が行える「Lazy List」、引数の型で実行する関数が変えられる「Multi Dispatch」、自分で演算子を定義できる「Hyper Operator」などがあるのだという。Perl5で加わったオブジェクト指向関連の機能も、クラス定義や継承がPerl6では新たに定義し直されている。

perl6.jpg 遅延評価による無限サイズの配列が扱えるようになるなど、Perl6には多くの新機能があるという

 長年リリースが噂されてきたPerl6が、ついに日の目を見るかというところだが、問題はRakudo Starは実行が遅いほか、正しく機能していないPerl6の機能があること。現場の実用主義の色が濃いPerlコミュニティでは、Perl5で困らないという声も聞こえてくるなど、バージョン6への道はまだ遠そうだ。

ソーシャル特需でPythonも伸びる!?

 Pythonのアップデートに関する講演を行ったのはPython関連の活動で知られるKLabの稲田直哉氏。同社はmixiやモバゲー、GREEといったSNSサイト向けに出している「恋してキャバ嬢」「モンスターバスター」などのソーシャルアプリでヒットを続けており、Python開発者を募集しているという。

python01.jpg Python関連のアップデートについて講演する稲田直哉氏

 稲田氏によれば、Pythonは現在バージョン2系から3系への移行期。7月にPython2系の最終バージョンとなるPython 2.7が出て、今後は3系だけになっていくという。「ただ、ほか(CPython以外)の処理系が追いついていないので、今はモラトリアム期間。CPythonも言語コアに手を入れないことになっている」(稲田氏)という。言語コアをいじらない代わりに、CPythonではGIL(Global Interpreter Lock:言語処理系全体のロック機構)がバージョンアップして応答性が向上するなど、ブラッシュアップを行っているという。また、Django、Mercurial、NumPyなど多くのメジャーなライブラリでバージョン3対応ブランチが存在するなど、Python2系から3系へは「連続するバージョンアップ」(稲田氏)になるといい、「日本では3への移行に悲観的な人が多かったが、比較的順調に推移している」(同)という。

python02.jpg Python処理系の開発ロードマップ

 Pythonは、Cで書かれたCPython以外にも、JavaVM上のJythonやPython自身で書かれたPyPyなどの処理系がある。Python処理系をPythonで書くというと、遅くなりそうに思えるが、実際にはJITエンジンを搭載するなどして高速化。PyPyは「今年はPython処理系の中で最速ではないかというところまで伸びた」(稲田氏)という。また、本家とも言えるCPythonではLLVMを使う「unladen-swallow」という高速化のプロジェクトがあり、これはバージョン3.3への搭載を目指して作業が進んでいるという。

 日本国内ではPHP、Perl、Rubyに比べてマイナーに見えるPythonだが、世界的に見ればPythonの人気は高い。稲田氏は「Ruby人気に嫉妬して海外でよく使われてるんだぞっていう言い方をする人がよくいますが……」と前置きし、そういうことはしないのだと宣言するのかと思いきや、「…………(私も)します(笑)」と、海外の事例を中心にPythonの活用の幅が広がっていることを指摘した。例えば、UbuntuやFedoraといったLinuxディストリビューションのシステム設定関連のスクリプトでPythonは必要不可欠なほどLinuxの基盤に取り入れられていることや、仮想化環境の管理ツール「virt-manager」などGUIアプリでもPythonが利用されている例を指摘。「オープンソース系では標準言語になりました」(稲田氏)という。Pythonは、このほか、Google App Engineでの採用などWeb系の開発ではよく使われているといい、「みなさんもぜひPythonを使ってください」と講演を締めくくった。

JavaVM上にLispが返り咲き「Clojure」

clojure01.jpg 「Clojure」(クロージャー)を紹介する槙俊明氏

 続いて、JavaVM上の注目言語「Clojure」(クロージャー)について紹介したのは、槙俊明氏だ。ClojureはLisp風のプログラミング言語だが、ほかの多くのLisp方言と異なり、Javaプラットフォームに乗る形としたことで、実用言語として返り咲く可能性があるLisp族期待のホープだ。

 ClojureはRich Hickey氏が2007年に開発を始めた比較的新しいプログラミング言語で、2009年5月にバージョン1が登場している。

 槙氏によれば、2010年初頭に日本語の関連書籍が出版されるなど、一時的に国内にも「空前のClojureブーム」が起こったが、その後は「そんな時代がClojureにもありました」(槙氏)と苦笑いするような状況に落ち着いているのだという。取っ付きやすさの問題か、確かに話題の面でClojureはScalaに水を開けられつつある印象だ。

clojure02.jpg ClojureによるHello Worldの例

 Clojureは一見するとLispそのものだが、実際には伝統的Lispと異なる点もあるという。ややカッコが少なめで、角カッコやブレースを使ってハッシュやベクタ、セットといったリスト以外のデータ構造についてもリテラルに表現できるなどの特徴があるという。既存のJava資産が活かせる点もClojureの特徴で、自然で簡易な文法でJavaのクラスライブラリを呼び出すことが可能だという。

 Clojureは関数型言語の性格が強く、いったんデータ(値)を作ると、それはその後も変更できない「イミュータブル」(不変)を基本としている。これではデータを少しずつ加工したり追加したりする際に、毎回コピーが発生して効率が悪そうに思えるが、Clojureではメモリ上で共通部分を共有するという効率的なデータ構造を持っているという。

 逆にデータがイミュータブルであるため、並行処理に向くという。Clojureには並行プログラミングを容易にする4つの強力なAPIがある。

 槙氏は、このうちの1つ、refという言語プリミティブを紹介。値不変を基本とするClojureだが、refを使うことで状態を扱えるようになるという。例えば、マルチスレッドで相互に依存性のある値を変更する場合、非関数型の言語では明示的なロック機構を用いるが、ClojureにはSTM(Software Transactional Memory)という機構が用意されていて、楽観的ロックによる並行処理が簡単に記述できる。「データベースの世界でいうACIDのうちACIを提供するもので、言語レベルでインメモリDBを持っているイメージ」(槙氏)といい、アトミックな処理を行いたい処理範囲を指定すると、そこではデータベースのようにトランザクション処理が行えるという。STMでは各値のバージョン管理が行われていて、アトミックな処理の最後に不整合が起こると、変更が破棄されてロールバックするというデータベースのような仕組みが実装されている。これにより、デッドロックやスレッドアンセーフなバグを心配することなく並行処理が簡単に書ける。こうした並行処理を書きやすいのがClojureの強みだという。

clojure03.jpg Clojureには並行プログラミングをサポートするスレッドより抽象度が高いAPIが4種類あるという
clojure04.jpg ClojureにあるSTMはインメモリDBのように扱えるといい、その仕組みはデータベースに似ているという

 もっとも、Clojureに限らず、STMについては懐疑的な意見もある。複雑さは排除されるもののパフォーマンスが思うように出なくなるといったケースがあり得るからだ。

 Clojureはまた、Lispが強力だと言われる理由の1つである「プログラムとデータの区別がない」という特徴も持っている。このため、マクロを使ったDSLの作成が容易で、「定型処理が書きやすい」(槙氏)という。

開発サイクルが“LL的”なJavaVM言語「Scala」

scala01.jpg Scalaについて紹介する尾崎智仁氏

 Clojureと並んで注目されているJavaVM上のプログラミング言語「Scala」(スカラ)について紹介したのは尾崎智仁氏だ。Scalaは静的型付けのコンパイル言語だが、Java言語と異なり「少ないタイプ量」であることが、まず最初の特徴だという。

 また、Scalaはオブジェクト指向と関数型という2つのパラダイムを融合させた「ハイブリッド言語」であるという。ファーストクラス関数が使えることで、Java言語で長らく議論が続いたまま取り入れられていないクロージャが利用できるという。

 Java言語による開発と、Scalaによる開発を比べたときに大きく異なるのは、REPLが使えることだという。REPLとはRead-eval-print loopの略で、Lisp系言語やRuby、Perlなど多くの言語で用意されている。言語処理系を動かしながら1行ずつ入力し、その場で評価(実行)させていくことができるコマンドラインの環境で、ちょっと試してうまく動いたら関数やクラスとして実装する、というボトムアップ的な開発に使える。尾崎氏は、このREPLがあることで「テストを書く、REPLで確認、コードを書く、テストを書くというサイクルがLL的」になるのだという。Java言語のようなコンパイル型の言語では、こうしたイテレーションがLLに比べて長くなりがちだ。型推論の機能により、必ずしも明示的に型を宣言する必要がないことも、REPLを使う上では重要かもしれない。

scala02.jpg 尾崎氏が示したScalaのコード例。Twitterのハッシュタグを検索している

 最近では書籍や関連記事などScalaに関する日本語の情報が増えつつあるほか、処理系の開発自体も活発だ。7月15日にはバージョン2.8.0がリリースされたという。前バージョンの2.7系とバイナリ互換がなくなるなど大きな変更で、特に2.8で再設計されたコレクションライブラリが便利で、「2.7に戻れなくなる」(尾崎氏)ほどという。明示的にボクシングさせないアノテーション記法が取り入れられるなどパフォーマンス上も有効な機能追加があるという。

 プログラミング言語としては新参者のScalaだが、すでにTwitterのコアで利用されているほか、FoursquareやLinkedInでもScalaは使われているという。まずは対象OSやVMの普及を待ってから開発言語を選ぶ時代と異なり、サーバサイドの言語選択は、よりダイナミックになっていると言えそうだ。

 尾崎氏は、「いろんなパラダイムを取り入れているので、自分自身の裾野を広げるのにいい。日々の業務に使うにも、型安全でコード量も減っていい」と締めくくった。

日本発、国際標準規格にもなるRuby

ruby01.jpg Rubyのまつもとゆきひろ氏

 Rubyの最新情報について講演したのは、Ruby言語の創始者、まつもとゆきひろ氏。秋を待たずに最新バージョンのRuby 1.9.2がリリースされると言われている現在だが、そうした本家CRubyと直接関係しない比較的大きなトピックとして、Rubyが国際標準規格として受理される見通しがハッキリした、ということが挙げられる。

 まつもと氏によれば、時期についてはコメントできないものの、Rubyの言語仕様がJIS規格となり、そこからISOのファーストトラック手続き(JISのようにISOが認める標準化団体の場合、手続きを簡略化できる)により、国際標準となるのは時間の問題だという。まつもと氏は、「なんと、国際標準規格付きのLL(笑)」と笑う。言語仕様が複雑なためにRubyは、本家以外の処理系が登場することはないだろうと言われていて、「Perlと並んでRubyは双璧だった」(まつもと氏)という。しかし、今や両者ともに処理系は複数あり、Rubyについては標準化も進んでいる、というわけだ。

 本家Rubyのほかに、JRuby、Rubinius、MacRuby、IronRubyと処理系が増えているRubyだが、まつもと氏によれば、RubyをHPCに活かそうという動きや、コンパイラとランタイムを分離して軽量化し、Luaのように組み込みに使えるRubyを作ろうという動きがあるという。

 最近、まつもと氏はRuby 2.0に向けた機能追加についてブログ上でアイデアを公開しつつあるが、一方でRuby 2.0構想は実は古い。「Rakudo(Perl6)の開発は2000年に始まった。私がRuby 2.0について初めて口にしたのはいつだっけと調べてみたら、1999年だった」(まつもと氏)と自ら暴露。Perl6はリリースに一歩近づいたが、Ruby 2.0はまだ道のりが遠そう。「(次々と新機能を入れたバージョンアップができる)若い言語がうらやましいなと思うことがときどきある」(まつもと氏)のだという。

ネタ言語、PHP!?

 PHPの最新情報についてアップデートを行ったのは小泉守義氏。「PHPは実用主義なので、(アップデートなどは)とくにありません」と、のっけから、“ネタ”にされがちなPHPコミュニティの人らしい発言で会場のムードが一気に「笑い」に。

 実はクロージャやRubyのmixin的なもの(実装の継承)が入ったり、ネームスペースが使えるようになるなど、PHPにはかなり大きな言語機能の拡張が控えている。その一方、小泉氏によれば開発の舞台裏には、人間くさいゴタゴタもあるようだ。

 ネームスペースの区切り文字としてバックスラッシュが採用され、これは日本では円マーク問題として認識されているが、「民主主義の悲劇」(小泉氏)により、そう決まってしまったのだという。「これは韓国では当然ウォンマークです」(小泉氏)。会場には“マジか、カンベン”という感じの力の抜けた笑いが広がったように記者には思えた。

php01.jpg PHPのアップデート情報を紹介する小泉守義氏

 さらにPHP5.3という安定系ブランチに新機能を入れられないことに業を煮やした1人のコミッタによる“ブランチ削除事件”の話など、小泉氏によるPHPの言語アップデートは、笑いの絶えない“ネタ発表”というものだった。

注目度ではナンバーワン!? HTML5

html5.jpg HTML5について紹介する白石俊平氏

 LLやプログラミング言語の範疇に入るのか、という疑問の声も聞こえそうだが、LL Tiger 2010の言語アップデートには「HTML5」も含まれていた。発表したのはGoogle API ExpertでHTML5関連の著書もある白石俊平氏だ。

 白石氏によれば、従来のHTMLとHTML5の大きな違いは、「タグで定義しているのではなく、APIの塊となったこと」という。従来、具体的な個別のタグ名で定義されていた語彙は、Web IDL(Interface Description Language)と呼ばれる記法を使い、DOMのAPIとして定義されている。「HTMLやXHTMLは単なる表記法という扱いになった」。HTML5はDTDを持つSGMLではなく、「ずばっと過去を断ち切り、SGMLとは独立した1つの言語になった」(白石氏)。

 HTML5では要素も増えていて、従来、divタグを使ってマークアップしていたところで、より意味のあるarticleやfooterなどのタグが使えるようになる。「意味でマークアップすることで検索や広告の精度が上がっていくことが考えられる」(白石氏)。

 HTML5といえばマークアップ言語のHTMLだけでなく、Canvasやローカルストレージといった関連の仕様も含むアンブレラ・タームとして使われることも多いが、白石氏はWebGLなどのデモを交え、HTML5ではAPIが増えることになると指摘した。

関連リンク

(@IT 西村賢)

情報をお寄せください:

Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

- PR -

注目のテーマ

ソリューションFLASH

「ITmedia マーケティング」新着記事

プログラマティック広告はどう変化? 米国レポートから見える「今後の動向」
CTVとプライベートマーケットプレイスへの広告支出のシフトにより、米広告業界ではプログ...

「顧客体験」の重要性高まる 2024年「CX」関連の人気記事TOP10を紹介
今回の記事では、2024年「ITmedia ビジネスオンライン CX Experts」のアクセスランキング...

SNSの情報がアルゴリズムで最適化されていることを「知らない」が6割超 年代別では?
ロイヤリティ マーケティングは、10〜60代のSNS利用者を対象に、SNS情報の信用度に関する...