LSL3
Revision as of 05:47, 23 March 2010 by Cisco Lane (talk | contribs) (quaternion powers, prim motion)
Purpose
The purpose of the LSL3 project is to design a new programing language that would replace LSL2 in Second Life.
Design Ideals
- 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
Goal
- Address the shortcomings of LSL2 and add new functionality while limiting the increase of language complexity.
- Design LSL3 with Hierarchical Linking in mind MISC-2237
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.
Major changes
- Object model
- Get rid of get and set functions, use getters and setters instead where possible (syntax sugar).
- Persistent storage/memory
Syntax
- 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.
Types
- User defined class & structures
- Duck Typing (LinFu?)
- Anonymous classes?
- bool type
- pointers
- Remove restriction on lists containing lists
Functions
- 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.
Libraries
- Script libraries that can be sold and passed around.
- Natural syntax which can be used instead of link_message
Prim motion
- Provide option for coordinated prim movement in a linked set, rather than child 1 then child 2 then ...
Flaws with LSL2
Here is a list of flaws with LSL2 that should be fixed.
Combining Quaternions
- See SVC-1047 for a full description of this.
Evaluation order
- Given the code
f(a) + g(a)
, currentlyg(a)
gets executed beforef(a)
.- 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([1])
evaluates to false.
PRIM_ROTATION
- For child prims this requires dividing out the root prims rotation.
llInsertString
- Does not support negative indexes.
llDetected* Functions
- Do not support negative indexes.