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