21 нояб. 2009 г.

luabins

К вопросу о неанонсированных релизах. :-) Обнаружил, что ещё ничего не писал здесь про luabins.

Luabins — библиотека для бинарной сериализации луашных данных.
Лицензия: MIT.
Текущая версия: 0.1.1 (архив).

С библиотекой можно работать как из Луа, так и напрямую из C/C++.

Основное назначение luabins — сериализация данных для Lua-to-Lua RPC вызовов. При этом библиотека отлично подходит и для хранения простых данных.

Luabins поддерживает примитивные типы: nil, boolean, number и string. Поддерживаются нерекурсивные таблицы разумной вложенности (250 уровней по умолчанию, настраиваемо).

Luabins намеренно не поддерживает рекурсивные таблицы, функции, корутины и userdata. (Если нужна сериализация этих типов — вам к Pluto.)

Наивный пример работы на Lua:
Работа через luabins существенно быстрее чем сохранение и загрузка данных через луашный код в духе tstr и tserialize.

Размер сохранённых данных обычно больше, чем при сохранении в луашный код. (В основном из-за представления целых чисел в виде double; это та же проблема, что и при компиляции луашных исходников в байт-код.) В следующих версиях запланированы оптимизации на эту тему.

Luabins намеренно не сохраняет и не проверяет никакую мета-информацию о данных (включая версию формата!). Если нужно, эту информацию нужно подклеивать к данным руками.

Luabins пытается защищаться от враждебных (или просто неверных) данных при загрузке. Делаются проверки на переполнение и на переаллокацию.

На данный момент Luabins используется в нескольких коммерческих проектах.

Дополнительное чтение:

2 комментария:

Илья Разинков комментирует...

а еще есть protocol buffers! :)

Александр Гладыш комментирует...

Вот когда Google Protocol Buffers начнут нативно поддерживать Lua, тогда и поговорим.

И, вообще, одно другому не мешает.