24 comments

[ 2.6 ms ] story [ 53.8 ms ] thread
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.
Plus it claims to have the Lua GC perform automatic ObjC refcounting.
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.

Is it using LuaJIT or any another ffi library?
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.

  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().

It's LuaJIT (FFI). Legacy wrappers involve mostly C code and a lot of code managing metatables.
Yes, it does indeed require LuaJIT. (I probably should indicate this more clearly in the source)
Did you try it in vanilla Lua with the FFI port linked in a sibling of your post?
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)

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.

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.

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() ).

Anyone know any real world examples of Lua being used with Objective-C, and what use cases it is good for? Sounds very interesting.