Difference between revisions of "LSL3"
Jump to navigation
Jump to search
Cisco Lane (talk | contribs) (quaternion powers, prim motion) |
(→PRIM_ROTATION: new flag negates this issue) |
||
(4 intermediate revisions by 3 users not shown) | |||
Line 37: | Line 37: | ||
* pointers | * pointers | ||
* Remove restriction on lists containing lists | * Remove restriction on lists containing lists | ||
* const | |||
=== Functions === | === Functions === | ||
Line 45: | Line 46: | ||
* State variables. | * State variables. | ||
* User defined events that can be triggered by external scripts. | * User defined events that can be triggered by external scripts. | ||
* Functions that are only available to specific states. | |||
=== Libraries === | === Libraries === | ||
* 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 | ||
== Flaws with LSL2 == | == Flaws with LSL2 == | ||
Line 68: | Line 67: | ||
==='if else' syntax=== | ==='if else' syntax=== | ||
* <code>if([1])</code> evaluates to false. | * <code>if([1])</code> evaluates to false. | ||
* <code>if !(STRING)</code> gives syntax error, forcing <code>if (STRING == "")</code> Applies to all types in which ! cannot be put directly in front. | |||
=== [[llInsertString]] === | === [[llInsertString]] === |
Latest revision as of 21:02, 2 December 2012
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
- const
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.
- Functions that are only available to specific states.
Libraries
- 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.
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.if !(STRING)
gives syntax error, forcingif (STRING == "")
Applies to all types in which ! cannot be put directly in front.
llInsertString
- Does not support negative indexes.
llDetected* Functions
- Do not support negative indexes.