lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


On 26 August 2015 at 16:27, Soni L. <fakedme@gmail.com> wrote:
>
>
> On 26/08/15 04:24 PM, Dirk Laurie wrote:
>>
>> 2015-08-24 18:07 GMT+02:00 steve donovan <steve.j.donovan@gmail.com>:
>>>
>>> On Fri, Aug 21, 2015 at 4:04 PM, Coda Highland <chighland@gmail.com>
>>> wrote:
>>>>
>>>> I think C++11's way of defining new literals is pretty reasonable. You
>>>> define a suffix operator (which must start with _) and when literals
>>>> appear with that suffix, it's translated at compile time (in Lua's
>>>> case, bytecode generation time) to a call to that function
>>>
>>> But (and this is crucial) any resulting object creation is not hoisted
>>> out. For instance, in languages with regexp literals /.../, the
>>> literal is replaced with a reference to a compiled regexp object.
>>> They effectively become constants.  If I see a 'date literal' like
>>> D'2015-08-24' in Lua I know that this string will be parsed _each
>>> time_ - it isn't really a literal.
>>>
>>> Code generation for true custom literals would get pretty involved.  I
>>> don't think the prettiness is worth the bother.
>>
>> Not at all, assuming that Roberto's suggestion of per-value
>> metatables gets implemented. A user-defined literal would
>> be implemented as a string with a metatable. It could work
>> this way:
>
> I'd rather have multiple levels of metatables.
>
> Value level
> Scope level
> Function level
> Module level
> Global level
>
> Including for tables so that you can t = {} t:insert(v) and it just works.

...until you do something like

   users[name] = data

where name happens to be "insert"...

-- Hisham