LL Future実行委員の高野光弘(takano32)です。
今回は少し真面目に低級言語と高級言語、そしてその先にあるもの、というテーマで語ってみようと思います。
低級言語と高級言語というのはプログラミング言語の分類で、プログラミング言語は大きくこの2つに分けることができます。
低級言語とは機械語、あるいはアセンブリ言語などの機械語に近いプログラミング言語のことを言います。それに対し、高級言語は低級言語よりも抽象度の高い記述ができるプログラミング言語のことを言います。低級言語の代表格にはアセンブリ言語、高級言語の代表格にはC言語 などがあります。
一般的に低級言語はパフォーマンスを優先し、機械語やそれに準ずる抽象度でプログラミングを行うため、低級言語がターゲットとしたアーキテクチャでのみ動作するプログラムを記述することになります。たとえば、パフォーマンスやプログラムサイズを重視するオペレーティングシステムの記述やマイコンのプログラムの記述などで活躍しています。
しかし、低級言語はアーキテクチャに合わせてパフォーマンスの良いプログラムを記述しやすいというメリットとは裏腹に、特定のアーキテクチャを意識したプログラムの記述となってしまい、特定のアーキテクチャ以外では動作しないプログラムの記述となってしまうというデメリットもあります。
高級言語はこのような特定のアーキテクチャに依存する記述を排除し、さまざまなアーキテクチャで動作するプログラムを記述するということを可能にしました。現在、幅広く使われている代表的な高級言語はC言語です。C言語によって記述されたプログラムはC言語を解釈する処理系がそれぞれのアーキテクチャ向けに機械語を生成することでさまざまなアーキテクチャで動作させることができます。たとえば、GNUプロジェクトで開発されているプログラムの多くがC言語により記述されており、これらのプログラムはコンパイルしなおすだけで、さまざまなアーキテクチャで利用することができます。
ところが、C言語にも問題があります。C言語では特定のアーキテクチャ向けにプログラムの記述をコンパイルし、バイナリプログラムに変換する必要があります。つまり、C言語のプログラムを動作させるにはC言語の解釈のみではなく、アーキテクチャの機械語に変換する仕組みも必要となります。また、一度コンパイルしたバイナリプログラムは他のアーキテクチャでは動作しないものとなってしまうのです。
このような状況から Lightweight Language(以下LL)と分類される言語が注目され、すでにさまざまな場面で利用されつつあります。LLに厳密な定義はありませんが、一般的なLLではコンパイルを必要としません。つまり、特定のアーキテクチャ向けにバイナリプログラムを生成する必要がないのです。この仕組みはLLの処理系がLLが動作するプラットフォームを構成し、アーキテクチャの差異を吸収することで成り立っています。アーキテクチャに依存しない仕組みはインターネットの世界でも親和性が高く、LLはインターネット上でさまざまなサービスを支えるプログラミング言語となりました。
さらに、近年はLLのプラットフォームがさまざまな言語のプラットフォームとして利用されるという時代に突入しています。たとえば、LLのプラットフォームにはJavaのJavaVM、C#の.NET VM などがあります。これらのプラットフォームで動作するプログラミング言語には JavaVMをプラットフォームにしている JRuby、Jythonや.NET FrameworkをプラットフォームにしているIronPython、Ruby.NETなどが知られ、プログラミング言語とプラットフォームにもさまざまな組み合わせが誕生してきています。
また、プラットフォームの中には内部で中間的なバイナリプログラム、バイトコードを生成することで、従来の高級言語に引けを取らない実行速度を実現しているものもあります。
とても不思議なことに、LLのプラットフォームの登場によってアーキテクチャに依存しないプログラムが記述できるようになりましたが、今度はプラットフォーム向けにさまざまなプログラミング言語が登場してきました。
未来のことは筆者にもわかりませんが、低級言語から続く抽象化の流れについて未来を考えてみるのもおもしろいのではないかと最近考えています。これまでの流れに沿ってLLを抽象化したようなプログラミング言語(一説にはUMLが実行可能になるとか!?)がこれから登場するのでしょうか。そんなことを考えてみるのも楽しいですね。
さて、話はLL Futureに戻りますが、「キミならどう書く?」では温故知新に重きを置き、高級なLLを低級言語のように使いこなし、地球に優しい短いコードでプログラミングする、「LL Golf」というプログラムをどう書く?
orgというサイトで開催します。ぜひ皆さんも未来に向けて「LL Golf」でエコプログラミングをしてみませんか!