дублер каскадера АЛЕКСАНДР ГЛАДЫШ Спецвыпуск: Хакер, номер #071, стр. 071-068-10 Иногда требуется умение загружать и снова сохранять данные, не имея описания их конкретного формата. Как и для XML, для нашего случая такое тоже возможно. Данные достаточно легко переводятся в вид, показанный в листинге 3, если обобщить код листинга 2, используя метаметод __call таблицы глобального окружения для получения имени конкретного ключевого слова. Сохранение загруженных таким образом данных в тот же формат реализуется как достаточно тривиальная процедура кодогенерации с рекурсивным обходом всего дерева элементов. Может быть удобным создание специальной объектной модели для такого дерева. Это должно облегчить написание кода, который будет модифицировать дерево. [заключение.] Предлагаемый подход – не панацея и не полная замена технологий, основанных на XML. Его главный и определяющий недостаток – малая, относительно XML, распространенность применяемых технологий, что влечет за собой недостаток информации по методикам работы, недостаток проработанных библиотек для использования Lua в таком ключе и прочее. Но если в твоем проекте еще не реализована полноценная поддержка технологий XML, применение Lua для хранения данных вполне способно дать определенную выгоду. Потенциальная мощность описанного подхода сравнима с XML. Преимущества такого подхода – наличие «бесплатного» бинарного представления, меньшая избыточность, возможность реализации «самоподнимающихся» данных и так далее. Все это делает его достойным рассмотрения, особенно если ты уже используешь Lua в своем проекте, либо у тебя есть необходимость во встраивании в проект произвольного скриптового языка. С другой стороны, малый, по сравнению с полнофункциональными библиотеками работы с XML, объем и высокая скорость работы виртуальной машины языка Lua может оправдать ее встраивание исключительно с целью использования Lua для хранения данных. WWW.YAML.ORG ТЕХНОЛОГИЯ YAML WWW.JSON.ORG JSON (JAVASCRIPT OB-JECT NOTATION) WWW.PAULT.COM/PAULT/PXML/XMLALTERNATIVES.HTML СПИСОК АЛЬТЕРНАТИВ XML WWW.LUA.ORG ОФИЦИАЛЬНЫЙ САЙТ LUA WWW.LUA.ORG/USES.HTML СПИСОК ПРОЕКТОВ, ИСПОЛЬЗУЮЩИХ LUA Lua Расширяемый скриптовый язык расширений (extensible ex-tension language) с динамической типизацией. Код в статье написан на наиболее свежей версии языка – 5.1, но должен работать и на предыдущей 5.0. Руководство по языку и первое издание книги одного из авторов языка – Роберто Иерусалимского (Roberto Ierusalimschy) «Programming in Lua» — можно найти в электронном виде на официальном сайте www.lua.org. Выгода от применения описываемого в статье подхода удваивается, когда в приложении есть потребность во встроенном скриптовом языке – подключение Lua к коду на C, C++ (а также любом языке, имеющем интерфейс взаимодействия с C – существует, например, интерфейс Lua-Python) достаточно легко осуществимо. При этом, и для хранения данных, и для задания конечной логики приложения используется один и тот же язык, что упрощает процесс освоения системы. Наиболее ярко это проявляется в компьютерных играх. Язык Lua вообще получил наибольшее распространение именно в этой области во многом благодаря своей скорости, мощности, гибкости и легкости подключения к коду приложения. Однако, помимо компьютерных игр, Lua широко используется и в других областях – от средства для профессиональной работы с фотографиями (до 40% кода Adobe Lightroom написано на Lua, labs.adobe.com/technologies/lightroom/) до системы обработки данных о геноме человека, использующей Lua для хранения огромных объемов данных (www.cbrc.jp/~ueno/slides/lua05u3.pdf). Постоянно растущий список проектов, использующих Lua, можно найти на официальном сайте языка — www.lua.org/uses.html. |