<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=March+Korda</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=March+Korda"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/March_Korda"/>
	<updated>2026-07-03T21:08:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Integer/ja&amp;diff=44933</id>
		<title>Integer/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Integer/ja&amp;diff=44933"/>
		<updated>2007-12-16T15:15:50Z</updated>

		<summary type="html">&lt;p&gt;March Korda: fix typo.(小数点をが-&amp;gt;小数点が)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header/ja}}&lt;br /&gt;
[[Category: LSL Types/ja]]&lt;br /&gt;
&lt;br /&gt;
=Integers=&lt;br /&gt;
integerデータ型は−2,147,483,648 〜 +2,147,483,647 (16進数で0x00000000 〜 0xFFFFFFFF)の範囲の符号付きの32ビットの値. integer型は整数の数値. 小数点が必要な場合は, [[float/ja|float]]を参照.&lt;br /&gt;
&lt;br /&gt;
DEBUG_CHANNELはinteger型の最大値の定数として使用することができる.&lt;br /&gt;
&lt;br /&gt;
==例==&lt;br /&gt;
次のものはすべてinteger型として扱うことができる:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
integer firstInt = 5512623;&lt;br /&gt;
integer secondInt = ACTIVE;&lt;br /&gt;
integer thridInt = 0x61EC1A;&lt;br /&gt;
integer fourthInt = -160693;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
次のものはinteger型では扱えない. これらの数値を扱うためには[[float/ja|float]]を参照:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
integer firstInt = 125.2; //integer型は小数点を含むことはできない.&lt;br /&gt;
integer secondInt = 10000000000; //integer型は2,147,483,647より大きな数値を扱うことはできない.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44546</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44546"/>
		<updated>2007-12-12T07:38:21Z</updated>

		<summary type="html">&lt;p&gt;March Korda: translated into Japanese.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。&lt;br /&gt;
&lt;br /&gt;
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
どのくらいのスクリプトが大きすぎるスクリプトなのかは、驚くほど変化することがあります。例えば、the 2007-08 Second Life クライアントでは30倍程度に変化しました。具体的には、Windowsクライアントは22個の22を受け付け、23個のelse-ifを拒絶しましたが、Mac OS Xは692個のelse-ifを受け付け、693個のelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
OSによって変化するコンパイラの制限は、コピー制限の手段のように働きます。制限のゆるいコンパイラでコンパイルされたスクリプトを誰でも実行できます。しかし、制限の多いコンパイラしか持たないユーザは、そのソースを変更してもセーブできません。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
もちろんあなたはスクリプトやスクリプト内の語をコンパイラが受け入れられるように厳密に記述しなければなりません。&lt;br /&gt;
&lt;br /&gt;
そして、スクリプトをほどよく小さく書かなければなりません。あまりに大きなスクリプトを書いた場合、コンパイラは&amp;quot;out of memory(メモリあふれ)&amp;quot; や &amp;quot;byte code assembly failed(バイトコード生成に失敗)&amp;quot;のような丁寧で明確なエラーではなく、 &amp;quot;syntax&amp;quot; error(構文エラー)だと報告するかもしれません。&lt;br /&gt;
&lt;br /&gt;
例えば、2007-08年のWindows版のSecond Lifeクライアントは多くのelse-ifを並べるとSyntax error(構文エラー)を報告します。厳密な制限数は驚くほど変化します。例えば、2007-08年のWindows版のSecond Lifeクライアントは、あるときは22個以上並べたelse-ifを受け入れましたが、あるときはスクリプトの他の詳細な記述によって19個以下に並べたelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
1つのコンパイラでLSLを学ぶプログラマは、コンパイラの制限は合理的(reasonable)なものだと感じるかもしれません。例えば、Mac OS Xでは500個までのelse-ifを並べることができます。しかし別なコンパイラを使うプログラマはそうではなく、大きく異なる制限値だけが合理的だと感じるかもしれません。例えば、Windowsではelse-ifを並べられるのはせいぜい1ダースだと感じるかもしれません。&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44545</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44545"/>
		<updated>2007-12-12T07:32:15Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。 such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。&lt;br /&gt;
&lt;br /&gt;
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
どのくらいのスクリプトが大きすぎるスクリプトなのかは、驚くほど変化することがあります。例えば、the 2007-08 Second Life クライアントは30倍程度に変化しました。具体的には、Windowsクライアントは22個の22を受け付け、23個のelse-ifを拒絶しましたが、Mac OS Xは692 else-if個のを受け付け、693個のelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
OSによって変化するコンパイラの制限が、コピー制限の手段のように働きます。制限のゆるいコンパイラでコンパイルされたスクリプトを、誰でも実行できます。しかし、制限の多いコンパイラしか持たないユーザは、ソースを変更してもセーブできません。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
もちろんあなたはスクリプトやスクリプト内の語をコンパイラが受け入れられるように厳密に記述しなければなりません。&lt;br /&gt;
&lt;br /&gt;
そして、スクリプトをほどよく小さく書かなければなりません。あまりに大きなスクリプトを書いた場合、コンパイラは&amp;quot;out of memory(メモリあふれ)&amp;quot; や &amp;quot;byte code assembly failed(バイトコード生成に失敗)&amp;quot;のような丁寧で明確なエラーではなく、 &amp;quot;syntax&amp;quot; error(構文エラー)だと言うかもしれません。&lt;br /&gt;
&lt;br /&gt;
例えば、2007-08年のWindows版のSecond Lifeクライアントは多くのelse-ifを並べるとSyntax error(構文エラー)を報告します。厳密な制限数は驚くほど変化します。例えば、2007-08年のWindows版のSecond Lifeクライアントは、あるときは22個以上並べたelse-ifを受け入れましたが、あるときはスクリプトの他の詳細な記述によって19個以下に並べたelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
1つのコンパイラでLSLを学ぶプログラマは、&lt;br /&gt;
コンパイラの制限は合理的(reasonable)なものだと感じるかもしれません。例えば、Mac OS Xでは500個までのelse-ifを並べることができます。しかし別なコンパイラを使うプログラマはそうではなく、大きく異なる制限値だけが合理的だと感じるかもしれません。例えば、Windowsではelse-ifを並べられるのはせいぜい1ダースだと感じるかもしれません。&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44544</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44544"/>
		<updated>2007-12-12T07:20:28Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。 such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。&lt;br /&gt;
&lt;br /&gt;
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
どのくらいのスクリプトが大きすぎるスクリプトなのかは、驚くほど変化することがあります。例えば、the 2007-08 Second Life クライアントは30倍程度に変化しました。具体的には、Windowsクライアントは22個の22を受け付け、23個のelse-ifを拒絶しましたが、Mac OS Xは692 else-if個のを受け付け、693個のelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
OSによって変化するコンパイラの制限が、コピー制限の手段のように働きます。制限のゆるいコンパイラでコンパイルされたスクリプトを、誰でも実行できます。しかし、制限の多いコンパイラしか持たないユーザは、ソースを変更してもセーブできません。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
もちろんあなたはスクリプトやスクリプト内の語をコンパイラが受け入れられるように厳密に記述しなければなりません。&lt;br /&gt;
&lt;br /&gt;
そして、スクリプトをほどよく小さく書かなければなりません。あまりに大きなスクリプトを書いた場合、コンパイラは&amp;quot;out of memory(メモリあふれ)&amp;quot; や &amp;quot;byte code assembly failed(バイトコード生成に失敗)&amp;quot;のような丁寧で明確なエラーではなく、 &amp;quot;syntax&amp;quot; error(構文エラー)だと言うかもしれません。&lt;br /&gt;
&lt;br /&gt;
例えば、2007-08年のWindows版のSecond Lifeクライアントは多くのelse-ifを並べるとSyntax error(構文エラー)を報告します。厳密な制限数は驚くほど変化します。例えば、2007-08年のWindows版のSecond Lifeクライアントは、あるときは22個以上並べたelse-ifを受け入れましたが、あるときはスクリプトの他の詳細な記述によって19個以下に並べたelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44543</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44543"/>
		<updated>2007-12-12T07:10:29Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。 such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。&lt;br /&gt;
&lt;br /&gt;
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
どのくらいのスクリプトが大きすぎるスクリプトなのかは、驚くほど変化することがあります。例えば、the 2007-08 Second Life クライアントは30倍程度に変化しました。具体的には、Windowsクライアントは22個の22を受け付け、23個のelse-ifを拒絶しましたが、Mac OS Xは692 else-if個のを受け付け、693個のelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
OSによって変化するコンパイラの制限が、コピー制限の手段のように働きます。制限のゆるいコンパイラでコンパイルされたスクリプトを、誰でも実行できます。しかし、制限の多いコンパイラしか持たないユーザは、ソースを変更してもセーブできません。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
もちろんあなたはスクリプトやスクリプト内の語をコンパイラが受け入れられるように厳密に記述しなければなりません。&lt;br /&gt;
&lt;br /&gt;
そして、スクリプトをほどよく小さく書かなければなりません。あまりに大きなスクリプトを書いた場合、コンパイラは&amp;quot;out of memory(メモリあふれ)&amp;quot; や &amp;quot;byte code assembly failed(バイトコード生成に失敗)&amp;quot;のような丁寧で明確なエラーではなく、 &amp;quot;syntax&amp;quot; error(構文エラー)だと言うかもしれません。&lt;br /&gt;
&lt;br /&gt;
For example, the 2007-08 Windows Second Life client complained of a Syntax error if you cascaded too many else-if&#039;s. The exact limits enforced can vary astonishingly. For example, the 2007-08 Windows Second Life client sometimes accepted as many as 22 cascaded else-if&#039;s, but also sometimes rejected as few as 19 cascaded else-if&#039;s, depending on other details of the script.&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44542</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44542"/>
		<updated>2007-12-12T06:58:36Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。 such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。&lt;br /&gt;
