[Date Prev][Date Next][Thread Prev][Thread Next]
- Subject: Re: Is the registry needed?
- From: Tim Hill <drtimhill@...>
- Date: Wed, 30 Sep 2015 11:52:05 -0700
> On Sep 30, 2015, at 11:05 AM, Soni L. <email@example.com> wrote:
> On 30/09/15 03:04 PM, Sean Conner wrote:
>> It was thus said that the Great Soni L. once stated:
>>> On 30/09/15 01:34 PM, Luiz Henrique de Figueiredo wrote:
>>>>> If Lua doesn't need a registry then neither does C.
>>>> That's not true. Lua is an embedded language and C code may need to
>>>> store things in a Lua state that Lua scripts cannot have access to
>>>> because of security. Not everything that can be done to Lua in C should
>>>> be exposed to Lua scripts.
>>> function f()
>>> local i = 3
>>> return function() print(i) end
>>> Does another script have access to i?
>> Only if the debug module is available. But then again, if the debug
>> module is available, so is the registry.
> Precisely. The registry is useless.
It may be useless to YOU, but it’s very useful to others. We have several major applications which would be enormously hard to realize without it.
Example: You call a C API, passing it an argument (Lua value) which you want to later re-surface (as a passed argument) when a different C API calls a Lua function. We do this all the time in several of our apps.
Question: In C code, where do you store that argument so that you can later pass it back to Lua? Sure, if it’s a number or a string, you can allocate memory and store it on the C heap. What if its a table? Or a coroutine? Where does the C code store it, if not in the registry? (And no, you can’t put it in an upvalue.)
Declaring something as “useless” because you personally cannot see a use for it is saying “I can’t see a use for it so there isn’t one”, which seems to me somewhat arrogant.