LUA - это один из популярнейших встраиваемых языков для игр. Используется, в частности, в WOW.
Встраиваемый язык означает, что вы можете использовать луа в качестве языка для триггеров, или других нужд, предполагающих необходимость создания скриптов.
Эрендир писал(а):
первый пример (`sprintf(s, "bar%d", i);`) можно ускорить примерно вдвое, если вместо lua_newtable(L);...
Первый пример наиболее близок к реальности из всех перечисленных, однако, как я уже упоминал, всё-таки в реальности скорее будет что-нибудь типа 5к созданий таблицы с 20 полями. Всё-таки, один объект с 1 млн. полей это абстракция.
Так что выигрыша в производительности тут врядли удастся добиться именно с помощью lua_createtable.
Нет, тут надо по-другому действовать.
Объекты передаются строго определенных типов.
В частности, это мобы, комнаты, и предметы.
Причем, за один раз таблиц каждого вида может передаваться, наверное, не больше трех.
Например, FIGHT-триггер требует self и actor, оба типа "монстр".
С другой стороны, после отрабатывания триггера эти переменные становятся ненужными, а значит, их можно либо совсем удалить из кучи, либо использовать повторно.
Если заранее создать по 3 таблицы каждого возможного типа, сохранить их в некоторых глобальных переменных, и затем, при передаче данных использовать именно эти таблицы, то скорость работы, по всей видимости, должна увеличиться в сотни раз.
Эрендир писал(а):
я всё лелею мечту понемножечку доклепать движок на чистом Луа (+luasocket и т.п., ессно)
Может быть, это и реально, но очень напоминает забивание гвоздей микроскопом - только потому, что микроскоп нравится и с ним привычнее работать:)
Ну в самом деле, язык должен выбираться под нужды. Потому что язык - это инструмент. Хороший, подходящий инструмент увеличивает скорость работы, и качество работы, в разы и даже на порядки.
Ну банальный пример, в луа нет настоящего ООП, это не критично для скриптов, но это критично для большого проекта.
Наследование, инкапсуляция, полиморфизм - всё это помогает и в том, чтобы создать гибкий и легко расширяемый проект.
Строгая типизация (как в С++, С# и java) позволяет отловить многие ошибки на стадии компиляции. На самом деле компиляция - это первый юнит-тест! В луа с типизацией всё намного проще, хотя луа конечно получше в этом плане, чем, к примеру, перл.
Подготовленные и проверенные механизмы для юнит-тестов, руководства, мануалы, библиотеки, комьюнити - во всем этом С++, java и С# тоже выигрывают.
Ну и всякий синтаксический сахар, как например, Linq, Generic'и, перегрузка операторов...
Подумай:) Мад на луа это ж ведь как раз тот самый велосипед с квадратными колесами, который делает сейчас Харч, только в добавок ко всему ты лелеешь этот велосипед собрать при помощи микроскопа
![Smile :)](./images/smilies/icon_e_smile.gif)
Ребяты! Если вам интересно работать над мадом, если у вас есть светлая голова, давайте объединяться.
Да, при этом придется идти на уступки, учиться работать в команде, иногда - делать вещи, которые делать не очень хочется.
Но это полезные навыки, и на работе, и в семейной жизни, и вообще в жизни.
И главное, ведь есть совершенно реальный шанс прочувствовать и увидеть, что результат вашей работы оценен, используется и нравится конечным пользователям...