古い言語の制約
LL Futureで「古い言語、新しい言語」のセッションを担当させていただくことになった竹迫です。
皆さんは初めてBASICを触ったとき、変数代入になぜLETの構文がついていたか疑問に思ったことはないでしょうか?
他の言語処理系でも、初期のPascalの実装ではラベル名に指定できる文字列は数値のみという制限があったりしました。これはなぜでしょうか?
1つの理由はこうしたほうが構文解析の実装が楽になるからです。
今では本当の理由は推測するしかありませんが、当時の計算機資源の制約や(CPUが遅い、メモリが少ない、記憶装置へのアクセスが遅いなど)、パーサーの実装技術が発展途上していたこともあり、プログラミング言語の表現が制約されていた時代があったからではないでしょうか。
設定ファイルとしての言語
アプリケーションの動作をカスタマイズするために、設定ファイルを別途用意する、という文化がありました。1つは環境変数によってアプリケーションの動作を切り替えるという方法で、C言語ではgetenvするだけで設定値が読み込めるので、自分で設定ファイルを読み込んでパースする処理が必要ありませんでした。アプリケーション開発者にとってこれは非常に楽なことです。設定ファイルを読み込むためだけにわざわざ自分でパーサーを一から書くのは面倒なことです。
そこで登場してくるのがアプリケーション組み込み用言語です。Emacs Lispが1つそうでしょう。
WindowsではINIファイルやレジストリという機構がOSのAPIとして提供されていましたが、それとは逆にUNIXではそのようなAPIは標準で提供されなかったため、テキスト処理が手軽にできるスクリプト言語処理系が多く誕生したものと思われます。
そして、これらのスクリプト言語で記述されるアプリが増えると、設定ファイルを自分自身の言語で記述できるようになります。ひとつはPerlの古典的なCGIなどでよく見られるスタイルで、設定ファイル自体がPerlのプログラムになっていて、そこに書かれた変数の値に応じてアプリケーションの動作を変えるものです。
こうした言語内DSLが簡単に作れるかどうかが、1つのLLの基準ではないかと思っていたりします。
どこで動く?
さて、世界中のデバイスで一番多く使われているスクリプト言語処理系は一体何でしょうか?
UNIXのシェルでしょうか? それともMS-DOS系のバッチファイルでしょうか?
その1つがECMAScript(JavaScript、ActionScript)ではないかと思うのですが、正確な数字はどうなっているのでしょうか。元々ブラウザに組み込まれることを前提に実装された言語処理系なので、言語仕様が非常にコンパクトでかつ実用的です。最近では内部でVMのバイトコードを実行するような実装も多く、パフォーマンスの問題も徐々に改善されてきたりします。
去年のLL魂のライトニングトークでSHA1をJavaScriptで実装したとき、Cのネイティブコードに比べると約2,000倍の速度差があったという報告がありましたが、これは単純に計算すると最新の4GHzのCPU上で2MHzの仮想実行コードが動いている計算になります。2MHzのクロックというと当時のMSX以下です。実はJavaScriptで実装されたMSXのエミュレータ(jsMSX)も世の中には存在し、ブラウザでMSXが動くようにまでなっています。
※ちなみに余談ですが、映画『ターミネーター』の中で表示されるプログラムはZ80のアセンブリ言語です。遠い未来でもZ80は使われているということなんでしょうね。
ただ、モバイル系の端末ではまだまだCPUパワーが足りないため、JavaScriptよりもFlashLiteのようなコンパイル済みのバイトコードを実行するActionScriptの処理系が日本では注目されています。
Shibuya.abc?
バイトコードといえば、最近注目を集めているのがLLVM。Mac OS Xで標準採用され、OpenGLの実装がLLVM上で動作するようになり一気にメジャーになりました。
ここにきて突然ECMAScript 4の仕様策定作業が中止されたとの発表がありました。ECMAScript 3.1 をベースに標準化が行われる予定になるのですが、ECMAScript 4の一部の仕様を実装してきたTamarinや、ActionScript3.0の未来はどうなるのでしょうか。
ECMAScriptバイトコード処理系でLLVMバイトコードを動かすとどうなるのか?
そこに未来があるのかどうか?
今年のLL Futureでは以下のパネラーの方々をお招きして時間の許す限り徹底討論する予定です。
三度の飯よりもabcが好き!な、Shibuya.abc(ActionScript Byte Code)的なメンバーがさまざまなネタをお届けしたいと思います。お楽しみください。
おまけ:私が番長になったきっかけ
最後に、私とLLイベントの関わりについてお話しします。
LL SaturdayやLL Weekendの参加報告がおもしろかったので、広島に住んでいる自分もこの日は上京してぜひ参加したいと思い、3年前のLLDNの昼の部のチケットを思い切って購入したのが最初です。
しかし楽しみにしていた夜の部のチケットがすでに完売していて購入できなかったがために、予約語プログラミングというネタを思いつき、ライトニングトークに応募しました。このときスタッフの方に審査を通していただき、広島から羽田空港行きの飛行機の中でppencodeのプログラムを作成してLTデビューすることになりました。
以後、LL RingでPerl、Plaggerで2本、LL魂ではライトニングトークの番長を担当させていただき、自分自身もイメージファイトすることになりました。
もしもLLDNの夜の部のチケットが売れ切れにならず普通に買えたとしたら、おそらく今の自分はなかったと断言できます。今年のLL Futureに行こうかどうかまだ迷っている人がいらっしゃいましたら、ぜひ思い切って参加してみてください。