Подтвердить что ты не робот

Как вы приклеиваете Lua к С++-коду?

Используете ли вы Luabind, toLua ++ или какую-то другую библиотеку (если это так, какой) или вообще ничего?

Для каждого подхода, что такое pro и con?

4b9b3361

Ответ 1

Я не могу согласиться с голосованием 'roll your own', привязка основных типов и статических функций C к Lua тривиальна, да, но картина меняет момент, когда вы начинаете работать со столами и метатегами; вещи становятся сложнее очень быстро.

LuaBind, похоже, выполняет эту работу, но у меня есть философская проблема. Для меня кажется, что если ваши типы уже осложнены тем фактом, что Luabind сильно замаскирован, вы не сможете сделать ваш код более легким, поскольку мой друг сказал: "Вам понадобится Herb Shutter, чтобы разобраться в сообщениях компиляции", Плюс это зависит от Boost, плюс время компиляции получает серьезный удар и т.д.

Попробовав несколько привязок, Tolua ++ кажется лучшим. Толуа, похоже, не очень развит, где, как говорит Толуа ++, хорошо работает (плюс половина учебников "Толуа" есть, по сути, учебные пособия "Tolua ++", поверьте мне об этом:) Толуа действительно порождает право материал, источник может быть изменен и, похоже, имеет дело со сложными случаями (например, шаблоны, союзы, неназванные структуры и т.д. и т.д.).

Самая большая проблема с Tolua ++ - это отсутствие надлежащих обучающих программ, предустановленных проектов Visual Studio или тот факт, что командной строке немного сложно следовать (у вас путь/файлы не могут иметь пробелы в Windows по крайней мере - и так далее) Тем не менее, для меня это победитель.

Ответ 2

Чтобы ответить на мой собственный вопрос частично:

Luabind: как только вы знаете, как связывать методы и классы с помощью этого неудобного синтаксиса шаблона, довольно просто и легко добавить новые привязки. Однако luabind оказывает значительное влияние на производительность и не может использоваться для приложений реального времени. В 5-20 раз больше накладных расходов, чем вызов функций C, которые непосредственно манипулируют стеком.

Ответ 3

Я не использую какую-либо библиотеку. Я использовал SWIG, чтобы выставить библиотеку C некоторое время назад, но было слишком много накладных расходов, и я прекратил использовать его.

Плюсы - это лучшая производительность и больший контроль, но для записи требуется больше времени.

Ответ 4

Использовать необработанный Lua API для ваших привязок - и сохранить их простыми. Возьмите вдохновение в самом API (библиотека AUX) и библиотеках авторов Lua.

С некоторой практикой необработанный API - лучший вариант - максимальная гибкость и минимум ненужных накладных расходов. У вас есть то, что вы хотите, и не больше, как вам это нужно.

Если вы должны связывать большие сторонние библиотеки, используйте автоматические генераторы, такие как tolua, tolua ++ (или даже сворачивайте свои собственные для конкретного случая). Это освободит вас от ручной работы.

Я бы не рекомендовал использовать Luabind. На данный момент это застопорило (однако, начиная возвращаться к жизни), и если вы встретите какой-то угловой случай, вы можете быть сами по себе. Также Luabind активно использует метапрограммирование шаблонов. Это может (и не может) быть неприемлемым в зависимости от точки зрения.