第2回 サルでも分かるプログラミング言語の新潮流【後編】プログラミング言語の進化を追え(3/3 ページ)

» 2007年03月28日 08時00分 公開
[まつもとゆきひろ,ITmedia]
前のページへ 1|2|3       

リフレクション

 「リフレクション」とは、プログラムがプログラム自身を操作する機能です。例えば、現在実行中のプログラムに関する情報を得たり、現在実行中のプログラムを書き換えたり(メソッドやクラスを追加/変更など)する機能が、リフレクションに相当します。プログラムそのものを扱うプログラミングであることから、しばしばメタプログラミングと呼ばれます。自分自身でインタープリタが記述されることの多いLispなどの言語では、リフレクションは言語の本質的機能の一部です。

 リフレクションは非常に強力で、いろいろなことが可能になります。例えば、Rubyで記述されたWebアプリケーションフレームワークであるRuby on Railsでは、Rubyのリフレクション機能を使って、

  • データベーススキーマに対応したオブジェクトを作る
  • オブジェクト間の関係を維持する機能を生成する
  • バリデーションを行う機能を生成する

などの処理を行っています。これによって、人間がいちいちプログラムを書き換えたり設定ファイルを用意したりする手間が減り、生産性を向上させています。

アスペクト指向

 「アスペクト指向」は複数のクラスを横断するような機能(例えばデバッグ用にさまざまなメソッド呼び出しのログを取る機能)を、ひとまとめにして管理する機能です。従来のオブジェクト指向言語では、機能をクラスに従って組織化します。しかし、「ログを取ること」のように複数のクラスにまたがる機能は、あちこちのクラスに分散してしまいがちです。このような機能は1つの関心事に所属するので、できればひとまとまりの塊として扱いたいものです。これを「関心の分離(Separation of Concerns)」と呼び、機能をクラスから「引きはがして」まとめる単位となるのがアスペクトです。

 アスペクト指向は比較的新しい概念ですが、その基礎になっているのは、Common Lispのオブジェクト指向機能であるCLOS*に含まれている「メソッドコンビネーション」という技術です。実際、アスペクト指向の提唱者Gregor Kiczalesは、CLOSの設計者の1人でもあります。

型推論

 JavaやC++のように、変数や式に型のある言語*では、プログラムを解析することでプログラム自身に型の矛盾があるかどうかを検出できます。プログラム中の多くのエラーは型の矛盾によって検出できますから、コンパイルするだけで実際に実行しなくても網羅的にエラー(の一部)を検出できるのは大変うれしいことです。

 しかし、変数や関数などにいちいち型宣言を行うのはいろいろと面倒を伴います。そのこともあって、Javaのプログラムと型宣言のないRubyのプログラムを比較すると、Javaの方がずいぶん冗長に見えます。また、いちいち型を考えないといけないのは、プログラマーにとって少々負担です。

 「型推論」は、静的型のメリットはそのままに、型指定の手間を省く技術です。MLやHaskellなどの関数型言語では広く採用されている技術で、定数や定義済み関数の型などを手がかりに、変数や式の型をできる限りコンパイラが推定してくれます。ですから、プログラマーは型を指定する必要がほとんどありませんし、それでいて型の矛盾はコンパイル時に検出されます。

まとめ

 2回にわたって、近年メインストリームのプログラミング言語に取り込まれつつある「新技術」の幾つかについて概観してみました。現代のプログラミング言語は、生産性向上のための新しい技術を貪欲に取り込みつつあります。

 プログラミング言語は、IDEなどのツールと並んでプログラミング効率を左右する存在です。プログラミング言語の進化には、これからも注目していきたいと思います。

このページで出てきた専門用語

CLOS

Common Lisp Object Systemの略。当初のCommon Lispには含まれておらず、後から追加になったため独立した名前がついている。多重継承、マルチメソッド、メソッドコンビネーションなど、よく見かけるオブジェクト指向機能とは一線を画している。発音は、「くろす」でも「しーろす」でも何でも構わない、というのが公式見解らしい。

変数や式に型のある言語

このような言語は、「静的型」に分類される。Rubyのように変数や式に型を指定しない言語は「動的型」に分類される。


本記事は、オープンソースマガジン2006年10月号「プログラミング言語の進化を追え」を再構成したものです。


前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