Lua Matthew Spain | Kerry Zhao
Agenda Overview of Lua Language Details Application Areas Demo Conclusion
Overview
History Made by Roberto Ierusalimschy, Luiz Henrique de Figueiredo, and Waldemar Celes in 1993 Members of Tecgraf, PUC-Rio in Brazil Brazil had trade barriers making it hard to buy software from abroad
Release Timeline Jul Lua 1.0 Jul Lua 1.1 (first public release), paper Feb Lua 2.1 (first free commercial release) Nov Lua 4.0, no built-in functions Apr Lua 5.0, multithreading, full lexical scoping Dec Lua 5.2, current version
Language Influences Replaces o DEL (data-entry language) o SOL (simple object language) Scheme Modula
Resources code.google.com/p/luaforwindows luadist.org Plugins for most popular IDEs
Language Details
Function High-level scripting language Lightweight - interpreter about 180k Embedded language - C API
Execution Interpreter compiles to bytecode for Lua VM Very fast, usually compiled at run-time Programs can be compiled in advance to skip overhead Portable, builds on anything with a C compiler
Paradigms Multi-paradigm Imperative Functional Not object-oriented, but object-like constructs can be made using tables and metatables
Lexical/Syntactical Fun
Reserved Keywords and break do else elseif end false for function goto if in local nil not or repeat return then true until while
Types nil boolean numbers strings tables functions userdata threads
Control Flow if...then…else…elseif…end for...do...end while…do...end repeat...until
Assignment “multiple” assignment o a, b, c = “this is multiple assignment”, “yep” i.e. a = “this is multiple assignment”, b = “yep”, c = nil o a, b = b, a a and b have swapped values o a = a or b if not a, a = b
Tables EVERYTHING IS A TABLE
Typing and scope Strongly typed Dynamic typing local keyword specifies non-globals Symbol table easily accessible
Special features Metatables Closures Special allowance for object oriented programmers
Metatables None by default, added with setmetatable Metamethods include: o add o sub o mul o div o mod o pow o unm o concat o len o eq o lt o le o index o newindex o call
Closures a function inside of a function inner function has access to local variables of the outside function
Object-oriented Features No classes, only prototypes Syntactic sugar for methods: function table.func(self, args) can be written as table:func(args)
Application Areas
GAMING Notables include World of Warcraft, FarCry, the CryENGINE2, Garry’s Mod, Angry Birds
Application Areas Cont’d IDE’s Operating Systems Plain Text Editors Robotics
Demo
Conclusion
References The Evolution of Lua Programming in Lua, first Edition