The non allocating D subset

adam d ruppe anhttp
Sun Jun 9 03:42:53 PDT 2013


On Sunday, 9 June 2013 at 10:41:16 UTC, dam wrote:
> On Saturday, 1 June 2013 at 20:20:56 UTC, Adam D. Ruppe wrote:
>> So I'm still playing with this and just realized the TypeInfos 
>> that are manually written in the real druntime could just as 
>> easily be auto-generated.
>>
>> mixin(makeTypeInfo!(char[], ... more types as needed ... )());
>>
>> private string makeTypeInfo(T...)() {
>>        if(__ctfe) { // this is here so we don't have runtime 
>> requirements of array append, etc, but can still use them in 
>> ctfe
>>
>>        string code;
>>        foreach(t; T) {
>>                code ~= "class TypeInfo_" ~ t.mangleof ~ " : 
>> TypeInfo {
>>                        override string toString() const { 
>> return \""~t.stringof~"\"; }
>>                }";
>>        }
>>        return code;
>>
>>        } else assert(0);
>> }
>>
>>
>>
>> and so on for the other typeinfo methods. Or we could just 
>> copy/paste the typeinfos Walter wrote in the real druntime but 
>> meh.
>>
>> What I'm actually doing with most these is this:
>>
>> class TypeInfo_A : TypeInfo {}
>> class TypeInfo_i : TypeInfo {}
>> [etc...]
>>
>>
>> So they are pretty much useless at runtime, but the compiler 
>> often outputs references to them, so if we don't have the 
>> definition, it won't actually link.
>>
>>
>> But just thinking about runtime reflection, if we wanted to 
>> expand it, I say this is the way to go. Literally build the 
>> runtime code out of the compile time information.
>>
>> Currently, you can't do something like 
>> typeid(int).isIntegral(). There is no isIntegral function, and 
>> adding it means doing a lot of boring manual stuff to add.
>>
>> But with the mixin, we can just throw it in with three lines 
>> and be done with it.
>>
>>
>> I might actually do that here, just because I can. On a 
>> -version switch, of course, so you can easily opt out of the 
>> fat implementation.



More information about the Digitalmars-d mailing list