Как (не) выстрелить себе в ногу на Lua Lua @ HighLoad++
Lua — простой язык. Базовые вещи можно выучить минут за 20 без преувеличения. Но несмотря на всю свою простоту, Lua всё-таки может преподнести сюрприз неопытному разработчику. А чтобы писать хороший код, хорошо бы понимать, что происходит за кулисами.
Одна из причин простоты языка заключается в том, что в Lua есть всего один композитный тип данных — таблицы. Таблицы призваны подойти для любых целей — их можно использовать и как массив (если ключи целочисленные), и как key-value-хранилище. А еще таблицам присуще свойство undefined behavior — о нем и рассказ:
- Для массивов с "дырками" не определено свойство длины, на результат может влиять внутреннее представление и фаза Луны.
- Добавление новых элементов во время итерирования может нарушить порядок итерации.
- Порядок итерации pairs() не детерминирован даже для массивов.
Доклад полон примеров, отсылкам к стандарту и объяснениями причин. Но даже "опасный" код может работать без сюрпризов, главное — знать, когда на это можно рассчитывать.
Начинал с вычислительной гидродинамики, потом разрабатывал видеонаблюдение для ЕГЭ и выборов, а последние годы строит распределенные системы — сначала Tarantool Cartridge, а теперь Picodata.