As announced in the previous post, on March 3 (the first Sunday of March) Mail.ru Group’s Moscow office will be hosting the third international Lua conference, Lua in Moscow 2019. See schedule details under the cut.

The conference will include two parallel tracks: talks and workshops.

All talks and workshops will be delivered in English, without simultaneous interpretation into Russian.


Talks (conference room #1)



image 10:30 Badge pickup

11:00 — 11:45 «Why (and why not) Lua», Roberto Ierusalimschy, PUC-Rio

The design of a programming language, as that of any other artifact, entails many tradeoffs involving conflicting requirements. Different languages solve these tradeoffs in different ways, making each more appropriate for some scenarios and less attractive for other settings.

Lua has its own set of goals, which guides its design. This set prioritizes embeddability, small size, simplicity, and portability. (There are other goals, too, such as performance and ease of use by non-professional programmers.)

In this talk, we will discuss the impact of this set of goals. We will see how these goals impact the language itself, how it impacts its uses, and how it impacts its suitability for different application domains.


12:00 — 12:45 «resty-threadpool: reinventing Apache in nginx», Julien Desgats, CloudFlare

Asynchronous event loops are a proven way to scale network servers, nginx (among many other successful products) use this technique at its core. However its performance depends on a key assumption: the business logic must not run for too long, otherwise the overall performance collapses quickly.

At Cloudflare, we rely heavily on OpenResty (nginx+Lua+libraries) for our edge servers and ensuring a predictable performance is critical. Offloading some complex parts of the processing outside of the event loop is therefore necessary and was usually done by writing microservices. We tried another approach leveraging the nginx thread pool feature. In this talk I will go in detail about the the challenges and results of taking core security features out of the event loop.


13:00 — 14:00 Lunch

14:00 — 14:45 «Tarantool team’s experience with Lua developer tools», Yaroslav Dynnikov, Mail.ru Group

Every programming language has its own ecosystem, which is important for community wellbeing. Application development is not only about writing the code, but also about testing it, optimizing and sharing with others. Here in Tarantool we have many developers, who interact with Lua full-time.

I’m going to discuss different aspects of Lua development in our environment:

  • How we write code comfortably with linting.
  • What tools we use for debugging and testing.
  • How we manage documentation and packaging conveniently.
  • And, more importantly, what features we lack.


15:00 — 15:45 «Shaders and Lua», Sergey Lerg, Spiral Code Studio

It's not possible to write shaders in Lua, but it's possible to control them with Lua. I want to demonstrate how easy it is to make beautiful effects with the power of GLSL and Lua. Additionally I will provide useful tips and tricks of working with shaders in the Defold game engine.


15:45 — 16:15 Coffee break

16:15 — 17:00 «Intro to dynasm from luajit», Michael Filonenko, Mail.ru Group

Dynasm is a machine code generator for several architectures (x86, x86_64, etc). It contains two parts:

  • machine code generator written in C,
  • and assembler preprocessor in Lua.

The original preprocessor works only with C/Assembler sources. And there is a fork by luapower which can preprocess Lua files with Assembler code generators. There is a case when we want to use logic from user input. Let's research this toolset and make a simple s-expression compiler.

The main question is «How comfortable it is to make a compiler for user input».


17:15 — 18:00 «Challenges of ‘pairs’ and ‘next’ JIT compilation», Maxim Bolshov, IPONWEB

In IPONWEB, we have our own Lua implementation. It was forked from LuaJIT 2.0 and so inherited all its limitations. In particular, pairs and next functions were not supported by JIT compiler. However, on our Lua codebase this is a top-3 reason of trace compilation aborts, which imposes some trade-offs between code style and application performance. In this talk I am going to:

  • discuss what it means to make library function call JITable;
  • explain implementation specifics of pairs and next in LuaJIT;
  • tell about JIT limitations which makes pairs and next compilation a not so trivial task;
  • demonstrate our progress in solving this task.


18:15 — 19:00 «Garbage collection in Lua», Roberto Ierusalimschy, PUC-Rio

A bonus talk by Roberto.


19:15 — 20:00 Round table with all speakers

Workshops (cinema hall)



14:00 — 15:45 «Tarantool use cases for rich applications», Mons Anderson, Mail.ru Group

At first look, Tarantool is a database. And it's rather hard to see the whole potential of this product as an application server.

I will help you unlock this potential: how to use the built-in LuaJIT server with sockets, fibers, channels, ffi and many more. How to make code reloadable on the fly. These topics will be discussed step by step on the example of building the queue server as a sample application.

16:15 — 18:15 «Making a simple platformer with Defold», Sergey Lerg, Spiral Code Studio

Platformers are a very popular game genre, some are simple, some are rather complex. In this workshop I will demonstrate how to make a basic platformer with the Defold game engine. Most tutorials on this topic tend to oversimplify things with handcrafted levels when they can be generated and with the usage of a physics engine when it's completely unnecessary.

Admission is free, but don’t forget to get registered.

Location: Mail.ru Group office, Moscow, Leningradsky prospekt 39, bld. 79.

We look forward to meeting you at Lua in Moscow 2019!

Комментарии (1)


  1. lenkis Автор
    03.03.2019 11:42

    youtu.be/P6RTYhYRetA

    Live from Lua in Moscow 2019 conference. Roberto Ierusalimschy speaking now.