Конференция завершена. Ждем вас на HighLoad++ в следующий раз!

Как (не) выстрелить себе в ногу на Lua Lua @ HighLoad++

Доклад принят в программу конференции
Ярослав Дынников
Tarantool

Раньше разрабатывал бэкенд видеонаблюдения за ЕГЭ и выборами, а сейчас развивает Tarantool Enterprise.

e-mail: yaroslav.dynnikov@tarantool.org
telegram: @y_dynnikov
Тезисы

Lua — простой язык. Базовые вещи можно выучить минут за 20 без преувеличения. Но несмотря на всю свою простоту, Lua всё-таки может преподнести сюрприз неопытному разработчику. А чтобы писать хороший код, хорошо бы понимать, что происходит за кулисами.

Одна из причин простоты языка заключается в том, что в Lua есть всего один композитный тип данных — таблицы. Таблицы призваны подойти для любых целей — их можно использовать и как массив (если ключи целочисленные), и как key-value-хранилище. А еще таблицам присуще свойство undefined behavior — о нем и рассказ:
- Для массивов с "дырками" не определено свойство длины, на результат может влиять внутреннее представление и фаза Луны.
- Добавление новых элементов во время итерирования может нарушить порядок итерации.
- Порядок итерации pairs() не детерминирован даже для массивов.

Доклад полон примеров, отсылкам к стандарту и объяснениями причин. Но даже "опасный" код может работать без сюрпризов, главное — знать, когда на это можно рассчитывать.