Задача: я разрабатываю на C++ небольшую компьютерную игрушку, и к ней нужно прикрутить скриптовый язык.
Зачем мне это: упростить написание логики ботов (основная особенность игры - интеллект врагов), дать возможность игрокам модифицировать эту логику.
Среди всех языков большей популярностью пользуются Lua и Python.
Я немного разобрался с Lua (прочитал приличное количество мануалов и написал небольшую игрушку) и сейчас таким же образом разбираюсь с Python.
Пока Python мне нравится больше, но это только первый взгляд.
Меня интересуют, в основном, следующие вопросы:
1. Какого уровня задачи способен решить каждый из этих языков совместно с C++ без использования множества костылей? Сложно ли, например, в Lua или Python использовать объекты созданные в C++?
2. Какие есть подводные камни при работе с данными связками языков, которые вам встречались?
3. Правда ли, что Lua значительно выигрывает Python по скорости? Справедливо ли это при встраивании этих языков в код C++?
Ответы на эти вопросы сложно получить при первом знакомстве с языком, но я считаю, что они достаточно важны.
Хотелось бы услышать, в первую очередь, мнение людей, уже работавших со связкой C++ & Lua или C++ & Python.
Всем спасибо. Пока, остановился на Lua.
Но я думаю что вопрос до конца не закрыт. Мне, и думаю не только мне, было бы полезно услышать новые мнения и дополнения к уже сказанному.
Lua очень любят разработчики игр и думаю это не просто так.
Lua действительно очень быстрый (самый быстрый скриптовый язык)
И существует много документации о использовании в этой связке.
p.s. python тоже хорош, но в данном случае, уступает lua.
lua а именно ее разновидность luajit имеет особенность которая выделяет luajit из всех скриптовых языков, а именно "халявное" взаимодействие с C чз ffi, не надо конвертить Cшные структуры - можно читать напрямую без потерь на конверсию во внутренние типы скриптового языка.
luajit - очень очень быстрый, у меня на части задач он выдает производительность равную C шному коду
Сама по себе lua если выкинуть парсер и как следствие использовать прекомпилированный lua код, очень мало увеличит размер вашего приложения - в случае android не больше чем на 50кб (там правда apk это zip)
Собственно я использую luajit именно по причине ffi
и невероятной скорости.
Недостаток lua - меня коробят конструкции if then end do :-) - но только в эстетическом плане, сам по себе язык очень мощный и имеет все что надо - тупели, клозуры и тп :-)
Python решает практически любые задачи, по отношению к луа там огромнейшее кол-во библиотек и разного рода реализаций, когда Lua сама по себе чистая ВМ с минимальным функционалом (lua pipe, io и тд). Для встраивания лучше использовать Lua, потому что в ней нет ничего лишнего.
У lua есть свои ограничения при работе с вставками в текстовые строки (по крайней мере у 5.1 точно), нет continue (это конечно решаемо но создает некие неудобства), но в общем и цело lua очень быстрый. Я его использую для работы со строками в основном, парсинга и тому подобного. Очень быстрая работа языка невероятно радует+ много хорошей документации.