Difference between revisions of "LSL Constants vs Globals"

From Second Life Wiki
Jump to navigation Jump to search
m
(Without explicit typecasts, the demo code doesn't compile...)
Line 28: Line 28:
default {
default {
     state_entry() {
     state_entry() {
         llOwnerSay(llGetFreeMemory());
         llOwnerSay((string) llGetFreeMemory());
     }
     }
}</lsl>
}</lsl>
Line 43: Line 43:
default {
default {
     state_entry() {
     state_entry() {
         llOwnerSay(llGetFreeMemory());
         llOwnerSay((string) llGetFreeMemory());
     }
     }
}</lsl>
}</lsl>
|}
|}

Revision as of 21:31, 23 September 2008

There are some advantages in using global variables over the string and key constants, it's faster and uses less bytecode when it is longer then 3 characters and it used more then twice but it uses more bytecode when it is shorter then 3 characters or it used once. This is easily demonstrated by running the scripts in Figure 1.

Pros

  • Faster
  • Uses less bytecode when it is longer then 3 characters and it used more then twice.

Cons

  • User can accidentally change the value.
  • Uses more bytecode when it is shorter then 3 characters or it used once.


Figure 1: Bytecode Cost
Constant Global

<lsl>

dead(){

   key a = NULL_KEY;
   key b = NULL_KEY;
   key c = NULL_KEY;
   key d = NULL_KEY;

}

default {

   state_entry() {
       llOwnerSay((string) llGetFreeMemory());
   }

}</lsl>

<lsl>key null_key = NULL_KEY;

dead(){

   key a = null_key;
   key b = null_key;
   key c = null_key;
   key d = null_key;

}

default {

   state_entry() {
       llOwnerSay((string) llGetFreeMemory());
   }

}</lsl>