is a lab at PUC-Rio
dedicated to research on programming languages, with emphasis on the Lua language
. Lua is a powerful, fast, lightweight, embeddable scripting language that is used in many industrial applications, and on many embedded systems and games.
We were very happy to participate in Google Summer of Code (GSoC) for the third time, and to mentor eight fine students that all completed their projects successfully. We thank them, and Google, for this extraordinary contribution to our research and development work.
Here is a brief summary of this year's projects:
Next Generation of the LuaRocks test suite - Robert Karasek
is the package manager for Lua modules. Its test suite was implemented as a big shell script that performed only black-box testing
and ran only on Linux. The goal for this project was to port the test suite to Lua, improving its portability and allowing more types of tests so we could improve test coverage.
Robert ported the test suite to Lua using Busted
. His new test suite, now merged into LuaRocks, runs on Linux and Mac OS X
, accessible via Travis CI, as well as Windows
, accessible via AppVeyor.
This was a welcome addition, bringing greater confidence to developers. Robert improved the checks in existing tests and wrote many new ones, including a new mock-server for testing a client API for uploading packages to the repository.
Typed Lua Typechecker - Tomasz Dyczek
provides static type checking for the Lua language. Typed Lua extends the syntax of Lua 5.3 to introduce type annotations, and performs local type inference for more precise detection of unannotated expressions.
Tomasz implemented the core of Typed Lua
. Tomasz's implementation parses code written in a syntax close to the abstract syntax of Typed Lua, then type checks the generated AST
. Besides providing a support for testing and reasoning about new features, Tomasz's typechecker can be also used to validate tests to be included in Typed Lua's test suite.
Kevin worked on the implementation of a class system for Typed Lua
. He also added parametric polymorphism
(generics) for classes and existing Typed Lua types, such as functions and tables.
Kevin's work currently lives in its own branch
, but will be merged into the main branch soon. Meanwhile, Kevin has written a detailed post
explaining all the features he implemented
Improving Error Reporting in PEG Parsers - Matthew Allen Go
is an extension of LPeg
, a pattern matching tool for Lua, based on Parsing Expression Grammars
(PEGs). LPegLabel supports labeled failures, a facility that improves error reporting and recovery for PEG-based parsers.
The goal of this project was to use LPegLabel to write parsers with good error reporting. These parsers could then be used by the Lua community and also serve as a guide for LPegLabel users. Because LPegLabel is a young tool, another important contribution was to improve the tool's usability.
Matthew achieved both goals. He developed a parser for Lua 5.3
, which has been incorporated into the new release of lua-parser
(1.0.0), and improved LPegLabel’s usability with work on its API and documentation.
is a distributed and scalable search engine written in Java that offers a REST API
accessed through JSON
. During GSoC 2015, Dhaval implemented elasticsearch-lua
, a client for the Lua language following a model similar to clients written in Python and PHP.
During GSoC 2016, Dhaval worked on improving elasticsearch-lua. He added a test suite, documented the entire codebase, and updated the current client to work with the newest version of Elasticsearch.
Dhaval went above and beyond, creating a new library called luaver
. This work was motivated by having to frequently switch between different versions of Lua while developing the test suite. A full blog post about his project can be found here
Admin Center and Elasticsearch integration for Sailor - Nikhil Ramesh
Nikhil focused on extending Sailor. The first feature he worked on was an Admin Center, which is a web interface for configuring an application. He also integrated Sailor and elasticsearch-lua, allowing Elasticsearch indexes to be stored as Sailor Models. His work is currently pending as a pull request
and will soon be merged.
Extending the online tutorial of Céu with Emscripten and SDL - Margarit Vicentiu
is a language for developing reactive applications
such as video games and embedded systems. Its compiler generates output in plain C to integrate easily with the underlying platform (e.g. Arduino
). For this project, we wanted to integrate Céu with Emscripten
in order to run applications in a web browser.
Vicentiu started with Céu’s online tutorial, which is a server-side application: the user types code in a text area and hits the send button; the server receives the code, executes it, and sends the output back to the user. During the summer, Vicentiu made most of the examples compile with Emscripten and run in real-time on the user’s screen.
Our next goal is to make the graphical examples with user interactions also work in the browser, and Vicentiu plans to continue contributing to the project to achieve this goal.
An automatic generator of WSDL documents for LuaSOAP - Victor Dias
is a library for working with the Simple Object Access Protocol
is an XML format for describing network services; it is used to describe operations, messages and types offered by Web Services.
This summer Victor extended LuaSOAP's WSDL support by building a software layer for the automatic generation of WSDL documents. This new layer eases the description of most WSDL "bureaucracy" -- types, operations, ports, messages -- which have no counterparts in Lua. He also improved the test suite and the documentation. Victor's work
will be integrated into the next version of LuaSOAP.
By Ana Lúcia de Moura, Organization Administrator for LabLua