&lt;br /&gt;
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
どのくらいのスクリプトが大きすぎるスクリプトなのかは、驚くほど変化することがあります。例えば、the 2007-08 Second Life クライアントは30倍程度に変化しました。具体的には、Windowsクライアントは22個の22を受け付け、23個のelse-ifを拒絶しましたが、Mac OS Xは692 else-if個のを受け付け、693個のelse-ifを拒絶しました。&lt;br /&gt;
&lt;br /&gt;
OSによって変化するコンパイラの制限が、コピー制限の手段のように働きます。制限のゆるいコンパイラでコンパイルされたスクリプトを、誰でも実行できます。しかし、制限の多いコンパイラしか持たないユーザは、ソースを変更してもセーブできません。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
You must punctuate the script and spell the words of the script as will please the compiler, of course.&lt;br /&gt;
&lt;br /&gt;
Also you must make each script reasonably small. The compiler may astonishingly complain of a &amp;quot;syntax&amp;quot; error rather than politely complaining more specifically of an &amp;quot;out of memory&amp;quot; &amp;quot;byte code assembly failed&amp;quot; error, when you make a script unreasonably large.&lt;br /&gt;
&lt;br /&gt;
For example, the 2007-08 Windows Second Life client complained of a Syntax error if you cascaded too many else-if&#039;s. The exact limits enforced can vary astonishingly. For example, the 2007-08 Windows Second Life client sometimes accepted as many as 22 cascaded else-if&#039;s, but also sometimes rejected as few as 19 cascaded else-if&#039;s, depending on other details of the script.&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44541</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44541"/>
		<updated>2007-12-12T06:37:27Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。 such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
スクリプトは、ほどよく小さく(reasonably small)書かなければなりません。&lt;br /&gt;
&lt;br /&gt;
例えば、あまりにも多くのelse-ifを並べた場合、コンパイラはスクリプトが大きすぎると報告します。&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How much script is too much script can vary astonishingly. For example, the 2007-08 Second Life clients varied as much as 30X, from one to the next. Specifically, the Windows client accepted 22 else-if&#039;s and refused 23 else-if&#039;s, while Mac OS X was accepting 692 else-if&#039;s and refusing 693 else-if&#039;s. &lt;br /&gt;
&lt;br /&gt;
Compilation limits that vary by operating system in effect work as a copy-restriction mechanism. Any resident can run the script compiled by the less limited compiler, but residents who have only the more limited compiler cannot save changes to the source.&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
You must punctuate the script and spell the words of the script as will please the compiler, of course.&lt;br /&gt;
&lt;br /&gt;
Also you must make each script reasonably small. The compiler may astonishingly complain of a &amp;quot;syntax&amp;quot; error rather than politely complaining more specifically of an &amp;quot;out of memory&amp;quot; &amp;quot;byte code assembly failed&amp;quot; error, when you make a script unreasonably large.&lt;br /&gt;
&lt;br /&gt;
For example, the 2007-08 Windows Second Life client complained of a Syntax error if you cascaded too many else-if&#039;s. The exact limits enforced can vary astonishingly. For example, the 2007-08 Windows Second Life client sometimes accepted as many as 22 cascaded else-if&#039;s, but also sometimes rejected as few as 19 cascaded else-if&#039;s, depending on other details of the script.&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44540</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44540"/>
		<updated>2007-12-12T06:30:26Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。 such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI はあなたが完璧だと思ったいくつかのコードを拒絶し、いくつかの説明と共にERRORを出力するかもしれません。&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
vector型やrotation型に値を指定するには、 .x .y .z .s という名の要素を使わなければなりません。一度にlistで指定することはできません。例えば:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
You must make each script reasonably small.&lt;br /&gt;
&lt;br /&gt;
For example, the compiler says you typed too much script if you cascade too many else-if&#039;s:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How much script is too much script can vary astonishingly. For example, the 2007-08 Second Life clients varied as much as 30X, from one to the next. Specifically, the Windows client accepted 22 else-if&#039;s and refused 23 else-if&#039;s, while Mac OS X was accepting 692 else-if&#039;s and refusing 693 else-if&#039;s. &lt;br /&gt;
&lt;br /&gt;
Compilation limits that vary by operating system in effect work as a copy-restriction mechanism. Any resident can run the script compiled by the less limited compiler, but residents who have only the more limited compiler cannot save changes to the source.&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
You must punctuate the script and spell the words of the script as will please the compiler, of course.&lt;br /&gt;
&lt;br /&gt;
Also you must make each script reasonably small. The compiler may astonishingly complain of a &amp;quot;syntax&amp;quot; error rather than politely complaining more specifically of an &amp;quot;out of memory&amp;quot; &amp;quot;byte code assembly failed&amp;quot; error, when you make a script unreasonably large.&lt;br /&gt;
&lt;br /&gt;
For example, the 2007-08 Windows Second Life client complained of a Syntax error if you cascaded too many else-if&#039;s. The exact limits enforced can vary astonishingly. For example, the 2007-08 Windows Second Life client sometimes accepted as many as 22 cascaded else-if&#039;s, but also sometimes rejected as few as 19 cascaded else-if&#039;s, depending on other details of the script.&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44539</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44539"/>
		<updated>2007-12-12T06:17:35Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
スクリプトは実行中に停止し、以下のようなメッセージと共に&amp;quot;Script run-time error&amp;quot;をあなたに伝えるかもしれません。 such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
無意味な事をしないでください。例えば、結果を返さないルーチンでリスト型を返さないでください。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI may reject some code that you feel is perfectly clear, printing ERROR at you and then explaining with some further complaint.&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
You must name the .x .y .z .s components of a vector or rotation that you&#039;re assigning, you can&#039;t assign them all at once from a list, for instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
You must make each script reasonably small.&lt;br /&gt;
&lt;br /&gt;
For example, the compiler says you typed too much script if you cascade too many else-if&#039;s:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How much script is too much script can vary astonishingly. For example, the 2007-08 Second Life clients varied as much as 30X, from one to the next. Specifically, the Windows client accepted 22 else-if&#039;s and refused 23 else-if&#039;s, while Mac OS X was accepting 692 else-if&#039;s and refusing 693 else-if&#039;s. &lt;br /&gt;
&lt;br /&gt;
Compilation limits that vary by operating system in effect work as a copy-restriction mechanism. Any resident can run the script compiled by the less limited compiler, but residents who have only the more limited compiler cannot save changes to the source.&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
You must punctuate the script and spell the words of the script as will please the compiler, of course.&lt;br /&gt;
&lt;br /&gt;
Also you must make each script reasonably small. The compiler may astonishingly complain of a &amp;quot;syntax&amp;quot; error rather than politely complaining more specifically of an &amp;quot;out of memory&amp;quot; &amp;quot;byte code assembly failed&amp;quot; error, when you make a script unreasonably large.&lt;br /&gt;
&lt;br /&gt;
For example, the 2007-08 Windows Second Life client complained of a Syntax error if you cascaded too many else-if&#039;s. The exact limits enforced can vary astonishingly. For example, the 2007-08 Windows Second Life client sometimes accepted as many as 22 cascaded else-if&#039;s, but also sometimes rejected as few as 19 cascaded else-if&#039;s, depending on other details of the script.&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44538</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44538"/>
		<updated>2007-12-12T06:05:02Z</updated>

		<summary type="html">&lt;p&gt;March Korda: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
