-
Notifications
You must be signed in to change notification settings - Fork 1
Introduction
Lua はコルーチンやメタテーブルのような少し変わった言語構造を持つプログラミング言語である。これらの機能のおかげで非常に柔軟なプログラミングが可能である。にもかかわらず、フットプリントが小さく、動作も速いとされている。
また、Lua は C と C++ の言語の共通部分だけを使って書かれているので、極めてポータブルである。ある種のアーキテクチャの CPU 上では動かないとか、特定の C コンパイラでは正しくコンパイルできないとか、そのような問題とはほとんど無縁である。
ということは、Lua インタプリタを組み込むのにほとんど余計なコストがかからないことを意味する。とりあえず組み込んでみて、大して役に立たなければ捨てても良い。そのくらい気軽に使うことが出来るのだ。
この小さな本では、アプリケーション組み込みのプログラミングに狙いを定めて Lua インタプリタの使い方を紹介する。同時に、組み込みプログラミングの時に特に役に立つような Lua のコーディングのテクニックも紹介したい。
Lua はテーブルというただ一種類の組み込みデータ型しか持たない。ホスト言語である C や C++ 上で定義したデータ型は、Lua からみると単なる不透明なデータにしか見えず、その中身にアクセスすることは出来ない。しかし、メタテーブルという機能を使うと、Lua に独自のデータ型を定義するようなことが出来る。
また、Lua の関数を評価するときの環境を自由に設定することが出来る。これを使うことで、Lua スクリプトをサンドボックスの中で安全に実行することが出来る。環境をうまく設定することで、ソフトウェアのエンドユーザに独自にスクリプティングの機能を提供しても安全性が保証できる。またそれだけでなく、実行環境の詳細を一部のスクリプトから隠すことが出来るので、デザイナーやアーティストなど、プログラマでない人にスクリプティングの一部を任せる場合にも威力を発揮する。
Wikipedia の Lua のページによると、「Crysis」や「World of Warcraft」といった人気のゲームで採用されていることが分かる。これらのゲームでは、ゲームエンジンやゲームの主要なルールを C++ で記述し、その一方でゲームデザイナー(テクニカルディレクター)が様々なゲームの要素を試行錯誤しながら面白い遊びを実現するために、組み込み言語として Lua が採用されている。
http://ja.wikipedia.org/wiki/Lua
また、ゲームだけでなく、「Adobe Photoshop Lightroom」というデジタル写真の現像ソフトでも採用されている。これは Lua でプラグインを作成できるようになっている。このように Lua を用いてソフトウェアを拡張できるようにしておくと、核となるプログラムと拡張部分を分離して管理することが出来て便利である。
さらにヤマハのルータや、高機能ドキュメントデータベースの「Redis」などでも Lua によるスクリプティングが可能である。これらのスクリプトは単なる設定ファイルとしてだけでなく、ソフトウェアの低レベルの機能を使って、高い効率で動作する新しい機能を、エンドユーザ自身で実装できるようになっている。
なお、筆者は 2007 から 2011 年まで、米国ハワイ州のソフトウェア会社で「Blue Mars」というヴァーチャルワールドの開発に携わっていた。ここで、CryENGINE 2 というゲームエンジン(上記の Crysis のエンジンでもある)に搭載された Lua スクリプティング機能を駆使(酷使?)して、大規模多人数オンラインゲームのシステムを実現した。その際、サーバやユーザインターフェイスの開発も担当したが、Lua の言語の柔軟性のおかげでシステム全体がシームレスにつながるところをみることが出来た。
Lua 言語仕様と標準ライブラリの完全なリファレンスは、Lua の公式ウェブサイトで参照できる。言語仕様が小さいので、すべての内容が 1 つのウェブページにコンパクトにまとまっている。 http://www.lua.org/manual/5.2/
この言語リファレンスの前半は、言語の概要やコンセプトの解説で、まずはここをざっと眺めてみると良い。
また、少し内容は古いが、Lua の実装について作者本人が短く分かりやすくまとめた論文がある。Lua を効果的に使うヒントが多く得られる。 The Implementation of Lua 5.0 http://www.lua.org/doc/jucs05.pdf
『言語設計者たちが考えること』(Federico Biancuzzi、Shane Warden 編、オライリー・ジャパン、2010 年)にも Lua の作者へのインタビューが掲載されている。Lua がなぜ今のような形になっているのか、彼らの考えを窺い知ることが出来る。