I mentioned previously the introduction of MRM Scripting into OpenSim. You can go read my early introduction into it – since then, I have committed the code into the OpenSim trunk and been improving it a bit, it’s enablable today. As a quick recap – it’s C# (or any .NET language) with a World API that is both simpler, more logical and more powerful than LSL/OSSL.
The first, most obvious, question is why not LSL? The shortest answer is, it’s bad. Linden Lab made a lot of mistakes in LSL – particularly around the destination intended audience. LSL was designed for very simple functionality, and this is evidenced in a number of places; such as lack of library support, minimal memory limits, an API which is internally inconsistent, lack of communication between script instances, etc. One of the reasons for this was Linden Lab envisiged LSL as being tiny little bits of functionality that you added together – so one object would have lots of scripts each doing tiny little things. How it turned out however is just like any other scripting language – people wanted a single script doing all the functionality, and were forced into doing things badly in order to get them working with the concieved limits.
That’s the first big complaint – the API is designed for something its not used for. To a programmer, writing in LSL can be a serious chore.
The second big complaint is that it is designed (not on purpose) to waste serious amounts of programming cycles on simple tasks.
Consider the following task: You want a list of every avatar within the region.
Under LSL your script looks something like the following:


One nit: while calculating a distance requires taking a square route, doing a distance *comparison* doesn’t. Checking if a bunch of points are within 96m of you doesn’t have to involve any square roots at all; you can just compare the sum of the squares of the axial distances to 96 squared. I don’t know if SL does this internally in the implementation of sensors, but if it doesn’t it should…
Dale Innis
9 Apr 09 at 12:20 am
Yeah that is true – I moved our check from Util.GetDistance(x,y) in OpenSim to Util.IsLessThan(amount,x,y). The remainder is however a fairly expensive and unnessecary process.
Adam Frisby
9 Apr 09 at 6:02 am