Difference between revisions of "LSL Hacks"

From Second Life Wiki
Jump to navigation Jump to search
Line 11: Line 11:
== [[llGetListLength]]({{LSL Param|myList}}) and ({{LSL Param|myList}} != []) ==
== [[llGetListLength]]({{LSL Param|myList}}) and ({{LSL Param|myList}} != []) ==
{| {{Prettytable}}
{| {{Prettytable}}
| '''Type''': LSO
| '''VM''': LSO
| '''Discover''': Strife Onizuka
| '''Discover''': Strife Onizuka
|}
|}
Line 28: Line 28:
== ++c and c++ ==
== ++c and c++ ==
{| {{Prettytable}}
{| {{Prettytable}}
| '''Type''': LSO
| '''VM''': LSO
| '''Discover''': Not Applicable
| '''Discover''': Not Applicable
|}
|}
Line 44: Line 44:
== ({{LSL Param|c}} = -~{{LSL Param|c}}) same as ++{{LSL Param|c}} ==
== ({{LSL Param|c}} = -~{{LSL Param|c}}) same as ++{{LSL Param|c}} ==
{| {{Prettytable}}
{| {{Prettytable}}
| '''Type''': LSO
| '''VM''': LSO
| '''Discover''': Strife Onizuka
| '''Discover''': Strife Onizuka
|}
|}
Line 59: Line 59:
== Testing [[key]] validity ==
== Testing [[key]] validity ==
{| {{Prettytable}}
{| {{Prettytable}}
| '''Type''': LSO & Mono
| '''VM''': LSO & Mono
| '''Discover''': Strife Onizuka
| '''Discover''': Strife Onizuka
|}
|}

Revision as of 09:21, 19 May 2008

A page dedicated LSL Hacks, those things that make your code so much better but at the same time so much worse.

llGetListLength(myList) and (myList != [])

VM: LSO Discover: Strife Onizuka

Pros

  • Faster
  • Uses less bytecode

Cons

  • Less readable
  • Will likely be removed in LSL3[1]

++c and c++

VM: LSO Discover: Not Applicable

In LSO LSL (as opposed to Mono LSL) ++c is faster then c++ because of how the bytecode is generated[2]. There are very few applications where ++c can't be used instead.

Pros

  • Faster code.
  • Saves 6 bytes and 2 instructions.

Cons

  • None


(c = -~c) same as ++c

VM: LSO Discover: Strife Onizuka

For the same instruction cost of (++c), (c = -~c) can be substituted giving a 4 byte saves.

Pros

  • Saves 4 bytes of bytecode.

Cons

  • Will fail on hardware that doesn't support two's compliment (unlikely LL will ever use such a platform).
  • ?

Testing key validity

VM: LSO & Mono Discover: Strife Onizuka

By passing the key value to a conditional, if it is valid and not a NULL_KEY then it will execute the true branch.

<lsl>integer isKey(key in) {

   if(in) return 2;
   return (in == NULL_KEY);

}</lsl>

Pros

  • Fast
  • Easy
  • Painless

Cons

  • None

Footnotes

  1. ^ Plans for LSL3 are still being worked out, nothing has been finalized, no release date has been set, LSL3 may in-fact never happen.
  2. ^ The LSO LSL compiler does not produce optimized code.