A script may stop running, and chat at you the complaint &amp;quot;Script run-time error&amp;quot;, followed by another complaint such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
Don&#039;t speak nonsense. For example, don&#039;t return a list of one entry that is the result of a routine that returns no result.&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
リスト内にリストを入れることはできません。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float型の数値を0で割ろうとした、integer型の数値を0で割ろうとした、等。&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
スタック領域がバイトコード領域やヒープ領域に衝突した。&lt;br /&gt;
&lt;br /&gt;
それぞれのスクリプトは、16キロバイトに分割されたメモリ内で実行されます。そのメモリはバイトコード領域、スタック領域、ヒープ領域に分割されています。&lt;br /&gt;
&lt;br /&gt;
あなたが長すぎるスクリプトを書いてコンパイルすると、大きすぎるバイトコードが生成され、衝突が発生します。 スクリプトがコンパイルできてセーブに成功したとしても、スクリプトを含んだオブジェクトを rez しようとすると、スクリプトはすぐに、あるいは実行中にクラッシュします。&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
ランタイム･エラーを経験するために、以下の例のコンパイルして実行してください。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI may reject some code that you feel is perfectly clear, printing ERROR at you and then explaining with some further complaint.&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
You must name the .x .y .z .s components of a vector or rotation that you&#039;re assigning, you can&#039;t assign them all at once from a list, for instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
You must make each script reasonably small.&lt;br /&gt;
&lt;br /&gt;
For example, the compiler says you typed too much script if you cascade too many else-if&#039;s:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How much script is too much script can vary astonishingly. For example, the 2007-08 Second Life clients varied as much as 30X, from one to the next. Specifically, the Windows client accepted 22 else-if&#039;s and refused 23 else-if&#039;s, while Mac OS X was accepting 692 else-if&#039;s and refusing 693 else-if&#039;s. &lt;br /&gt;
&lt;br /&gt;
Compilation limits that vary by operating system in effect work as a copy-restriction mechanism. Any resident can run the script compiled by the less limited compiler, but residents who have only the more limited compiler cannot save changes to the source.&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
You must punctuate the script and spell the words of the script as will please the compiler, of course.&lt;br /&gt;
&lt;br /&gt;
Also you must make each script reasonably small. The compiler may astonishingly complain of a &amp;quot;syntax&amp;quot; error rather than politely complaining more specifically of an &amp;quot;out of memory&amp;quot; &amp;quot;byte code assembly failed&amp;quot; error, when you make a script unreasonably large.&lt;br /&gt;
&lt;br /&gt;
For example, the 2007-08 Windows Second Life client complained of a Syntax error if you cascaded too many else-if&#039;s. The exact limits enforced can vary astonishingly. For example, the 2007-08 Windows Second Life client sometimes accepted as many as 22 cascaded else-if&#039;s, but also sometimes rejected as few as 19 cascaded else-if&#039;s, depending on other details of the script.&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44537</id>
		<title>LSL エラー</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_%E3%82%A8%E3%83%A9%E3%83%BC&amp;diff=44537"/>
		<updated>2007-12-12T05:48:07Z</updated>

		<summary type="html">&lt;p&gt;March Korda: copy from original source.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Multi-lang}}&lt;br /&gt;
{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
==Run-time error messages==&lt;br /&gt;
&lt;br /&gt;
A script may stop running, and chat at you the complaint &amp;quot;Script run-time error&amp;quot;, followed by another complaint such as:&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Heap Error===&lt;br /&gt;
&lt;br /&gt;
Don&#039;t speak nonsense. For example, don&#039;t return a list of one entry that is the result of a routine that returns no result.&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Lists may not contain lists===&lt;br /&gt;
&lt;br /&gt;
Don&#039;t try adding a list into a list.&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Math Error===&lt;br /&gt;
&lt;br /&gt;
Float divided by zero, integer divided by zero, etc.&lt;br /&gt;
&lt;br /&gt;
===Script run-time error: Stack-Heap Collision===&lt;br /&gt;
&lt;br /&gt;
The Stack has collided with the Bytecode or the Heap.&lt;br /&gt;
&lt;br /&gt;
Each script runs inside 16 KiB of memory divided out among Bytecode, Stack, and Heap.&lt;br /&gt;
&lt;br /&gt;
You can cause collision by compiling too much script, which produces too much Bytecode. The script compiles and saves successfully, but when you rez an object containing the script, the script crashes, immediately or while running.&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]].&lt;br /&gt;
&lt;br /&gt;
===Run-time error demo scripts===&lt;br /&gt;
&lt;br /&gt;
Compile and run examples like these to experience the script run-time errors.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llOwnerSay((string) [llOwnerSay(&amp;quot;bye&amp;quot;)]); // Script run-time error: Heap Error&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list once = [];&lt;br /&gt;
        list twice = [once, once]; // Script run-time error: Lists may not contain lists&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        float one = 1.0;&lt;br /&gt;
        float zero = 0.0;&lt;br /&gt;
        float quotient = one / zero; // Script run-time error: Math Error&lt;br /&gt;
        llOwnerSay((string) quotient);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        list entries = [0];&lt;br /&gt;
        while (TRUE)&lt;br /&gt;
        {&lt;br /&gt;
            entries += entries; // Script run-time error: Stack-Heap Collision&lt;br /&gt;
            llOwnerSay((string) llGetListLength(entries));&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Compile-time error messages==&lt;br /&gt;
&lt;br /&gt;
The SL GUI may reject some code that you feel is perfectly clear, printing ERROR at you and then explaining with some further complaint.&lt;br /&gt;
&lt;br /&gt;
===ERROR : Type mismatch===&lt;br /&gt;
&lt;br /&gt;
You must name the .x .y .z .s components of a vector or rotation that you&#039;re assigning, you can&#039;t assign them all at once from a list, for instance:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        vector vec = (vector) [1, 2, 3]; // ERROR : Type mismatch&lt;br /&gt;
        llOwnerSay((string) vec);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===ERROR : Byte code assembly failed -- out of memory===&lt;br /&gt;
&lt;br /&gt;
You must make each script reasonably small.&lt;br /&gt;
&lt;br /&gt;
For example, the compiler says you typed too much script if you cascade too many else-if&#039;s:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
demoElseIfCompileError(integer count)&lt;br /&gt;
{&lt;br /&gt;
    if (count == 0)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 1)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    else if (count == 2)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
    ...&lt;br /&gt;
    ... // ERROR : Byte code assembly failed -- out of memory&lt;br /&gt;
    ... // or ERROR : Syntax error&lt;br /&gt;
    ...&lt;br /&gt;
    else if (count == ...)&lt;br /&gt;
    {&lt;br /&gt;
        ;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
How much script is too much script can vary astonishingly. For example, the 2007-08 Second Life clients varied as much as 30X, from one to the next. Specifically, the Windows client accepted 22 else-if&#039;s and refused 23 else-if&#039;s, while Mac OS X was accepting 692 else-if&#039;s and refusing 693 else-if&#039;s. &lt;br /&gt;
&lt;br /&gt;
Compilation limits that vary by operating system in effect work as a copy-restriction mechanism. Any resident can run the script compiled by the less limited compiler, but residents who have only the more limited compiler cannot save changes to the source.&lt;br /&gt;
&lt;br /&gt;
See [[llGetFreeMemory]], [[llMessageLinked]].&lt;br /&gt;
&lt;br /&gt;
===ERROR : Syntax error===&lt;br /&gt;
&lt;br /&gt;
You must punctuate the script and spell the words of the script as will please the compiler, of course.&lt;br /&gt;
&lt;br /&gt;
Also you must make each script reasonably small. The compiler may astonishingly complain of a &amp;quot;syntax&amp;quot; error rather than politely complaining more specifically of an &amp;quot;out of memory&amp;quot; &amp;quot;byte code assembly failed&amp;quot; error, when you make a script unreasonably large.&lt;br /&gt;
&lt;br /&gt;
For example, the 2007-08 Windows Second Life client complained of a Syntax error if you cascaded too many else-if&#039;s. The exact limits enforced can vary astonishingly. For example, the 2007-08 Windows Second Life client sometimes accepted as many as 22 cascaded else-if&#039;s, but also sometimes rejected as few as 19 cascaded else-if&#039;s, depending on other details of the script.&lt;br /&gt;
&lt;br /&gt;
Programmers who learned LSL on one compiler may feel that that compiler&#039;s limits are reasonable, &#039;&#039;e.g.&#039;&#039;, up to five hundred cascaded else-if&#039;s in Mac OS X, while programmers trained on another compiler may feel instead that only its significantly different limits are reasonable, &#039;&#039;e.g.&#039;&#039;, no more than a dozen cascaded else-if&#039;s in Windows.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Compiling_the_viewer_(MSVS2005)/ja&amp;diff=39961</id>
		<title>Compiling the viewer (MSVS2005)/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Compiling_the_viewer_(MSVS2005)/ja&amp;diff=39961"/>
		<updated>2007-11-10T07:38:42Z</updated>

		<summary type="html">&lt;p&gt;March Korda: just fixing a typo.(あくせす-&amp;gt;アクセス)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
{{CompileNav}}&lt;br /&gt;
&lt;br /&gt;
このページでは、Visual Studio 2005またはVisual C++ Express 2005を使ってMicrosoft Windows用にビューアをコンパイルする方法を説明します。リンデン自身はVS2003を使っているため、設定手順などはVS2003の方が簡単です。もしもVisual Studio 2003が使えるのであれば、[[Compiling the viewer (MSVS2003)|Microsoft WindowsでVisual Studio .NET 2003を使う場合]]に従う方が、VS2005でコンパイルするよりも問題が起きにくいでしょう。&lt;br /&gt;
&lt;br /&gt;
今のところ、32ビットのバイナリしかテストされていません。ビューアの64ビットWindows用の .EXEを作る試みもあるようですが。もしもやってみたならば、結果をこのwikiサイトに書いてください (成功しても、しなくても!)&lt;br /&gt;
&lt;br /&gt;
以下の説明は、ビューアのリリース1.16.0.5以降を前提にしています。リリース1.15以前のコンパイル手順が知りたい場合は、[http://wiki.secondlife.com/w/index.php?title=Compiling_the_viewer_%28MSVS2005%29&amp;amp;oldid=22294 このページの古い版]を参照してください。&lt;br /&gt;
&lt;br /&gt;
= 開発環境の準備 =&lt;br /&gt;
&lt;br /&gt;
== VS2005のインストールと設定 ==&lt;br /&gt;
&lt;br /&gt;
必要となるコンパイラとMicrosoftの開発ツールは次の通りです。&lt;br /&gt;
* Visual Studio 2005&#039;&#039;&#039;&#039;&#039;または&#039;&#039;&#039;&#039;&#039;[http://msdn.microsoft.com/vstudio/express/visualc/download/ Visual C++ 2005 Express]&amp;lt;small&amp;gt;(無料)&amp;lt;/small&amp;gt;が必要です。英語版でも日本語版でもかまいません。(更に、絶対必要というわけではありませんが、VS2005のSP1も入手してインストールした方がいいでしょう。)&lt;br /&gt;
* 加えて[http://www.microsoft.com/downloads/details.aspx?familyid=0BAF2B35-C656-4969-ACE8-E4C0C0716ADB&amp;amp;displaylang=en Microsoft Platform SDK]が必要です。&lt;br /&gt;
* DirectX 9.0 SDKの2003年夏以降のリリースが必要です。例えば[http://download.microsoft.com/download/5/1/f/51ff8357-0af3-418b-9d0b-e9a5cdc39759/dxsdk_dec2006.EXE DirectX 9.0 SDK (December 2006)]。&lt;br /&gt;
: &#039;&#039;&#039;注&#039;&#039;&#039;: Direct X 9.0 SDKを古いバージョンから更新する場合には、はじめに古いバージョンをアンインストールして完全に取り除きましょう。(コントロールパネルの「プログラムの追加と変更」でアンインストールできます。) 新しいバージョンを上書きインストールすると、後でいろいろと問題が起きます。&lt;br /&gt;
* インストールしたら、プロジェクトグローバルを次の手順に従って設定してください。&lt;br /&gt;
** Visual Studio 2005またはVisual C++ Express 2005を起動します。&lt;br /&gt;
** Tools &amp;gt; Options &amp;gt; Projects and Solutions &amp;gt; VC++ Directories を開きます。&lt;br /&gt;
** &#039;&#039;&#039;Include files&#039;&#039;&#039; ([[:Image:MSVS2005 Global Project Options Include Files.JPG|&#039;&#039;&#039;画面例&#039;&#039;&#039;]]) と&#039;&#039;&#039;Library files&#039;&#039;&#039; ([[:Image:MSVS2005 Global Project Options Library Files.JPG|&#039;&#039;&#039;画面例&#039;&#039;&#039;]]) の両方とも、先頭にPlatform SDKのパスがあり、その直後にDirectX SDKのパスがあり、Visual C++のパスは更にその後に書いてあるようにしてください。&lt;br /&gt;
** もしもDirectX SDKのパスが見当たらない場合は、&#039;&#039;&#039;Include files&#039;&#039;&#039;と&#039;&#039;&#039;Library files&#039;&#039;&#039;の両方にDirectX SDKのパスを追加することを忘れないようにしてください。&lt;br /&gt;
*: 注: 最近のDirectX SDKでは、libフォルダの下にx64とx86という名前の二つのサブフォルダがあります。&#039;&#039;&#039;Library files&#039;&#039;&#039;にDirectX SDKのパスを指定するときには、&#039;&#039;&#039;lib&#039;&#039;&#039;ではなく、&#039;&#039;&#039;lib/x86&#039;&#039;&#039;を指定してください。そうしないと、リンクエラーが発生します。&lt;br /&gt;
&lt;br /&gt;
== その他の開発ツールの入手 ==&lt;br /&gt;
&lt;br /&gt;
他に、オープンソースの開発ツールがいくつか必要になります。&lt;br /&gt;
* [http://www.cygwin.com/ Cygwin]&lt;br /&gt;
** cygwinのsetupユーティリティを使ってインストールしますが、このときに&#039;&#039;&#039;patchutils&#039;&#039;&#039;、&#039;&#039;&#039;flex&#039;&#039;&#039;、&#039;&#039;&#039;bison&#039;&#039;&#039;の三つをインストールするように指定してください。これはすべて&#039;&#039;&#039;devel&#039;&#039;&#039;の下にありますが、デフォルトではインストールされません。&lt;br /&gt;
** ビューアのプロジェクトファイルの中には、cygwinのインストールディレクトリとして&#039;&#039;&#039;C:\cygwin&#039;&#039;&#039;が固定的に書き込まれている部分があります。そこで、cygwinは、デフォルト通りC:\cygwinにインストールすることを勧めます。もしも別のディレクトリにインストールすると、すべての参照箇所を探して書き直さなければならなくなります。&lt;br /&gt;
* [http://www.activestate.com/Products/ActivePython/?mp=1 ActivePythonの2.3x以降] (最新版はVersion 2.5.1.1のようです。)&lt;br /&gt;
** 古いバージョンのビューアでは、Pythonは必要不可欠ではありませんでした。しかし、1.18以降では、原則としてPythonが必要になりました。しかし、Pythonをインストールしたくないなら、インストールしないで済ませることもできます。インストールしたくなければ、[http://jira.secondlife.com/browse/VWR-1267 VWR-1267]を参照してください。&lt;br /&gt;
* [http://www.activestate.com/Products/ActivePerl/?mp=1 ActivePerl]&lt;br /&gt;
** 以前の説明では、ActivePerlが必要と書かれていました。しかし実際は、ビューアのコンパイル自体には、Perlは必要ありません。Perlは、外部ライブラリをコンパイルする場合にだけ必要になります。(普通は、外部ライブラリを自分でコンパイルする必要はありませんから、ActivePerlのインストールも不要です。)&lt;br /&gt;
&lt;br /&gt;
= ソースをダウンロードする =&lt;br /&gt;
&lt;br /&gt;
ビューアのソースファイルは、[[source downloads|ソースのダウンロード]]のページからダウンロードできます。[[Version control repository|バージョン管理レポジトリ]]を使うこともできます。&lt;br /&gt;
&lt;br /&gt;
最低必要なのは、ソースのパッケージとアートワークのパッケージですが、最初は、ライブラリアーカイブも入手した方がいいでしょう。ライブラリは他のサイトからバイナリをダウンロードしたり、ソースを入手して自分でコンパイルしたりできます。しかし、それには何時間もかかるので、リンデンがコンパイルしたライブラリのパッケージを一緒にダウンロードするのが最も簡単です。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;警告:&#039;&#039;&#039;&lt;br /&gt;
* SLのソースを保存するディレクトリのパスの途中に空白が含まれていると、message_template.msgをコピーするバッチファイルが誤動作します。つまり、例えば、&amp;quot;C:\Projects\Dir with space in name\Linden&amp;quot; のようなディレクトリにソース一式をzipファイルから解凍したり、チェックアウトしたりすると、うまくいきません。&lt;br /&gt;
* パスにASCII以外の文字 (各国語文字) を使うのも避けた方がいいでしょう。各国語化されたツールの中には、デフォルトでASCII以外の文字を含んだパスを作るものがあるので注意してください。&lt;br /&gt;
* ソース一式の解凍先やチェックアウト先は、できるだけフルパスが短いディレクトリにしましょう。長いパスは、ときどき、予想できないトラブルを起こすことがあるからです。&lt;br /&gt;
&lt;br /&gt;
はっきり言えば、手っとり早くコンパイルをするためには、&#039;&#039;source&#039;&#039; (ソース)、&#039;&#039;artwok&#039;&#039; (アートワーク)、&#039;&#039;libraries&#039;&#039; (ライブラリ) の三つを[[source downloads|ソースのダウンロード]]のページから入手して、三つとも同じディレクトリに解凍し、そのディレクトリもできるだけルートに近いところにある短い名前のもの、たとえば &amp;quot;C:\sl_1_16_0_5&amp;quot; のようなディレクトリを選ぶのがいいでしょう。&lt;br /&gt;
&lt;br /&gt;
= ライブラリについて =&lt;br /&gt;
&lt;br /&gt;
SLビューアは、第三者が供給するライブラリ群を利用しています。そのうち、いくつかはオープンソースですが、すべてがそうではありません。&lt;br /&gt;
&lt;br /&gt;
== オープンソースのライブラリ ==&lt;br /&gt;
&lt;br /&gt;
オープンソースのライブラリは、リンデンによってコンパイル済みのものをダウンロードすることができます。[[source downloads|ソースのダウンロード]]のページにあります。これをダウンロードした場合は、ディレクトリの構造を変更しないように注意して、SL viewrのソースを格納したディレクトリに解凍します。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注意: [[source downloads|ソースのダウンロード]]のページにあるライブラリは、基本的にVS2003用であり、VS2005でコンパイルしたバイナリとの組み合わせで完全に動作するわけではありません。VS2005でコンパイルすることはできますが、VS2003のライブラリはSTLの規則を守っていません。 [http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrfnonstandardbehavior.asp Microsoft Visual Studio の非標準の振る舞い]の差異が、原因の一つであることがわかっています。&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
別の方法として、ライブラリのソースファイルを入手して自分でコンパイルすることが可能かもしれません。挑戦する場合には[[Compiling the viewer libraries (MSVS 2003)|VS2003ユーザのための手順]]が参考になるでしょう。ただし、このライブラリ群をVS2005でうまくコンパイルできるのかどうか、はっきりしていません。それでもやるなら、ご自由に。(それで、もしもうまくできたら、ぜひこのwikiにやり方を書いてください…。)&lt;br /&gt;
&lt;br /&gt;
== オープンソースでないライブラリ ==&lt;br /&gt;
&lt;br /&gt;
リンデンは、以下に示すオープンソースでないライブラリをダウンロードに含めていません。指示に従って入手し、ソースディレクトリにコピーする必要があります。&lt;br /&gt;
&lt;br /&gt;
ここで、ソースディレクトリに個々のライブラリのファイルを上書きするのではなく、空のディクトリ構造を用意して、ダウンロードしたオープンソースでないディレクトリをいったんそこにコピーし、その後、ディレクトリ構造全体をソースディクトリにコピーするといいでしょう。(例えば、&amp;lt;code&amp;gt;XCOPY OLIB SL_1_16_0_5 /S&amp;lt;/code&amp;gt; のようにして。) なぜかと言うと、オープンソースでないライブラリのファイルを適切なディクトリにコピーするのはめんどうな作業ですが、個々のリリースごとのソースファイルを別のディクトリに保存しておくのをやめない限り、新しいリリースが出るたびに毎回繰り返さなければならないからです。このやり方がいやであれば、もちろん、ソースディレクトリにオープンソースでないライブラリのファイルを直接コピーしてもかまいません。&lt;br /&gt;
&lt;br /&gt;
 rem オープンソースでないディレクトリをいったんコピーするために必要な空のディレクトリ構造を作る OLIBS.CMD というファイル&lt;br /&gt;
 md olibs&lt;br /&gt;
 md olibs\linden\&lt;br /&gt;
 md olibs\linden\libraries&lt;br /&gt;
 md olibs\linden\libraries\include&lt;br /&gt;
 md olibs\linden\libraries\i686-win32&lt;br /&gt;
 md olibs\linden\libraries\i686-win32\lib_release&lt;br /&gt;
 md olibs\linden\libraries\i686-win32\lib_debug&lt;br /&gt;
 md olibs\linden\libraries\i686-win32\include&lt;br /&gt;
 md olibs\linden\libraries\i686-win32\include\GL&lt;br /&gt;
 md olibs\linden\libraries\i686-win32\include\quicktime&lt;br /&gt;
 md olibs\linden\indra&lt;br /&gt;
 md olibs\linden\indra\newview&lt;br /&gt;
&lt;br /&gt;
=== Fmod ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.fmod.org/index.php/download fmod 3.75 for win32] をダウンロードして解凍。(3.75より新しい版、例えば FMOD EX などは使えません。)&lt;br /&gt;
* &amp;quot;fmodapi375win\api\inc\fmod.h&amp;quot;を&amp;quot;linden\libraries\include&amp;quot;にコピー。&lt;br /&gt;
* &amp;quot;fmodapi375win\api\inc\fmod_errors.h&amp;quot;を&amp;quot;linden\libraries\include&amp;quot;にコピー。&lt;br /&gt;
* &amp;quot;fmodapi375win\api\lib\fmodvc.lib&amp;quot;を&amp;quot;linden\libraries\i686-win32\lib_release&amp;quot;と&amp;quot;linden\libraries\i686-win32\lib_debug&amp;quot;との両方にコピー。&lt;br /&gt;
* &amp;quot;fmodapi375win\api\fmod.dll&amp;quot;を&amp;quot;linden\indra\newview&amp;quot;にコピー。&lt;br /&gt;
&lt;br /&gt;
=== OpenGL ===&lt;br /&gt;
&lt;br /&gt;
* [http://oss.sgi.com/projects/ogl-sample/sdk.html glext.h、glxext.h、wglext.h]をダウンロード。&lt;br /&gt;
* ダウンロードしたファイルを&amp;quot;linden\libraries\i686-win32\include\GL&amp;quot;にコピー。&lt;br /&gt;
* OpenGLに関して、*.lib とか *.dll とかをダウンロードする必要はありません。&lt;br /&gt;
&lt;br /&gt;
=== QuickTime (省略可能) ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注: &#039;&#039;&#039;Quicktimeをダウンロードするためには、Apple社のウェブサイトで開発者としての登録を行う必要があります。SLビューアは、QuickTimeを使わずにコンパイルすることもできます。詳しくは[[# QuickTimeを使わない|後述]]します。ただし、QuickTimeを使わないでコンパイルしたビューアは、SL内で動画を再生できません。&lt;br /&gt;
* [http://connect.apple.com/cgi-bin/WebObjects/MemberSite.woa/203/wa/getSoftware?fileID=20525&amp;amp;code=y&amp;amp;source=x&amp;amp;wosid=4h16WcyMtVfd2P1EffGafkoxFcr Quicktime SDK for Windows]をダウンロードしてインストール。&lt;br /&gt;
* &amp;quot;QuicktimeSDK\Libraries\QTMLClient.lib&amp;quot;を&amp;quot;linden\libraries\i686-win32\lib_release&amp;quot;と&amp;quot;linden\libraries\i686-win32\lib_debug&amp;quot;との両方にコピー。&lt;br /&gt;
* &amp;quot;QuicktimeSDK\CIncludes&amp;quot;の下にある全てのファイルを&amp;quot;linden\libraries\i686-win32\include\quicktime&amp;quot;にコピー。&lt;br /&gt;
&lt;br /&gt;
= VS2005の設定 =&lt;br /&gt;
&lt;br /&gt;
リンデン社では、Windows版のビューアの開発にVS2003を使っています。&lt;br /&gt;
&lt;br /&gt;
VS2005を使ってコンパイルするためには、&#039;&#039;ソリューション&#039;&#039;ファイルと&#039;&#039;プロジェクト&#039;&#039;ファイルの両方をVS2003形式からVS2005形式に変換して設定を調整するか、または、VS2005用のファイル一式をソースファイルと別に入手する必要があります。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注: &#039;&#039;&#039;ソースファイルのアーカイブには、&amp;quot;linden\indra\indra_complete_vs8.sln&amp;quot;というVisual Studio 2005用のソリューションファイルが含まれていますが、このファイルは&#039;&#039;&#039;使い物になりません&#039;&#039;&#039; (少なくとも、1.14.0から1.18.2までのバージョンでは)。将来リンデン社が、&#039;&#039;&#039;_vc8&#039;&#039;&#039;ファイルを適切に更新する気を起こせば、この状況は変わるかもしれません。&lt;br /&gt;
&lt;br /&gt;
== 設定済みのソリューションファイルとプロジェクトファイルを使う ==&lt;br /&gt;
&lt;br /&gt;
現在、JIRAバグトラッカの{{JIRA|VWR-1151}}に対する添付ファイルとして、ソリューションファイルとプロジェクトファイルをいれたZIPファイルがアップロードされています。&lt;br /&gt;
&lt;br /&gt;
バージョン1.16以降では、MS2005でビューアをコンパイルするためには上述のZIPファイルを使うのが簡単です。詳しい手順は、次の通りです。&lt;br /&gt;
* JIRAから、適切なZIPアーカイブをダウンロードします。&lt;br /&gt;
* アーカイブを解凍し、ソースディクトリに内容をコピーします。(ファイル名に&#039;&#039;&#039;_vc8&#039;&#039;&#039;がついているファイルを上書きします。)&lt;br /&gt;
* Visual Studio 2005またはVisual C++ Expressを起動します。&lt;br /&gt;
* プルダウンメニューから&amp;quot;File &amp;gt; Open &amp;gt; Project/Solution&amp;quot;を選んで、linden\indra\indra_complete\indra_complete&#039;&#039;&#039;_vc8&#039;&#039;&#039;.slnを開きます。(このとき、もしも将来同じディレクトリで別のバージョンをコンパイルするつもりならば、ファイルを開く&#039;&#039;&#039;前に&#039;&#039;&#039;、&#039;&#039;&#039;indra_complete_vc8.sln&#039;&#039;&#039;を別の名前 (例えば&#039;&#039;&#039;indra_1_17_0_11_vc8.sln&#039;&#039;&#039;) に変更していくといいかもしれません。)&lt;br /&gt;
* Solution Explorerで、&#039;&#039;&#039;newview&#039;&#039;&#039;を右クリックし、&amp;quot;Set as StartUp Project&amp;quot;を選びます。&lt;br /&gt;
* &#039;&#039;&#039;自分で変換する&#039;&#039;&#039;を飛ばして、[[#その他の対策]]に進みます。&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;注:&#039;&#039;&#039; ソリューションファイルやプロジェクトファイルは、ビューアのバージョンによって内容が異なります。ビューアの特定のバージョンをコンパイルしようとしていて、{{JIRA|VWR-1151}}にそのバージョン用のZIPファイルが見当たらなければ、最も近いバージョン用のものを試してください。コンパイル中にエラーが出たり、プロジェクトの読み込みで問題が起きたり、コンパイルできたとしても何か変なことが起きたならば、自分で変換する必要があるかもしれません。&lt;br /&gt;
&lt;br /&gt;
== ソリューションファイルとプロジェクトファイルを自分で変換する ==&lt;br /&gt;
&lt;br /&gt;
ソリューションファイルとプロジェクトファイルを、VS2003形式からVS2005形式に自分で変換する場合には、別のページ ([[Converting_project_files_for_MSVS2005]]) にやりかたが書いてあります。変換には、おおむね5分～15分くらいかかります。必要な時間は、あなたがどの程度VS2005の操作に馴れているのかによって大きく変わります。&lt;br /&gt;
&lt;br /&gt;
== その他の対策 ==&lt;br /&gt;
&lt;br /&gt;
VS2003とVS2005の間の互換性や、その他の問題が、他にもあります。次のような対策が必要になるかもしれません。&lt;br /&gt;
&lt;br /&gt;
=== test、crush_logger、updater ===&lt;br /&gt;
&lt;br /&gt;
何らかの理由により、&#039;&#039;&#039;test&#039;&#039;&#039;プロジェクトはVS2005ではうまく働きません。対策は、&#039;&#039;&#039;test&#039;&#039;&#039;プロジェクトを無効に設定することです。&#039;&#039;&#039;test&#039;&#039;&#039;を右クリックして、&#039;&#039;&#039;Unload Project&#039;&#039;&#039;を選択します。&lt;br /&gt;
&lt;br /&gt;
他の人がダウンロードできるような完全な一式をビルドしようというつもりがなければ、&#039;&#039;&#039;win_crash_logger&#039;&#039;&#039;と&#039;&#039;&#039;win_updater&#039;&#039;&#039;というプロジェクトを、無効にすることもできます。ただし、これらのプロジェクトを無効にしてnewviewのプロジェクトの依存性から取り除かずにおく場合には、注意が必要です。それは、リンクの時点でVS2005が誤動作する場合があるからです。&lt;br /&gt;
&lt;br /&gt;
=== QuickTimeを使わない ===&lt;br /&gt;
&lt;br /&gt;
Apple社のQuickTime SDKを使いたくなければ、以下の手順によって、QuickTimeを使わないように変更できます。&lt;br /&gt;
* ファイル linden\indra\llcommon\llpreprocessor.h の58行目付近 (&#039;&#039;&#039;#elif LL_WINDOWS&#039;&#039;&#039;の下) を、以下のように書き換えます。&lt;br /&gt;
 (旧) #define LL_QUICKTIME_ENABLED	1&lt;br /&gt;
 (新) #define LL_QUICKTIME_ENABLED	&#039;&#039;&#039;&#039;&#039;0&#039;&#039;&#039;&#039;&#039;&lt;br /&gt;
* ツールバーの下にある緑色の矢印の隣のSolution Configurationというドロップダウンボックスから&#039;&#039;&#039;ReleaseNoOpt&#039;&#039;&#039;を選び、Solution Explorerで、以下のように操作します。&lt;br /&gt;
** &#039;&#039;&#039;newview&#039;&#039;&#039;をクリックして選択します。&lt;br /&gt;
** 右クリックして、Propertiesを選びます。&lt;br /&gt;
** Configuration Properties &amp;gt; Linker &amp;gt; Inputにある&#039;&#039;&#039;Additional Dependencies&#039;&#039;&#039;の左側をクリックし、右端に&amp;quot;&#039;&#039;&#039;...&#039;&#039;&#039;&amp;quot;と書かれたボタンを表示させ、そのボタンをクリックします。&lt;br /&gt;
** リストをスクロールし、&#039;&#039;&#039;qtmlclient.lib&#039;&#039;&#039;と書かれた行を見つけ、その行を削除します。&lt;br /&gt;
** &#039;&#039;&#039;OK&#039;&#039;&#039;をクリックし、&amp;quot;Additional Dependencies&amp;quot;ダイアログボックスを閉じます。さらに&#039;&#039;&#039;OK&#039;&#039;&#039;をクリックして&amp;quot;newview Property Pages&amp;quot;ダイアログボックスを閉じます。&lt;br /&gt;
* Solution Configurationsドロップダウンボックスから&#039;&#039;&#039;ReleaseForDownload&#039;&#039;&#039;を選び、&#039;&#039;&#039;newview&#039;&#039;&#039;をクリックするところから始めて上と同じ操作をもう一回繰り返します。&lt;br /&gt;
&lt;br /&gt;
= コンパイルして実行 =&lt;br /&gt;
&lt;br /&gt;
== ビルド ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;ReleaseNoOpt&#039;&#039;&#039; (デバッグ用) または&#039;&#039;&#039;ReleaseForDownload&#039;&#039;&#039; (通常実行用) のどちらかをコンパイルします。&lt;br /&gt;
* ツールバーの下にある緑色の矢印の隣のSolution Configurationドロップダウンボックスから、どちらかを選びます。&lt;br /&gt;
* &#039;&#039;&#039;newview&#039;&#039;&#039;がアクティブなプロジェクトになっていることを確認します。(アクティブになっていなければ、newviewの右クリックして設定してください)&lt;br /&gt;
* メニューのBuildからBuild Solutionを選ぶか、またはF7を押します。&lt;br /&gt;
* 成功すると、linden\indra\newview\ReleaseNoOptにnewview_noopt.exeができるか、または、linden\indra\newview\ReleaseForDownloadにSecondLife.exeができます。&lt;br /&gt;
&lt;br /&gt;
== コンパイルエラー ==&lt;br /&gt;
&lt;br /&gt;
* [[Common compilation problems]]を見てください。&lt;br /&gt;
&lt;br /&gt;
== 実行する ==&lt;br /&gt;
&lt;br /&gt;
* Visual StudioのDebugメニューから&#039;&#039;&#039;Start Debugging&#039;&#039;&#039;か&#039;&#039;&#039;Start Without Debugging&#039;&#039;&#039;を選ぶと実行できます。&lt;br /&gt;
* Visual Studioを使わずに、できたビューアを実行するためには、適当な場所にSecondLife.exeへのショートカットを作り、開始する場所としてlinden\indra\newviewを指定します。&lt;br /&gt;
* 代わりに、できあがった exeファイルを &amp;quot;C:\Program Files\SecondLife&amp;quot;フォルダにコピーする方法もあります。&lt;br /&gt;
&lt;br /&gt;
== コンフィグレーション ==&lt;br /&gt;
&lt;br /&gt;
* 普通は&#039;&#039;&#039;ReleaseNoOpt&#039;&#039;&#039;か&#039;&#039;&#039;ReleaseForDownload&#039;&#039;&#039;のコンフィグレーションを使います。&lt;br /&gt;
* &#039;&#039;&#039;ReleaseNoOpt&#039;&#039;&#039; (最適化しない) というコンフィグレーションは、コンパイル時間が短く、デバッグ用の情報が付加され、実行の性能が低下します。ReleaseForDownloadと比べてFPSが約50%ほど下がります。&lt;br /&gt;
* &#039;&#039;&#039;ReleaseForDownload&#039;&#039;&#039;というコンフィグレーションは、デバッグ用の情報が付加され、デバッガで実行するのに適していますが、ある種の局所変数へのアクセスは失われます。&lt;br /&gt;
* &#039;&#039;&#039;ReleaseNoOpt&#039;&#039;&#039; では、ビューアを起動すると、ビューアのウィンドウとは別にデバッグコンソールウィンドウが開き、実行中ずっと開いたままになりますが、他のコンフィグレーションであってもShift + Ctrl + 4 を押せば同じ情報を参照できます。&lt;br /&gt;
* newview、Properties、Debugging、Command line argumentsで &amp;quot;2&amp;gt;secondlife.log&amp;quot; をコマンド行引数に追加すれば、前述のデバッグログをファイルに格納することもできます。&lt;br /&gt;
* &#039;&#039;&#039;Debug&#039;&#039;&#039;コンフィグレーションをビルドした人は[[Finding_leaks]]を参照してください。&lt;br /&gt;
&lt;br /&gt;
== うまく実行できないときは ==&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Inventory errors&#039;&#039;&#039; : インベントリの内容を読み込んでいるときにエラーが出るようなら、[[Help:Stuck logging in]]を見てください。&lt;br /&gt;
* &#039;&#039;&#039;Missing smime3 DLL&#039;&#039;&#039; : smime3.dllはビューアに内蔵されたウェブブラウザの一部です。このエラーを無視してもビューアのほとんどの機能は動作します。エラーが出ないようにするためには、リンデン社の公式ビューアのバイナリをインストールして、そのインストールディレクトリから、&amp;quot;smime3.dll&amp;quot;、&amp;quot;nss3.dll&amp;quot;、&amp;quot;softokn3.dll&amp;quot;、&amp;quot;ssl3.dll&amp;quot;というファイルを&amp;quot;linden\indra\newview&amp;quot;にコピーしてください。&lt;br /&gt;
* &#039;&#039;&#039;Can&#039;t connect&#039;&#039;&#039; : デバッグ用にビルドすると、ログイン画面の右下に接続するグリッドを選択するドロップダウンボックスが追加されます。メイングリッドは&#039;&#039;&#039;Agni&#039;&#039;&#039;、ベータグリッドは&#039;&#039;&#039;Aditi&#039;&#039;&#039;です。(この選択を処理するプログラムにはバグがあって、選択を変更した場合はいったんビューアを終了させて再起動しなければ、望みのグリッドに接続できない、という意見もあります。)&lt;br /&gt;
&lt;br /&gt;
= パッチを投稿する =&lt;br /&gt;
&lt;br /&gt;
ソースを修正して、パッチを投稿したくなった場合は、[[Submitting patches]]を参照してください。&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Project_talk:Languages/ja&amp;diff=38528</id>
		<title>Project talk:Languages/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Project_talk:Languages/ja&amp;diff=38528"/>
		<updated>2007-10-30T12:45:56Z</updated>

		<summary type="html">&lt;p&gt;March Korda: 編集内容の要約は本文と同じ言語で書くべきだと思います。&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== 課題 ==&lt;br /&gt;
&lt;br /&gt;
とりあえず、MediaWikiの文法のまとめと、翻訳していくページの優先順位決めとか、そこらへんが課題かと思います。[[User:Asuka Neely|Asuka Neely]] 10:51, 18 September 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
: http://www.MediaWiki.org を確認したら、[http://www.mediawiki.org/wiki/Help:Formatting ページの書式] には、日本語訳がありませんでした…。優先順位については、私は、何か決める必要を感じていません。各自が必要だと思うページを勝手に訳せば、というスタンスです。私は、当面、ビューアを自力でコンパイルしようと考える人が必要とするだろうページから翻訳をしています。もちろん、Asukaさんが、優先順位を決めたいと考えてらっしゃるのでしたら、そのこと自体には反対しませんが、でも「優先順位が低いと決まったページを翻訳しちゃいかん」とか言う人が必ず現れそうなのが、少々怖いです。 -- [[User:Alissa Sabre|Alissa Sabre]] 03:44, 4 October 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== 編集内容の要約は本文と同じ言語で書くべきだと思います。 ==&lt;br /&gt;
&lt;br /&gt;
他のWiki翻訳で迷った事があったので、議論のネタとして挙げます。&lt;br /&gt;
編集内容の要約は本文と同じ言語で書くべきだと思います。&lt;br /&gt;
理由は、本文を後から編集する人が分かりやすいからです。&lt;br /&gt;
編集内容の要約欄はメタデータ扱いだと思いますが、タイトルにUnicodeが使えることからシステム的にも問題なさそうですし、&lt;br /&gt;
ページ名のように英語にあわせるメリットは無いと思います。&lt;br /&gt;
--[[User:March Korda|March Korda]] 05:45, 30 October 2007 (PDT)&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Region_Performance_Improvement_Guide&amp;diff=38519</id>
		<title>Talk:Region Performance Improvement Guide</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Region_Performance_Improvement_Guide&amp;diff=38519"/>
		<updated>2007-10-30T12:24:27Z</updated>

		<summary type="html">&lt;p&gt;March Korda: New page: &amp;quot;Improving Your Region&amp;#039;s Performance&amp;quot; - &amp;quot;Remove Top Scripts &amp;quot; &amp;gt;Then click on Get Top Scripts, which will bring up a Window shown below.  The link of the image is wrong. It should specify n...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;quot;Improving Your Region&#039;s Performance&amp;quot; - &amp;quot;Remove Top Scripts &amp;quot;&lt;br /&gt;
&amp;gt;Then click on Get Top Scripts, which will bring up a Window shown below. &lt;br /&gt;
The link of the image is wrong.&lt;br /&gt;
It should specify not &amp;quot;Region_Window_Top_Colliders.PNG&amp;quot; but like &amp;quot;Region_Window_Top_Scripts.PNG&amp;quot;.&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Improving_Region_Performance/ja&amp;diff=38518</id>
		<title>Improving Region Performance/ja</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Improving_Region_Performance/ja&amp;diff=38518"/>
		<updated>2007-10-30T12:09:36Z</updated>

		<summary type="html">&lt;p&gt;March Korda: The link to the &amp;quot;Statistics Bar&amp;quot; was changed into the link to the Japanese version.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
この項目ではセカンドライフのリージョンパフォーマンスをチェックする方法および、それを向上させるためにはどうすれば良いかを解説しています。この wikiはリージョンのオーナーむけに書かれています。いくつかの項目は島（プライベートシム）向けの内容ですが、一部はメインランドの土地オーナーにも役に立つ内容となっています。&lt;br /&gt;
&lt;br /&gt;
== リージョンパフォーマンスをチェックするためには ==&lt;br /&gt;
&lt;br /&gt;
リージョンパフォーマンスを見るために、まずそのリージョンのフレームレート(FPS)をチェックしましょう。そのためには&lt;br /&gt;
[http://help.secondlife.com/jp/guides/stats.php 統計一覧]を使用します。あなたの管理している土地上で View Menu &amp;gt; View Statistics Bar の順に選択してください。この一覧には少し圧倒されるかもしれませんので どのように読めばよいのか解説しましょう。なお、Simというのは Simulator（シミュレーター）の略でリージョン（地区・地域）の別名です。下図中に丸でしめしてある「Sim FPS」というのはそのリージョンのフレームレートを表しています。&lt;br /&gt;
&lt;br /&gt;
[[Image:StatisticsBar_Initial.PNG|thumbnail|none]]&lt;br /&gt;
&lt;br /&gt;
リージョンのFPS値がどういう意味かは以下の通りです：&lt;br /&gt;
&lt;br /&gt;
* 45 FPS:  最高の状態です。何もする必要はありません。&lt;br /&gt;
* 35 - 44 FPS:  良い状態です。35 FPSを切るようなことがなければ特に調整をする必要はありません。&lt;br /&gt;
* 20 - 35 FPS:  遅い状態です、注意する必要があります。リージョンパフォーマンスを改善するために調整が必要です。&lt;br /&gt;
* 10 - 20 FPS: 悪い状態です、深刻な状況といえます。&lt;br /&gt;
* 0 - 10 FPS: 恐ろしい状態です。サポートチケットを切るべきです。&lt;br /&gt;
&lt;br /&gt;
もっとも混んでいる時間帯でもあなたのリージョンが 35 FPS以上を保っているのであれば何もする必要はありません。うれしいことに大半のリージョンは 35 FPS以上を保っています。2007年の 9月の例をあげればセカンドライフ全体において平均値で 35 FPSを切ってしまうようなリージョンは 4%以下でした。そして10月の始めに実施された改善対策によってこの値はさらに良くなっています。&lt;br /&gt;
&lt;br /&gt;
何がリージョンの動作を遅くしているかを さらに詳しく知るためには[http://help.secondlife.com/jp/guides/stats.php 統計一覧]の最後の行「Time (ms)」をクリックしてください。そうすると下図のようなさらに詳しい情報が表示されます。&lt;br /&gt;
&lt;br /&gt;
[[Image:Statistics_Bar_TimeMS.PNG|thumbnail|none]]&lt;br /&gt;
&lt;br /&gt;
「Total Frame Time」は一枚のフレームを表示するのに何ミリ秒(ms)かかっているかを示しています。この値が 22.2 ms以上かかっている場合は すなわちフレームレートが 45 FPS以下になっているということになります。これらの内容のもっと詳しい情報はナレッジベースの[http://help.secondlife.com/jp/guides/stats.php 統計一覧]ページで Timeというセクションを見てください。なお、この時間測定の件については この「リージョンパフォーマンスを向上させる」説明のなかでも触れることにします。&lt;br /&gt;
&lt;br /&gt;
== リージョン パフォーマンスを向上させる ==&lt;br /&gt;
&lt;br /&gt;
リージョンパフォーマンスを向上させるためにはいくつかの手順があります。ここでは影響が大きそうでかつ実施の手間が少なそうなものから順に説明していくことにします、が、リージョンによって事情は異なるので注意してください。&lt;br /&gt;
&lt;br /&gt;
=== その地域にいるアバターの最大数を減らす ===&lt;br /&gt;
&lt;br /&gt;
そのリージョン内にいるアバターの数はリージョンFPSが下がっている場合のもっとも良くある、そしてたいていの場合もっとも大きな影響を及ぼしている原因です。標準の設定よりも最大数を上げているために低リージョンパフォーマンスとなってしまっていることがよくあります。その地域で許可する最大アバター数を減らせばたいていの場合 FPSはあがります。この設定は World Menu &amp;gt; Region / Estate から行うことができます。Region / Estateというウィンドが開きますので、その中の Agent Limit という値を調整することでそのリージョンに同時に入れるアバターの最大数を決めることができます。&lt;br /&gt;
&lt;br /&gt;
[[Image:RegionWindow_Region_Tab.PNG|thumbnail|none]]&lt;br /&gt;
&lt;br /&gt;
リージョンに入れるアバター数の標準値は 40人となっています。地域のオーナーであればこの値を調整することができます。あなたのアバターから見ることができる他のアバターはほぼ 30人といったところです。混んでいる時間帯に[http://help.secondlife.com/jp/guides/stats.php 統計一覧]の Agent Timeを見て、どのていどのパフォーマンスでリージョンが動いているか把握しましょう。混んでいる時間帯で Agent Timeが 9 ms以下になるように保つことをお勧めします。設定方法についてより詳細な情報が必要な場合はナレッジベースの「[https://support.secondlife.com/ics/support/KBAnswer.asp?questionID=4417 リージョン内のアバター数]」を参照してください。&lt;br /&gt;
&lt;br /&gt;
=== 負荷の高いスクリプトを取り除く ===&lt;br /&gt;
&lt;br /&gt;
非効率なスクリプトやとても忙しいスクリプトはリージョンを遅くする原因になります。[http://help.secondlife.com/jp/guides/stats.php 統計一覧]の Script Time行にはリージョン内の各スクリプトがどれくらいの時間（ミリ秒）を使っているか表示されています。もし 5ミリ秒以上食っているものがあるのなら それを取り除けるかどうか調査する価値があります。どのスクリプトがもっとも時間を食っているかは Region / Estateウィンドウの Debugタブで調べることができます。&lt;br /&gt;
&lt;br /&gt;
[[Image:Region_Window_Debug_Tab.PNG|thumbnail|none]]&lt;br /&gt;
&lt;br /&gt;
「Get Top Scripts」をクリックすると下図のような表示が出ます。&lt;br /&gt;
&lt;br /&gt;
[[Image:Region_Window_Top_Colliders.PNG|thumbnail|none]]&lt;br /&gt;
&lt;br /&gt;
Timeという列のタイトルを二回クリックすればもっとも忙しいスクリプトから順に一覧が並び替えされます。Refreshボタンを何回か押して、いくつか違ったタイミングで調べることでより正確に調べることができます。どのスクリプトがリージョンの資源を食っているかわかれば、それを取り除いたり違うものと置き換えたり最適化したりできます。なおリージョン内のスクリプトの総数を減らすことでもパフォーマンスを向上できることに注意してください。&lt;br /&gt;
&lt;br /&gt;
問題のあるスクリプトの例：休止状態になることをせずに継続的に走り続けている - 例えば 2～3秒以下の間隔でセンサーを回している。他の例としては temp-rezzerスクリプトがあります。これは（制限値よりも）少しだけ多くのプリムの使用を可能にするものですが、代わりにリージョンのパフォーマンスを消費します。&lt;br /&gt;
&lt;br /&gt;
=== 負荷の高いコリジョンを取り除く ===&lt;br /&gt;
&lt;br /&gt;
衝突検知をする必要がある物理オブジェクトは潜在的にリージョンを遅くする可能性を持っています。物理オブジェクトは動き回ることが多い上に、物理計算をすることでリージョンパフォーマンスを大幅に食いがちです。[http://help.secondlife.com/jp/guides/stats.php 統計一覧]の Physics Time行には各物理オブジェクトがどれくらいの時間（ミリ秒）を使っているかが表示されています。もし 4ミリ秒以上食っているものがあるのなら それを取り除けるかどうか調査する価値があります。どのコリジョンがもっとも時間を食っているかは Region / Estateウィンドウの Debugタブで調べることができます。&lt;br /&gt;
&lt;br /&gt;
[[Image:Region_Window_Debug_Tab.PNG|thumbnail|none]]&lt;br /&gt;
&lt;br /&gt;
「Get Top Colliders」をクリックすると下図のような表示がでます。&lt;br /&gt;
&lt;br /&gt;
[[Image:Region_Window_Top_Colliders.PNG|thumbnail|none]]&lt;br /&gt;
&lt;br /&gt;
Timeという列のタイトルを二回クリックすればもっとも負荷の高いコリジョンから順に一覧が並び替えされます。この一覧は瞬間瞬間の状況をもとにして作られていますので、Refreshボタンを何回か押すとより正確な状況を知ることができるでしょう。どのオブジェクトが負荷の高いコリジョンになっているかわかれば、それを取り除いたり違うものと置き換えたり最適化したりできます。なおリージョン内の物理オブジェクトの総数を減らすことでもパフォーマンスを向上できることに注意してください。&lt;br /&gt;
&lt;br /&gt;
=== 大きなテクスチャを取り除く ===&lt;br /&gt;
&lt;br /&gt;
過度に大きなテクスチャの使用はリージョンを遅くする原因になります。一般的に 512x512より大きなテクスチャを使用することは避けた方がよいです。[http://help.secondlife.com/jp/guides/stats.php 統計一覧]の Images Time行にはリージョン内のテクスチャを処理するのにどれくらいの時間（ミリ秒）がかかっているか表示されています。この値が 2ミリ秒を越えているようであれば それらを減らせるかどうか調査する価値があります。あるリージョンにアバターが入ってきて巨大なテクスチャや沢山の小さなテクスチャを見ると各ビュワーは自動的にそれらのイメージデータをダウンロードしようとします。もし多くのアバターが同時にダウンロードしようとすると リージョンに負荷がかかり、結果として FPSが下がります。もしそれらの大きなテクスチャを取り除くことができないのであればユニークなテクスチャを減らす、テクスチャの大きさを小さくする、解像度を下げるなどの対応でリージョンパフォーマンスを改善することができます。（訳注：同じキーのテクスチャであれば一度のダウンロードですみます。似ているけれどもそれぞれキーが違うなどの場合はキーの数だけダウンロードが発生するのでその分負荷になってしまいます）。&lt;br /&gt;
&lt;br /&gt;
=== テクスチャが変化するスクリプトを使っているオブジェクトを最適化する ===&lt;br /&gt;
&lt;br /&gt;
テクスチャを差し替えるスクリプトを使っているオブジェクトはリージョンを遅くする原因になります。新しいテクスチャが表示されるたびに、それを見ているアバターはデータをダウンロードする必要がでてきます。もしそれを取り除くことができないのであればそのオブジェクトで使用しているテクスチャの数を減らすか解像度を下げるかしてみてください。それによってリージョンパフォーマンスを改善することができます。&lt;br /&gt;
&lt;br /&gt;
=== 使用しているプリム数を減らす ===&lt;br /&gt;
&lt;br /&gt;
リージョン内のプリム数を減らすことでリージョンパフォーマンスを向上することができます。現状では各リージョンの制限数は 15,000プリムです。&lt;br /&gt;
&lt;br /&gt;
=== 来訪者のアタッチメント数を減らす ===&lt;br /&gt;
&lt;br /&gt;
これを実施するのはとても大変ですが、一部のリージョンでは訪れるアバターに付けているアタッチメント - 特にプリム数が多いものや重いスクリプトが動いているもの - を外してもらうことで速度向上を実現しています。&lt;br /&gt;
&lt;br /&gt;
=== ビュワーのパフォーマンス向上のためにリージョンを最適化する ===&lt;br /&gt;
&lt;br /&gt;
下記のようなリージョン構成はビュワー側のパフォーマンスを下げる原因になります。&lt;br /&gt;
&lt;br /&gt;
* 10m x 10mより大きなプリムはビュワー側の FPSに影響します。&lt;br /&gt;
* アバターが始めに訪れる場面に大きなもしくは多数のテクスチャがある。&lt;br /&gt;
* 過度のスカルプティ&lt;br /&gt;
* パーティクル効果&lt;br /&gt;
&lt;br /&gt;
訪れる人のなかには遅いグラフィックカードやPCを使用している人もいることに留意してください。&lt;br /&gt;
&lt;br /&gt;
=== 早いリージョンに更新する ===&lt;br /&gt;
&lt;br /&gt;
リージョンにはいくつか異なるパフォーマンスレベルを持った異なるクラスのものが存在します。現行の最新は [http://blog.secondlife.com/2006/10/16/looking-forward-to-class-5/ Ian Lindenのブログ記事]で記載されている 2006年の 11月に導入された Class 5です。2006年の11月以降に追加されたリージョンはすべてクラス５です。クラス５リージョン（SIM）はクラス３と比較して大幅に多くのアバター、多くのスクリプト、多くの物理、多くのオブジェクト、そして多くのテクスチャを一度に扱うことができます。クラス３の領域を所有しているオーナーはクラス５にアップグレードすることができます。クラスは納品時に決定されます。&lt;br /&gt;
&lt;br /&gt;
=== 追加情報 ===&lt;br /&gt;
&lt;br /&gt;
[https://support.secondlife.com/ics/support/KBAnswer.asp?questionID=4417 Region/Estateウィンドウ]を使用すると他にも多数の管理を行うことができます。詳細はリンク先のナレッジベースを参照してください。&lt;br /&gt;
&lt;br /&gt;
=== まとめ ===&lt;br /&gt;
&lt;br /&gt;
平均値が 35 FPS以下のリージョンはほんの数パーセントしか存在していないのは事実ですが、パフォーマンスが悪くて遅いリージョンが少ないとは言いがたいことは理解できます。そういったリージョンや地域のオーナーに対して、どのように[http://help.secondlife.com/jp/guides/stats.php 統計一覧]を利用すれば - 混んでいる時間帯に統計一覧を利用して アバターやスクリプトやテクスチャ、オブジェクト、物理オブジェクトなどの数を調整することで - パフォーマンス改善を行うことができるかを示しました。この記事があなたのリージョンをクールでかつ早い状態にする適切なバランスを見つける手助けになることを望みます。&lt;/div&gt;</summary>
		<author><name>March Korda</name></author>
	</entry>
</feed>