Lua в ваших проектах

Привет всем.
Чего-то загрустил и раслабился программерский форум Wink Надо исправлять
Из названия топа видно, что речь я поведу про скрипт-язык Lua.

Пока конкретных вопросов по этой теме я не буду задовать, а просто хочу узнать, если на данном ресурсе, кто прикручивал еже в свои проекты?

P.S. Нахожусь на стадии встраивания lua в движок (как с данным скриптом работать я знаю!). Вопросы будут по архитектуре Smile Будут разные концепции подхода к внедрению. Речь идет о чистом lua, а не о luabind.

Последняя правка: пн, 29/08/2011 - 22:11
Submitted by MaxImuS on

Комментарии

Главная "проблема" Луа -- память. В кавычках, потому что решается своим аллокатором, который легко цепляется; без этого Луа рубит память в мелкую крошку и достаточно быстро.

Другой большой вопрос -- взаимодействие Lua/C++. Всякие luabind'ы часто тянут всякие вещи типа boost'а (который тянуть в движок/игру не очень хочется). В итоге я лично после нескольких попыток остановился на "самодельном" варианте из шаблонов и макросов.

Следущий вопрос -- как работать с движковым/игровым функционалом из скрипта. Т.е. можно в стиле классов или в стиле С. В стиле классов выглядит прикольно но гемору оказалось многовато, в С-стиле попроще и проблем вроде поменьше получается.

Ну и про корутины есть всякие нюансы -- для тех кто доживёт до использования "многопоточных" скриптов Smile

Submitted by BLK Dragon on

ну готов только добавить некоторое к предыдущему оратору Wink

Свой allocator is the must. На этом BLK Dragon не сильно остановился, а я пожалуй остановлюсь. В Lua очень легко (особенно если не думать -- а это модно при использовании скриптовых языков) сделать кучу аллокаций (говорим привет фрагментации и fps drop из-за garbage collect) и кучу ликов.

Свой аллокатор поможет не только локализовать проблемы, но и пошустрее их искать. Плюс -- учить мат часть. В итоге в одном из проектов после недели ковыряния добился того что gc был вообще отключен. Ценой небольшого хацка на выходе\входе в левел -- но всё же малой кровью. Так что память в lua большая, но вполне решаемая проблема.

Про взаимодействие. Всякие luabind и прочее кроме того что тянут всякое, как правило написаны на "плохом" c++ -- по моему именно его собрать так и не удалось программисту который его сильно хотел. Плюс, как всегда, свой велосипед сильно лучше по причине того что в нём ровно то что надо, код его известен и изучен, и его можно вполне ковырять в случае если что-то идет не так \ вы хотите по-другому. Ибо ваши коспромиссы слишком часто отличаются от компромиссов разработчиков библиотек.

Про связку. Сразу, во-первых, отправлю в game programming gems 6 -- там целая статья на тему -- сравниваются разные реализации.

Из своего опыта есть печальный опыт с ООП на lua, когда доблестные программисты решили использовать чей-то модуль, который в итоге на каждый вызов "виртуальной" ф-ии делал порядка 10 тысяч аллокаций. В следующем проекте переписал на классы попроще, механизм потом кое-как допилили и довели до состояния когда память вообще не выделятся (ну кроме создания собственно "объекта"). Так что вполне себе возможно. Но опять же, лично я -- против ООП в луа -- сами по себе принципы всё таблица и функции - first class citizens дают гораздо больше чем чистый ооп. Да и получается красивше.

Submitted by discouraged_one (не проверено) on

Ок Smile Ваши мнения понятный. Хотя в эфире никаких конкретный вопросов от меня не звучало, я получил кое какие разъяснения из ваших высказываний.
Почему я выброл Lua для обсуждения? Не из-за того, что я возвожу данную либу в ранг совершенства, а просто нужно быстро и с тем, что знаешь лучше.
Вообще, я стремлюсь прикрутить скрипты в проект в форме модуля, что бы как в сказке - заменить с малыми жертвами в будущем, на то, что устроит. Но не факт, что сама Lua будет так вреданостна в движке - Wink ведь смотря для каких целей она используется.
А вот мне было бы интересно, кстати, почитать сие произведение - game programming gems. Но я так понял что никто пока не занимался переводом на русский :), а если есть хотя бы eng-вариант, дайте плиз ссылочку.

Submitted by MaxImuS on

GameDev.by