[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Lua C API can't be used from other languages without C wrappers
- From: Russell Haley <russ.haley@...>
- Date: Thu, 22 Feb 2018 00:33:48 -0800
On Wed, Feb 21, 2018 at 9:49 AM, ThePhD <jm3689@columbia.edu> wrote:
>> This was hammered home for me when I watched ThePhD's Lua Workshop
> presentation on sol2 and how clean and beautiful it is; but it took a
> DOCTOR to put that together.
SUPER embarrassed. Sorry everyone. :(
> (Sorry for the extra post, but I just saw that!) I really need to change my
> online handle at some point. I'm not a Doctor! (Yet). And, when I started my
> education it wasn't even in Computer Science. What I accomplished with sol2
> was a lot of hard work and took a lot of different opinions and ideas to
> formulate. Plus, the ground has been well-trodden before: there's well over
> 2 dozen C API bindings with many of them trying different ideas. That's a
> lot of prior knowledge, which helps you design better because you can see
> what did/doesn't work. There were 3 versions of PiL available by the time I
> got serious with sol2, too. sol2 brings some novel ideas, but at the end of
> the day I'm still standing on the shoulders of giants.
I was only trying to support a prior comment about the complexity of
dealing with errors and stacks. The Phantom Derpstrom (who happens to
be employed at a University?) has clearly spent a great deal of time
and energy creating sol2, as have all the others. Integrating Lua in C
or anywhere else is not something I feel I can just go and start
mucking with. Mortals like myself really need the secondary libraries
that to make Lua usable. Luafilesystem, libreadline, sol2 aren't
optional for me.
Anyways, I'll shut up now. :)
Russ
>
>
> On Wed, Feb 21, 2018 at 12:06 PM, Andrew Gierth
> <andrew@tao11.riddles.org.uk> wrote:
>>
>> >>>>> "albertmcchan" == albertmcchan <albertmcchan@yahoo.com> writes:
>>
>> albertmcchan> Thanks Andrew,
>> albertmcchan> Can I assume call B with argument "foo!", "whatever" like
>> albertmcchan> this ?
>>
>> Of course you can, but you had a -1 there where you probably meant -2:
>>
>> lua_pushcfunction(L, B); // stack = foo! B
>> // -1 here is B as a function
>> // value, -2 is "foo!"
>> lua_pushvalue(L, -2); // stack = foo! B foo!
>> lua_pushstring(L, "whatever");
>> lua_call(L, 2, 1); // == lua call B("foo!", "whatever")
>> return 2; // stack = foo! foo!, thus return
>> everything
>>
>> I sometimes find it more convenient to do this:
>>
>> /* set up the arguments to B: */
>> lua_pushvalue(L, -1);
>> lua_pushstring(L, "whatever");
>> /* insert B below its arguments on stack: */
>> lua_pushcfunction(L, B);
>> lua_insert(L, -3); /* -(nargs+1) */
>> lua_call(L, 2, 1);
>>
>> This is especially handy if you have the args on stack already and don't
>> need them afterwards. You can also wrap the pushcfunction/insert/call in
>> your own convenience function too.
>>
>> --
>> Andrew.
>>
>