TLC, a tiny lua cocoa bridge(gist.github.com)
gist.github.com
TLC, a tiny lua cocoa bridge
https://gist.github.com/2211379
10 comments
It's moved to https://github.com/aptiva/TLC
That is a spectacular amount of functionality in one small source file. It appears to open all objective C classes and their methods to Lua.
I looked at these comments before the code and assumed it was going to be an ugly first-principals dump of code connecting lua to objc.
What I found instead is beautiful.
What I found instead is beautiful.
Plus it claims to have the Lua GC perform automatic ObjC refcounting.
Is it using LuaJIT or any another ffi library?
James McKaskill ported LuaJIT's FFI to standard (PUC) Lua, but there are a few differences. I don't know for which one it was developed.
https://github.com/jmckaskill/luaffi
https://github.com/jmckaskill/luaffi
Looks like luaJIT: http://luajit.org/ext_ffi_api.html
It's LuaJIT (FFI). Legacy wrappers involve mostly C code and a lot of code managing metatables.
I know exactly zero Lua, but
if ffi == nil then
ffi = require("ffi")
end
is suggestive.There are some idioms in Lua that you might recognize from Python or Ruby. I have seen this one in Perl and the Bourne shell, as well.
If it evaluates to a nil, we initialize it by calling require().
ffi = ffi or require("ffi")
If the ffi expression evaluates to something that is not nil, we keep the previous value of ffi. The assignment becomes a no-op.If it evaluates to a nil, we initialize it by calling require().
Amazing .. off to pack it into an iOS bundle and wire it up to an editor. ;)
Question: how is this different than iPhoneWax?
Well, the biggest difference is that it's written in Lua. And it uses LuaJIT not vanilla Lua. (LuaJIT being orders of magnitude faster)
And from what I can tell, iphonewax is intended for writing entire apps in lua, this project is intended to be used when embedding bits of lua code in your objc app. (But there's nothing stopping you from writing most of your app in it)
And from what I can tell, iphonewax is intended for writing entire apps in lua, this project is intended to be used when embedding bits of lua code in your objc app. (But there's nothing stopping you from writing most of your app in it)
Hmm, this looks very interesting. Could it be used as a scripting layer within a OSX/iOS application or could you whip up a complete application with this ?
It was designed for use for scripting within an objc app. (http://github.com/aptiva/tranquil to be precise)
It doesn't support subclassing objective-c objects so that would probably limit you if you tried to write your app exclusively in lua.
It doesn't support subclassing objective-c objects so that would probably limit you if you tried to write your app exclusively in lua.
Amazing. Can you use this to run a LuaCocoa example? Like https://bitbucket.org/ewing/luacocoa/src/e939d422b62a/LuaCoc...
Can you load a framework with this? I know hardly anything about Objective-C.
Can you load a framework with this? I know hardly anything about Objective-C.
There's no need to load a framework since linking to a framework means all of it's classes are added to the runtime.
You simply request the class you want. That is, if you are embedding lua in your app.
I haven't tried using TLC from the standalone luajit interpreter, but in that case you would probably have to use fii.load() to load the Framework & libobjc before being able to use objc. But that is not what it was designed for
To translate a LuaCocoa example you'd in most cases just have to add objc_loadClass calls for any class you want to use, and use dots instead of colons to call methods (obj:method() -> obj.method() ).
I haven't tried using TLC from the standalone luajit interpreter, but in that case you would probably have to use fii.load() to load the Framework & libobjc before being able to use objc. But that is not what it was designed for
To translate a LuaCocoa example you'd in most cases just have to add objc_loadClass calls for any class you want to use, and use dots instead of colons to call methods (obj:method() -> obj.method() ).
Anyone know any real world examples of Lua being used with Objective-C, and what use cases it is good for? Sounds very interesting.
Take a look at the app that the OP is building. It's pretty interesting and uses this scripting bridge for generating OpenGL visuals. (http://github.com/aptiva/tranquil)
What's the reason to use this over https://bitbucket.org/ewing/luacocoa ?