Linden Scripting Language (LSL)
Linden Scripting Language(LSL)は、
リンデン・ラボが運営する仮想空間
Second Lifeで利用される
プログラミング言語です。この言語を使用することで、ユーザーは
Second Life内のオブジェクトの挙動を制御したり、外部
インターネットとのデータ通信も行うことができます。LSLは
C言語の文法に似ており、厳格な型付けを持つため、安全にプログラミングを行える点が特徴です。また、LSLは状態(State)とイベントに基づくスクリプト言語であり、有限状態マシンのモデルを採用しています。
LSLの構成
LSLのスクリプトは、変数、関数、状態(ステート)で構成されており、各ステートにはイベントに基づく反応が記述されます。基本データ型としては、
整数型、
浮動小数点数型、
文字列、キー(UUID)、
ベクトル、ローテーションのほか、リスト型も存在します。公式の組み込み関数は2015年11月時点で430以上あり、ユーザーは独自の関数を作成することも可能です。
実行と環境
Second Life内のオブジェクトにスクリプトを配置すると、そのオブジェクトが存在する限りスクリプトは実行され続けます。オーナーがログインしていない間でも、オブジェクトが仮想空間にある限り、スクリプトは作動します。オブジェクトを他の場所に移動しても、スクリプトの状態は保持されるため、柔軟に再利用が可能です。また、スクリプトは照明や位置変更などのイベントに応じて動作し、他のオブジェクトやアバターとのインタラクションも実現します。
仮想空間の中では、多数のスクリプトが同時に実行されるため、システム負荷を軽減するために、いくつかの組み込み関数では処理に遅延が設けられています。これにより、負荷の高い処理が連続して実行されることを制限しています。オブジェクトは複数のスクリプトを内包でき、それらを同時に実行することができますが、一つのスクリプトに割り当てられるメモリは64キロバイト未満です。また、スクリプトは
バイトコードに変換され、
リンデン・ラボのサーバー上で実行されるMono仮想マシンで動作します。
基本のLSLスクリプト
以下に示すのは、LSLで動作する基本的なスクリプトの例です。このスクリプトは、オブジェクトが触れられたときや、状態が変わった時にメッセージを表示します。
```lsl
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}
touch_start(integer total_number)
{
llSay(0, "Touched.");
}
}
```
非同期処理の例
LSLでは、非同期処理を通じてキーボード入力やファイルの読み取りが行われます。以下は、指定されたテキストファイルの内容を表示するサンプルスクリプトです。
```lsl
integer lsn;
string filename;
integer line;
key read;
default
{
touch_start(integer total_number)
{
llOwnerSay("Enter note name:");
lsn = llListen(0,"",llGetOwner(),"");
}
listen(integer channel, string name, key id, string message)
{
if(channel==0 && id==llGetOwner()){
llListenRemove(lsn);
filename = message;
state read_file;
}
}
}
state read_file
{
state_entry()
{
if(llGetInventoryKey(filename)==NULL_KEY){
llOwnerSay("ERROR: note is missing.");
state default;
}
line = 0;
read = llGetNotecardLine(filename,line);
}
dataserver(key requested, string data)
{
if(requested==read){
if(data==EOF){
filename = "";
state default;
}
llOwnerSay(data);
line++;
read = llGetNotecardLine(filename,line);
}
}
}
```
まとめ
LSLは
Second Life内でのオブジェクト制御や
インターネットとの接続を可能にする強力な
プログラミング言語です。多様なデータ型やイベント駆動型の仕組みにより、クリエイターは独自のインタラクティブな体験を提供できます。