1 / 29

Lua and the Web

Lua and the Web. Roberto Ierusalimschy PUC-Rio, Brazil. -- a Lua script color = RED b = button { label = ‘OK’, x = 10, y = 20}. Host Program. Lua Interpreter. What is Lua?. Yet Another Scripting Language an “extension” language implemented as a library in ANSI C. Why Lua?.

jmorphis
Télécharger la présentation

Lua and the Web

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Lua and the Web Roberto Ierusalimschy PUC-Rio, Brazil Lua and the Web

  2. -- a Lua script color = RED b = button { label = ‘OK’, x = 10, y = 20} Host Program Lua Interpreter What is Lua? • Yet Another Scripting Language • an “extension” language • implemented as a library in ANSI C Lua and the Web

  3. Why Lua? • Simple and flexible • “Simple things simple, complex things possible” • Small • Efficient • Portable • Whole library written in ANSI C, compiles the same source code in all platforms • Typical uses: MS-DOS, Windows (3.1, 95, NT), Unix (Linux, Solaris, IRIX, AIX, ULTRIX), Next, OS/2, Mac Lua and the Web

  4. What is CGILua? • a Web development tool for creating dynamic sites • Supports both templates and scripts • templates can embed scripts • scripts can “call” templates • based on Lua for • its scripts • expanding templates • its own configuration Lua and the Web

  5. Why CGILua? • Small • whole distribution (source+binaries) fits in one floppy disk • Simple • smooth learning curve • Portable • runs on Unix and Windows 95-NT • scripts run on any platform without changes • Easily extended with dynamic libraries written in Lua and C Lua and the Web

  6. Where is Lua? • TeCGraf • Lua’s birthplace • partnership between PUC-Rio and Petrobras (the Brazilian Oil Company) • dozens of products developed with Lua, since 1994 • PUC-Rio • many academic projects • used by hundreds of programmers • Intranet developed with CGILua Lua and the Web

  7. Where is Lua? • Inside Brazil • Petrobras, the Brazilian Oil Company • Embratel (the main telecommunication company in Brazil) • many other companies • Outside Brazil • Lua is used in hundreds of projects, both commercial and academic • CGILua still in restricted use • until recently all documentation was in Portuguese Lua and the Web

  8. How is Lua? function fat (n) if n == 0 then return 1 else return n*fat(n-1) end end • Pascal-like Syntax. • Interpreter executes sequence of statements. • function definitions are also statements (see later) • Six types: • numbers, tables, functions, strings, userdata, nil Lua and the Web

  9. Tables • Implement associative arrays: • any value (including functions and other tables) can be used both for indices and values t = {} -- creates an empty table t[1] = "hello" t.x = print -- t.x is sugar for t[‘x’] t.x(t[1]) -- prints ‘hello’ t.next = t -- circular list Lua and the Web

  10. Constructors • Expressions to create and initialize tables • Record style • point={x=10,y=20} • print(point.y) --> 20 • List style • days={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"} • print(days[3]) --> Tue • Mixed style • points={{x=0,y=0}, point; n=2} • print(points[points.n].y) --> 20 Lua and the Web

  11. Constructors calls function “article” • Data description uses: article{ author="F.P.Brooks", title="The Mythical Man-Month", year=1975, } news = { {text = "New version 2.0", date = "21/05/1997"}, {text = "New example", date = "21/05/1997"}, {text = "New version: 2.1",date = "17/06/1997"}, } Lua and the Web

  12. list = {value=v, next=list} value - v next - Tables x Objects • Tables are dynamically created objects. • in the sense of Hoare list old list ... Lua and the Web

  13. function inc (x) return x+1 end inc = function (x) return x+1 end sugar Functions in Lua • First class values • Example: cloning a table t clone = {} foreach(t, function (i,e) clone[i]=e end) Lua and the Web

  14. Upvalues • Mechanism to allow functions to access non-local variables • An upvalue is a variable expression whose value is computed when the enclosing function is instantiated (and not when the function is executed) function add (x) return function (y) return y+%x end end add1 = add(1) print(add1(10)) --> 11 upvalue Lua and the Web

  15. Example: Security • User scripts need a “secure” Lua environment • Security can be set in Lua itself, through redefinition of “dangerous” functions • functions are first-class values!! • With upvalues, the new function still can use the old, unsecure, version to implement its core functionality • Because the old version is kept in the closure of the new version, it is no longer accessible by the script Lua and the Web

  16. Example: Security -- redefines "openfile", to restrict files that -- can be open by a script openfile = function (filename) if is_ok(filename) then %openfile(filename) else error("cannot open "..filename) end end -- at this point, only the new "openfile" is -- visible, but the old function is still -- available inside the new to do the real job Lua and the Web

  17. function a:foo (x) ... end a.foo = function (self,x) ... end sugar sugar a:foo(x) a.foo(a,x) Objects • First class functions + tables = almost OO. • tables can have functions as field values (methods) • Syntactic sugar for defining and calling methods • handles hidden parameter self Lua and the Web

  18. Strings • No size limits, good performance for long strings • common practice to read a whole text file in a single string before processing • Strings can store arbitrary binary data • not ‘\0’ terminated • Usual pattern matching facilities, implemented through a standard library • Pattern substitution can be called with a function to compute the replacement string Lua and the Web

  19. Example: Decoding a URL encoding string • This function is used by CGILua to decode a URL encoding string: • “lua%3Dis+great”  “lua=is great” function unescape (str) str = gsub(str, "+", " ") return gsub(str, "%%(%x%x)", function (x) return strchar(tonumber(x, 16)) end) end Lua and the Web

  20. Example: Decoding URL data • This function collects all pairs <key,value> from a submission into the table cgi: function decode (string) cgi={} gsub(string, "([^&=]*)=([^&=]*)&?", function (key, value) key=unescape(key) value=unescape(value) cgi[key]=value end) end Lua and the Web

  21. CGILua Pages • a page can be created by a script: write("Content-type: text/html\n\n") write("<html>") write("<head><title>Simple page</title></head>") write("<body>") write("<h1>Today's date is: ", date(), "</h1>") write("</body>") write("</html>") Lua and the Web

  22. or it can be a template: <html> <head><title>Simple page</title></head> <body> <h1>Today's date is: $|date()|$ </h1> </body> </html> Lua expression Lua and the Web

  23. Example: echoing • the following script can be used for debugging, to show all data posted by a form: write("Content-type: text/html\n\n") write("<html>") write("<head><title>Your data</title></head>") write("<body><h1>Your data</h1>") write("<table border=1 width=100%>") foreach(cgi, function(key,value) write("<tr><td>", key, "</td>") write("<td>", value, "</td></tr>") end) write("</table></body></html>") Lua and the Web

  24. Example: echoing • The same page can be generated by a template: <html> <head><title>Your data</title></head> <body><h1>Your data</h1> <table border=1 width=100%> <!--$$ LOOP start="key,value=next(cgi,nil)", test="key", action="key,value=next(cgi,key)" $$--> <tr><td> $|key|$ </td> <td> $|value|$ </td></tr> <!--$$ ENDLOOP $$--> </table></body></html> Lua and the Web

  25. Template Preprocessing • Three kinds of marks: • expressions • statements • control fields: loops and conditionals • All marks has a sensible appearance when not preprocessed • statements and control fields handled as comments • expressions appear literally (place-holder) • Templates can be edited like a static page with conventional tools Lua and the Web

  26. Template before preprocessing Template Example <h1>Club member list</h1> <table border=1 width=100%> <tr align=center> <td><strong>First Name</strong></td> <td><strong>Last Name</strong></td> </tr> <!--$$ LOOP start=‘i=1’, test=‘i<=field.n’, action=‘i=i+1’ $$-> <tr><td>$| m[i].firstname |$</td> <td>$| m[i].lastname |$</td> </tr> <!--$$ ENDLOOP $$--> </table> Lua and the Web

  27. Template afterpreprocessing Template Example • Now, suppose table m defined as m = { {firstname='George', lastname='Harrison'}, {firstname='John', lastname='Lennon'}, {firstname='Paul', lastname='McCartney'}, {firstname='Ringo', lastname='Starr'} } Lua and the Web

  28. Extensions • CGILua can include libraries written both in Lua and in C/C++ • e.g. database access, cryptography • Libraries can be loaded dynamically • no need of recompilations/relinks • Loading function can be erased after configuration • enhance security Lua and the Web

  29. Conclusions • Lua and CGILua are smart choices • Small and simple • Flexible • Portable Lua and the Web

More Related