lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Roberto Ierusalimschy wrote: > I do not think I am unbiased enough to present the best arguments. I guess we need a (completely biased) Lua PR department then? :-) (no, I'm not volunteering) Ok, here's my list of arguments why Lua would be a good choice for a cell phone VM: - Lua is small: the Lua interpreter easily fits in under 100 kilobytes including the base libraries. Cell phones are often very memory limited -- every kilobyte saved counts. It's practically hopeless to try to strip the non-essential parts from larger runtimes (Python, Java -- you name it) without severely limiting their functionality (J2ME anyone?). And you'll still not be able to match Lua's small footprint. One really cannot afford a "batteries-included" and all-memory-you-can-eat VM on a cell phone. Minimal memory use is important even for smartphones with more generous resource limits. Their CPU caches are usually small and memory access is rather slow compared to desktop CPUs. - Lua is fast: independent benchmarks show that Lua is often amongst the fastest interpreted dynamic languages. The Lua interpreter has been extensively tuned for high performance. The call-out mechanism to C is one of the fastest, too (compare to JNI). It has been shown that Lua can be compiled to machine code with a JIT compiler (x86 only right now) for even better performance at minimal cost (30% larger footprint). Given how underpowered many cell phone CPUs are, this means that Lua could be used to supplant even more tasks usually delegated only to systems programming languages (i.e. C). [Disclaimer: I wrote LuaJIT.] - Extending Lua is easy: Lua has been designed to work together with C. The Lua VM offers a small, yet flexible C API. Binding to C libraries is the forte of Lua. Often enough a few lines suffice. Even beginners can write a binding in minutes without studying huge manuals. There are plenty of automatic binding generators for larger tasks, too. Compared to other language's binding mechanisms, Lua's C API effectively provides a shield between the internals of the Lua VM and the outer world. One does not have to care about internal structures of the Lua VM or even the garbage collector (how many refcounting bugs do your Python bindings have?). - Embedding Lua is easy: the Lua core uses zero static data. All C APIs require a single opaque handle which carries along the complete state of the VM. Memory use is strictly contained. The Lua core does not leak memory. Even custom memory allocation functions can be used. It's easy to use multiple completely independent Lua interpreters in a single process if there should be a need. Lua needs only a handful of ANSI C library functions for operation. And even these can be further reduced. Lua has excellent portability to even the most restricted embedded environments. - Lua has an incremental GC: amongst the options for implementing a garbage collector, an incremental GC is most suitable for embedded devices. It has low latency, no additional memory cost and little implementation complexity. A traditional mark-and-sweep GC may cause lengthy pauses which are incompatible with semi-real-time requirements (imagine: "Please hold the line while we're cleaning up -- beep"). Generational GC has a much higher memory overhead and its heuristic approach to reclamation may hold on to important resources much longer than tolerable in such an environment. [It has been debated at length whether GC is an appropriate mechanism for managing memory in resource constrained devices. But manual memory management is tedious and error-prone. The benefits of GC, coupled with modern languages by far outweigh its disadvantages wrt. average memory use IMHO.] - Lua has coroutines: multitasking is desirable, even on small devices. Too often one encounters annoying limits on cell phones, e.g. one cannot open the calendar or lookup a number in the phonebook while on the phone with someone. But fully preemptive multitasking is either not supported or is considered too costly for these environments. Lua's coroutines provide a fast and memory efficient way for non-preemptive multitasking. Lua's coroutines are built-in and are independent of the capabilities of the underlying OS. Lua even happily runs on devices without an MMU. - Lua can be sandboxed: it's easy to restrict access to library functions on a function-by-function basis. Memory use as well as CPU usage can be restricted, too. This is very important for a cell phone environment. You really want to prevent any random application you've downloaded from blocking the GUI forever or silently making expensive phone calls on your behalf. Removing certain dangerous library functions or (better yet) just offering a handful of "safe" functions for use by user-written applications is easy. It's even possible to manage multiple protection domains with different privilege levels in the same Lua VM. Other VMs provide either no support for sandboxing (short of completely ripping out huge parts of their libraries) or offer only complicated and inflexible protection mechanisms. Lua can be sandboxed _in_ Lua and with standard Lua calls, providing for maximum flexibility at minimum cost. - Lua is malleable: Lua has just enough syntactic sugar and meta-mechanisms to be easily repurposed for domain specific languages (DSL). It's nice for (readable!) configuration files or (say) a GUI layout language. Tasks where you'd otherwise have to design, implement and teach extra languages (hand-written XML anyone?). With Lua you have to put in the effort only once. - Lua is simple, but not simplistic: Lua has a simple, yet powerful syntax which fits on a single page. The semantics are consistent and intuitive. Beginners can start to program right away. Teaching Lua is easy, excellent programming books are available. No huge and expensive IDEs and SDKs are needed, any text editor will do. Lua also has advanced features like closures, coroutines, meta-mechanism and lots of finely tuned details. All of these make it attractive for professional developers, too. But none of these features get in the way of beginners. The WoW Lua add-ons are a good example of the power of an open and collaborative environment. It nicely shows what a huge driving factor user contributed (active) content can be for the success of a project. If you want to quickly gain a huge library of gadgets and add-ons for your cell phone, then Lua is the way to go. You just have to make it easy for them ... Ok, this list is by no means exhaustive. But it's a start. --Mike