Как вы склеиваете Lua с кодом C ++? - PullRequest
12 голосов
/ 19 сентября 2008

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

Для каждого подхода, какие плюсы и минусы?

Ответы [ 4 ]

5 голосов
/ 11 декабря 2008

Я не могу согласиться с тем, что голосование «по своему усмотрению», привязка базовых типов и статических функций Си к Lua, тривиально, да, но картина меняется, как только вы начинаете работать с таблицами и метатаблицами; все очень быстро усложняется.

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

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

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

4 голосов
/ 19 сентября 2008

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

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

1 голос
/ 04 октября 2008

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

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

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

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

1 голос
/ 01 октября 2008

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

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

...