Linden Scripting Language
Linden Scripting Language(LSL)はリンデン・ラボが運営している仮想世界Second Lifeでその世界の住人が使用できるプログラミング言語である。 LSLを使用することによりSecond Life内のオブジェクトの挙動をコントロールすることが可能となる。LSLはC言語に近い文法構造を持ち、 電子メール、XML-RPC、そしてHTTPリクエスト送信によりSecond Life世界とインターネットの間で通信を行うことが出来る。
LSLの構造
LSLは「有限状態マシン(有限オートマトン)」という意味で「状態(State)-イベント駆動型スクリプト言語」である。スクリプトは変数、関数定義、そしてひとつまたは複数の状態から成り立つ。それぞれの状態にはその状態にある場合に起こったこと(イベント)にどう反応するかが記述される。システムはスクリプトにイベント(タイマー、移動、エージェントとのチャット、電子メール、他のオブジェクトとの衝突)を送信する。スクリプトは状態遷移をおこしたり、他のオブジェクトやエージェントとのコミュニケーションを行うことができる。オブジェクトにスクリプトが追加され次第そのスクリプトの実行は開始される。
スクリプトはオブジェクト(オブジェクト指向プログラミングの意味ではなくSecond Lifeのオブジェクト)に非常に密接に結び付けられる。Second Lifeのオブジェクトは椅子や壁、あるいは不可視な何か、といったものである。スクリプトはオブジェクトの中に配置され、(複数の)スクリプトが平行して実行されていく。
組み込み関数は300以上あり、ユーザーは必要に応じてユーザー定義関数を定義することも可能である。非常に強く型付けされたプログラミング言語であり、バイトコードの実行形式にコンパイルされリンデン・ラボのサーバ上の仮想機械で実行される。
LSLの基本データ型には整数型、浮動小数点実数型、文字列、キー(UUID)、ベクトル(3次元位置、およびRGB色表現)、そしてローテーション(クォータニオン)が存在する。そして配列型や構造体に相当するものとして基本データ型を要素とするリスト型を利用することができる。ファイルやデータベースといった永続的なデータ記憶機構は用意されていない。一方ではたとえ所有者がログインしていない状態でも常に実行を継続し、オブジェクトが(持ち物リストに)保存されて後に仮想世界に配置しなおされてもスクリプトの状態は保持されている。さらにHTTPリクエスト通信を利用することで外部に状態を保存することも可能である。
いくつかの組み込み関数には(物理オブジェクトでない)オブジェクトを移動させるときの0.2秒から電子メールを送信する際の20秒に渡る「遅延」が定義されている。これはスクリプト開発者がシステム資源に過大な負担をかけないためである。単体のLSLスクリプトで実際に使用できるメモリ領域は16キロバイトに制限されている。
基本となるLSLスクリプト
以下は定型で用意される基本となるスクリプト(一種のHello world)である。
default { state_entry() { llSay(0, "Hello, Avatar!"); } touch(integer total_number) { llSay(0, "Touched."); } }