Revision as of 02:26, 14 February 2011 editWikitanvirBot (talk | contribs)144,145 editsm r2.7.1) (robot Adding: bg:Linden Scripting Language← Previous edit | Revision as of 17:52, 26 February 2011 edit undoRicvelozo (talk | contribs)483 edits →Default LSL scriptNext edit → | ||
Line 29: | Line 29: | ||
The default script, "Hello, Avatar",<ref>http://wiki.secondlife.com/Hello_Avatar</ref> a ] that speaks (streams message to local chat ("heard" (printed) by all viewers (]s) within 20 meters <sup>(3D virtual environment)</sup> of the task)) when the script is first saved, initialized or reset (in this case, since the command is in the default "state", the first to be run on initialization) or 'touched' (a simple user interaction usually initiated using a mouse click), looks like: | The default script, "Hello, Avatar",<ref>http://wiki.secondlife.com/Hello_Avatar</ref> a ] that speaks (streams message to local chat ("heard" (printed) by all viewers (]s) within 20 meters <sup>(3D virtual environment)</sup> of the task)) when the script is first saved, initialized or reset (in this case, since the command is in the default "state", the first to be run on initialization) or 'touched' (a simple user interaction usually initiated using a mouse click), looks like: | ||
<source lang="lsl2"> | |||
<span style='color:darkred'>default</span> | |||
default | |||
<span style='color:black'>{</span> | |||
{ | |||
<span style='color:darkblue'>state_entry</span><span style='color:black'>()</span> | |||
state_entry() | |||
<span style='color:black'>{</span> | |||
{ | |||
<span style='color:darkred'>llSay</span><span style='color:black'>(</span><span style='color:black'>0</span>, "<span style='color:green'>Hello, Avatar!</span>"<span style='color:black'>)</span>; | |||
llSay(0, "Hello, Avatar!"); | |||
<span style='color:black'>}</span> | |||
} | |||
<span style='color:black'> </span> | |||
<span style='color:darkblue'>touch_start</span><span style='color:black'>(</span><span style='color:green'>integer</span> <span style='color:black'>total_number)</span> | |||
touch_start(integer total_number) | |||
<span style='color:black'>{</span> | |||
{ | |||
<span style='color:darkred'>llSay</span><span style='color:black'>(</span><span style='color:black'>0</span>, "<span style='color:green'>Touched.</span>"<span style='color:black'>)</span>; | |||
llSay(0, "Touched."); | |||
<span style='color:black'>}</span> | |||
} | |||
<span style='color:black'>}</span> | |||
} | |||
</source> | |||
==Mono== | ==Mono== |
Revision as of 17:52, 26 February 2011
Linden Scripting Language, or LSL, is the programming language used by residents of Second Life, a virtual world by Linden Lab. LSL scripts can control the behavior of in-world objects. LSL has a syntax similar to C. LSL allows objects to interact with the Second Life world and the Internet via email, XML-RPC, and most recently, HTTP requests.
LSL design
Linden Scripting Language is a state-event driven scripting language, in the sense of a finite state machine. A script consists of variables, function definitions, and one or more named states. Each state contains a description of how to react to events which occur while the program is within that state. The system sends events to the script, such as timers, movement, chat (from other agents), email, and collisions (with objects in the virtual world). Scripts can change most aspects of the state of the object and communicate with other objects and agents. As soon as a script is added to an object, and turned on, it begins to execute.
A script is tightly bound to the concept of virtual-world objects (in the 3D modeling sense rather than in the object-oriented sense). An object in Second Life represents something like a chair or a wall, or possibly something invisible. Multiple scripts may be placed inside an object, where they all execute simultaneously.
There are over 300 library functions available. Users can also define additional functions. LSL is a strongly typed language that is compiled to bytecode before runtime execution in a virtual machine on one of Linden Lab's servers.
LSL's native data structures includes integers, floating point numbers, strings, keys(UUID),vectors(used for 3D coordinates and RGB color expression), and rotations (quaternions). There are also heterogeneous lists. There are no arrays; multiple list functions are used to adapt programs requiring array structures. There is no built-in persistent data storage, such as a file or database. On the other hand, scripts continue to run even when a user is not logged in, and if an object is saved (taken into inventory), and then re-introduced into the world later, it still maintains its previous state. In addition, the mechanisms for communicating via HTTP can be used to store a state externally.
Some functions in LSL have built-in delays, which range from a 0.1-second delay when (for example) requesting string data from a notecard ; to a 20-second script pause after sending an e-mail message. The delays help prevent developers from writing LSL scripts that could overtax system resources. Memory available to LSL scripts (when compiled as mono) is capped at about 64 KiB, which places a practical limit on how much a single script can do, however the ability to use multiple scripts and to call scripts from another script allows the user to pragmatically work around this 64 KiB cap.
Permission system
Certain actions in LSL require permissions:
- take money from agent's account
- take agent's controls
- start or stop Animations on agent
- attach/detach from agent
- change links
- track the agent's camera position and rotation
- control the agent's camera
The permission system, however, is an issue for scripts owned by the land owner: those scripts can modify the parcel settings without requiring permissions. A malicious script can unsit avatars, ban and unban avatars, destroy the terrain which includes returning of objects by letting them fall out of the world, and gather the ip addresses of avatars by manipulating the media settings for that avatar.
Default LSL script
The default script, "Hello, Avatar", a hello world program that speaks (streams message to local chat ("heard" (printed) by all viewers (clients) within 20 meters of the task)) when the script is first saved, initialized or reset (in this case, since the command is in the default "state", the first to be run on initialization) or 'touched' (a simple user interaction usually initiated using a mouse click), looks like:
default { state_entry() { llSay(0, "Hello, Avatar!"); } touch_start(integer total_number) { llSay(0, "Touched."); } }
Mono
The revised version of Second Life's scripting virtual machine is based on Mono (the open source implementation of the Microsoft.NET framework). While there were rumors of using Mono as a replacement for LL's homegrown VM going as far back as 2005 there was little evidence to support these rumors. It was originally scheduled for release in the first quarter of 2006, but had been pushed back almost indefinitely due to technical challenges and missing functionality in Mono. Linden Lab continued to work on integrating Mono as evidenced by demonstrations presented at Microsoft. On 29 January 2008, Linden Lab released the Mono VM to several sims on the Second Life Beta grid, for compatibility testing with the wide range of existing LSL code. On 20 August 2008, Linden Lab started deploying the Mono VM on several sims on the Second Life production grid. On 29 August 2008, the entire production grid was updated to use the Mono VM.
While the LSL scripting language remained the same, scripts executed on the Mono underpinnings were up to 220 times faster in execution but at the cost of a somewhat higher overhead when creating (rezzing) scripted objects and moving them from simulator to simulator.
External links
- LSL forum—Second Life LSL forum
- LSL Wiki—A community effort to supplement the available LSL documentation
- LSL Portal—A new Wiki hosted by Second Life
- Mono for Second Life – Information regarding the move to Mono
- Linden Scripting Language Problems Criticism by Xah Lee
- Linden Scripting Language Script Repository - Anyone can edit and contribute scripts.
Notes
- http://wiki.secondlife.com/Help:Getting_started_with_LSL#What_is_LSL.3F
- http://wiki.secondlife.com/Category:LSL_Events
- http://wiki.secondlife.com/Category:LSL_Functions
- http://wiki.secondlife.com/Category:LSL_Types
- http://wiki.secondlife.com/Category:LSL_Integer
- http://wiki.secondlife.com/Category:LSL_Float
- http://wiki.secondlife.com/Category:LSL_String
- http://wiki.secondlife.com/Category:LSL_Key
- http://wiki.secondlife.com/Category:LSL_Vector
- http://wiki.secondlife.com/Category:LSL_Rotation
- http://wiki.secondlife.com/List
- https://wiki.secondlife.com/Category:LSL_Notecard An in-world data storage medium mainly used for text.
- http://wiki.secondlife.com/Hello_Avatar
- http://blog.secondlife.com/2008/08/20/mono-launch/
- https://jira.secondlife.com/browse/SVC-1341
- http://jira.secondlife.com/browse/SVC-3895
Second Life | |
---|---|
Culture | |
Events and communities | |
Software | |
Related |
Vector graphics markup languages and file formats | |||||
---|---|---|---|---|---|
By type |
| ||||
See also |