Fully dynamic d by opDotExp overloading
BCS
none at anon.com
Sun Apr 19 13:33:28 PDT 2009
Hello Yigal,
> On 19/04/2009 01:22, BCS wrote:
>
>> Hello Yigal,
>>
>>> On 18/04/2009 21:16, Andrei Alexandrescu wrote:
>>>
>>>> In the syntax
>>>>
>>>> a.b
>>>>
>>>> how would either of a and b be identified at runtime? I mean, you
>>>> write the code somewhere and it gets compiled. It's not like you're
>>>> reading "a.b" from the console and then call some eval() function
>>>> against them.
>>>>
>>>> Andrei
>>>>
>>> what prevents D from having an eval function?
>>> suppose someone modifies the DMD front-end to compile a string with
>>> the
>>> source code of a function in-memory, than this is processed by
>>> something
>>> based on DDL and what you get is an API call that takes source code
>>> in
>>> a
>>> string and returns a function pointer.
>> Even then it is *still* going to be compile time. Just a compile time
>> running at runtime... Ooohh, my heads's going to start hearing here
>> in a bit.
>>
> No it won't. you will call a standard library API at *runtime* with a
> *runtime* string and get back a pointer to a function that you can
> call.
That is exactly what I was thinking of and something I have wanted for some
time.
But for that to work you need to *compile* the string to a function so there
is still a compile time inside that function call. That library function
you refer to, for the topic at hand, is no different than DMD and the normal
compile process.
To give a concrete example: suppose the eval function was done by copying
the string to a file, tacking in includes as needed, shelling out to DMD
to make a DLL/SO and then loading that file back into the same process. In
that case there would could be a compile time resolution. In what way would
puling the whole thing inside the first process be different?
> in fact Some Lisp compilers implement eval() exactly like that.
The only way I can see that making a difference is if you want that eval
function to be able to take code that calls function that don't exist yet
and I don't even want to think about what it would take to implement that.
> you're thinking in C++ terms. try thinking in Lisp...
(BTW I may have done more Lisp/schema than C++, saying more about by C++
history than anything else.)
More information about the Digitalmars-d
mailing list