Ответ 1
Не изобретайте велосипед!
Во-первых, вы правы, что luaobjc и некоторые другие варианты устарели. Хороший обзор можно найти на странице LuaCocoa. LuaCocoa в порядке, но, по-видимому, не поддерживает разработку iPhone, поэтому единственным выбором является Wax. Оба LuaCocoa и Wax являются мостами времени выполнения, что означает, что вы можете (теоретически) получить доступ к каждому классу и методу Objective-C в Lua за счет производительности во время выполнения.
В играх и по моему опыту накладные расходы на производительность настолько значительны, что не требуют использования какой-либо библиотеки привязки во время выполнения. С точки зрения того, почему нужно использовать язык сценариев, обе библиотеки не рекомендуют использовать язык сценариев на языке более низкого уровня: они не предоставляют DSL - это означает, что вы все еще собираетесь писать код по существу Objective-C, но с немного отличающимся синтаксисом, поддержкой отладки во время выполнения и поддержкой редактирования кода в Xcode. Другими словами: привязка Lune во время выполнения является в лучшем случае сомнительным решением, и против нее идет много противников. Runtime Lua привязки особенно непригодны для быстрых игр действий, направленных на постоянно высокую частоту кадров.
То, что вы хотите, - это статическая привязка. Статические привязки как минимум требуют от вас указать, какие методы будут доступны в коде Lua. Некоторые библиотеки привязки просматривают ваши файлы заголовков, другие требуют, чтобы вы предоставили специальный файл декларации, подобный файлу заголовка. Большинство библиотек ссылок могут использовать оба подхода. Преимущество - это оптимальная производительность во время выполнения и возможность реально разрабатывать, какие классы, методы и переменные имеют сценарии Lua.
Есть только 3 кандидата, чтобы связать код Lua с iPhone-приложением. Справедливости ради, их гораздо больше, но большинство из них имеют один или несколько важных недостатков или просто нестабильны или предназначены только для особых целей или просто не работают для приложений iPhone. Кандидаты:
Большой недостаток, который разделяют все статические библиотеки связывания Lua: ни один из них не может напрямую связываться с кодом Objective-C. Все требуют наличия дополнительного уровня C или С++, который в конечном итоге взаимодействует с вашим кодом Objective-C. Это связано с тем, как Objective-C работает как язык и насколько небольшая роль, которую он сыграл (пока), когда дело доходит до встраивания Lua в приложения Objective-C.
Недавно я оценил все три библиотеки привязки и получил удовольствие от SWIG. Это очень хорошо документировано, но имеет немного кривую обучения. Но я считаю, что кривая обучения оправдана, поскольку SWIG может использоваться для объединения практически любого языка программирования и сценариев, может быть полезно знать, как использовать SWIG для будущих проектов. Плюс, как только вы поймете их реализацию файла определения, он окажется очень простым (особенно по сравнению с luabind) и значительно более гибким, чем tolua.