Difference between revisions of "LSL3"
Jump to navigation
Jump to search
(Writing to notecards is beyond the scope of LSL3, LL has stated on many occasions that they will not implement it.) |
Cisco Lane (talk | contribs) |
||
Line 18: | Line 18: | ||
=== Major changes === | === Major changes === | ||
* Object model | * Object model | ||
* Get | * Get rid of get and set functions, use getters and setters instead where possible (syntax sugar). | ||
* Persistent storage/memory | * Persistent storage/memory | ||
=== Syntax === | === Syntax === | ||
* Fix quaternion ordering | * 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 | * Object model for base types | ||
* Array indexer | * Array indexer | ||
Line 47: | Line 49: | ||
* Script libraries that can be sold and passed around. | * Script libraries that can be sold and passed around. | ||
* Natural syntax which can be used instead of link_message | * 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 == | == Flaws with LSL2 == | ||
Line 63: | Line 68: | ||
==='if else' syntax=== | ==='if else' syntax=== | ||
* <code>if([1])</code> evaluates to false. | * <code>if([1])</code> evaluates to false. | ||
=== [[PRIM_ROTATION]] === | |||
* For child prims this requires dividing out the root prims rotation. | |||
=== [[PRIM_ROTATION]] === | === [[PRIM_ROTATION]] === |
Revision as of 06:43, 23 March 2010
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.
PRIM_ROTATION
- For child prims it requires dividing out the root prims rotation.
llInsertString
- Does not support negative indexes.
llDetected* Functions
- Do not support negative indexes.