スクリプターズカフェ/ログ/LSLでの演算の優先順位

ページ名:スクリプターズカフェ/ログ/LSLでの演算の優先順位

Scripters_cafeログ

08/04/26[]

Voodoo呪術の挙動の確認関連で、演算の優先順について以下のようなスクリプトで調べていました。

default { state_entry() { string test = "12345"; string ret = test // (1) + llGetSubString( test, 0, 0 ) // (2) + llGetSubString( (test="") + test, 0, 0 ) // (3) + test; // (4) llOwnerSay( ret ); }}

このスクリプトを実行すると、次のような結果が表示されます。

112345

この結果から、以下のような順番で演算が行われていることが分かります。

  1. (4)部分が評価される。(test の内容「12345」がそのまま連結)
  2. (3)のパラメータ部分が評価される
    1. (test="") + test の演算が行われる
      1. (test="") の結果(空文字列)と、VMに保存されたtestの内容「12345」が連結され、結果は「12345」となり、同時にtest変数の内容が空文字列に設定される
  3. (3)の関数が実行される。戻り値は「1」
  4. (2)のパラメータ部分が評価される。
    1. この時点でtest変数は空文字列になっている。
  5. (2)の関数が実行される。戻り値は空文字列。
  6. (1)が評価される。この時点ではtest変数は空文字列。

この結果、ret変数に「112345」という文字列が設定されるという結果になっています。

以下のニーモニックダンプで確認してみます。

01 Function Args: 02 Local List: ss03 STATES04 default:05 EVENTS06 state_entry()07 PUSHARGS "12345"08 STORESP 0 [test]09 PUSHS 0 [test]10 PUSHE11 PUSHE12 PUSHBP13 PUSHS 0 [test]14 PUSHARGS ""15 STORES 0 [test]16 ADD string, string17 PUSHARGI 018 PUSHARGI 019 PUSHARGE 020 PUSHSP21 PUSHARGI 1222 ADD integer, integer23 POPBP24 CALLLID llGetSubString, 9425 POPBP26 PUSHE27 PUSHE28 PUSHBP29 PUSHS 0 [test]30 PUSHARGI 031 PUSHARGI 032 PUSHARGE 033 PUSHSP34 PUSHARGI 1235 ADD integer, integer36 POPBP37 CALLLID llGetSubString, 9438 POPBP39 PUSHS 0 [test]40 ADD string, string41 ADD string, string42 ADD string, string43 STORESP 4 [ret]44 PUSHE45 PUSHBP46 PUSHS 4 [ret]47 PUSHARGE 048 PUSHSP49 PUSHARGI 450 ADD integer, integer51 POPBP52 CALLLID llOwnerSay, 29253 POPBP54 POPSPOPSRETURN
  • 行09 (4)の処理
  • 行13 (3)のtest変数をスタックへ。(この時点で変数のコピーがVMに保存されている)
  • 行14 15 (3)のVoodoo呪術部分。test変数を空文字列に設定。
  • 行24 (3)のllGetSubString呼び出し
  • 行29 (2)のtest変数をスタックへ。(この時点でのtest変数本体は空文字列)
  • 行37 (2)のllGetSubString呼び出し
  • 行39 (1)のtest変数をスタックへ。(この時点でのtest変数本体は空文字列)
  • 行40 41 42 文字列を結合


ちなみに、ほぼ同じプログラムをPHPで記述した場合、実行結果は「123451」となります。


【参考】

  • リスト変数のヒープ割り当ての挙動


特に記載のない限り、コミュニティのコンテンツはCC BY-SAライセンスの下で利用可能です。

シェアボタン: このページをSNSに投稿するのに便利です。


最近更新されたページ

左メニュー

メニュー 用語集 - これはどういう意味?用語解説 Q&A - よくある質問、定番解説、公式サポートに関する情報 トラブル・シューティング - トラブル・シューティング情...

顔文字

すでに日本の文字文化の仲間入りしたグラフィックを駆使しない表現手段。これが英語と日本語で違う。基本的に英語の顔文字は横向き。最初、わからなかったのが、この2つ...

銀行業務に関する判断・事例

2008年1月22日より施行される「銀行」に関する判断事例をまとめます。これらは「参考」であり、これによって「判断」をするものではありません。個々に記載されていない背景がある場合もありますので判例とは...

都市伝説&うわさ

目次1 Rumor & urban legend1.1 セカンドライフ全人口のうち3割はボット、半数は未使用のアカウントらしぃ1.2 キャッシュはまめにクリアしたほうがよい?1.3 支払い情報がないと...

身長

意外と知られていないが、AVの身長を計れる。llGetScaleのvectorのzを使う。ただし、靴などは脱いで計ること。SL内では2m前後が普通なようで まじめに計って 160cm程度にしたとある人...

設定

Second Lifeでは、様々な設定を行うことができます。「編集」→「環境設定」か、Ctrl + Pで呼び出せます。特に記載のない限り、コミュニティのコンテンツはCC BY-SAライセンスの下で利用...

複数アカウントの管理

このページの内容は公式 Knowledge Base「Alt Account FAQ」を翻訳、一部補足したものです。内容は予告なく変更される場合があるため契約を行う際は原文を確認するようにお願いします...

英語

RL/SLを問わず、世界標準語(なのか?)。人口比率的に、普通に生活していると英語を話す機会は多い。英語chatの参考に...ねっとげーむのえいかいわ。ちなみにある人の変遷 (ある人は、高卒程度の英語...

略語

日本語ほど省略しまくる言葉もないと思っていたら英語には勝てませんでした...例えば...lollaugh over laud大笑いbrbbe right backすぐもどるhbhurry back早く...

用語集

すごい作りかけです。みなさん、御協力お願いします。SIMSL内で作成される島のこと。LSLLinden Script Languageのこと。これで、オブジェクトやアバターを操作出来る。アバターSL内...

最近の出来事

最新情報です[]パスワードの盗難事件等発生していますいので、パスワードの再確認をお願いします。 --Keiji 2007年6月17日 (日) 16:46 (UTC)特に記載のない限り、コミュニティのコ...

日本人向けSIM

ここでは、日本人向けSIM(日本人利用者が多い、日本人が運営しているSIM)を並べていきます。特に記載のない限り、コミュニティのコンテンツはCC BY-SAライセンスの下で利用可能です。...

換金

日本円 →(US$)→ L$ / L$ →(US$)→日本円といった流れで換金が可能。リンデンラボ公式LindeXのみ。その他の方法Paypal経由でサードパーティを利用。例:ANSHECHUNG.C...

太陽

太陽を動かすことも可能。SLの太陽(及び月)は動くので、明るさも当然変わる。暗くなると見えにくいため、太陽を出して明るくすることもできる。メニューバーから以下の操作でコントロール。World - Fo...

外部サイトリンク

活動の軸が外部にある関連のリンク。ニュース、技術資料、ツール、サービスなど。イン・ワールドで活動している団体の説明 HPなどはこちらではなくイン・ワールド系リンクへ記載してください。目次1 ニュース1...

基本操作

初心者講座 > 基本操作ここでは、基本操作を解説します。画面の見方[]キーボードによる操作[]カメラ操作[]特に記載のない限り、コミュニティのコンテンツはCC BY-SAライセンスの下で利用可能です。...

土地の種類・分類

目次1 土地の種類2 土地の購入2.1 メインランドで土地を購入する場合2.2 プライベート・アイランドで土地を購入する場合2.3 レンタルとは?3 その他注意事項土地の種類[]セカンドライフにおいて...

土地

SL内では土地を売買・賃貸できる自分の(または所属するグループが)土地をもつと、そこを Homeとして設定できる。(CTRL+SHIFT+Hで、すぐに帰れる場所になる)土地のプリム数の範囲内で、家など...

右クリック

パイ・メニューを開いてその人や物に対して何か行う操作。何かしたい/情報を知りたいという時は、右クリックすべし。macな人に「右クリックないんですけど…」と質問されるのは定番。Optだったかを押しながら...