- 1 Purpose
- 2 Design Ideals
- 3 Goal
- 4 Proposed Changes for LSL2
- 5 Flaws with LSL2
- 6 Resources
The purpose of the LSL3 project is to design a new programing language that would replace LSL2 in Second Life.
- It should be designed to enable expression and not hinder expression with complex or over burdensome syntax requirements.
- C style syntax and order of operations
- Type safety
- Strongly Typed
- Address the shortcomings of LSL2 and add new functionality while limiting the increase of language complexity.
- Design LSL3 with Hierarchical Linking in mind
Proposed Changes for LSL2
Here are some proposed changes to LSL2. Please add new changes, if they cannot be summed up in a single sentence please create a subpage to this article and put a link in the appropriate section.
- Object model
- Get rid of get and set functions, use getters and setters instead where possible (syntax sugar).
- Persistent storage/memory
- Fix quaternion ordering
- Provide quaternion-scalar multiplication
- Provide quaternion exponentiation q^a where a is a float. (Useful for interpolating rotations to achieve smoothness)
- Object model for base types
- Array indexer
- continue and break keywords.
- switch statement.
- User defined class & structures
- Duck Typing (LinFu?)
- Anonymous classes?
- bool type
- Remove restriction on lists containing lists
- Organized into static classes?
- Or keep the namespace flat to keep the syntax simple.
States & Events
- State variables.
- User defined events that can be triggered by external scripts.
- Functions that are only available to specific states.
- Script libraries that can be sold and passed around.
- Natural syntax which can be used instead of link_message
Flaws with LSL2
Here is a list of flaws with LSL2 that should be fixed.
- See for a full description of this.
- Given the code
f(a) + g(a), currently
g(a)gets executed before
- Changing this so
f(a)gets executed first should improve performance on Mono.
- Changing this so
Comparisons of lists
- Only length is compared.
- The result of a list equality is the difference of the lengths.
'if else' syntax
if()evaluates to false.
if !(STRING)gives syntax error, forcing
if (STRING == "")Applies to all types in which ! cannot be put directly in front.
- Does not support negative indexes.
- Do not support negative indexes.