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

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

Каковы плюсы и минусы каждого подхода?

Было некоторое обсуждение этой темы здесь.

Mark 19.09.2008 20:16
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
12
1
14 160
4

Ответы 4

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

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

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

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

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

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

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

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

Помимо людей, которые могут использовать компиляторы, которые не могут поддерживать TMP, я не понимаю, почему это было бы неприемлемо. Что касается разработки, то есть некоторые (недавно я внес улучшение / исправление), и в большинстве случаев я не нахожу в нем чего-то слишком важного. Однако это не очень активен, правда.

John Zwinck 24.11.2008 06:08

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

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

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

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

Другие вопросы по теме