Do everything in Java…

via Digitalmars-d digitalmars-d at puremagic.com
Wed Dec 10 15:01:54 PST 2014


On Wednesday, 10 December 2014 at 22:34:50 UTC, Dicebot wrote:
> Then please show something that actually helps and is 
> applicable to D template system. There is not much value in 
> vague references with "imagine rest yourself" flavor.
>
> To be specific I am interested how would it handle pattern like 
> this (very common for D code and not present in Ada at all 
> AFAIK):
>
> void foo(T)(T t)
> {
>     mixin(generator!T());
> }
>
> What exactly would one put in IR for plain uninstantiated foo?

Maybe you should agree on what a high level IR is first? Here are 
some alternatives:

1. Regular IR: A high level IR basically is a flattened AST where 
you do substitutions, perform partial evaluation and strip out 
symbols. In a high level IR that supports templating you might 
preserve several partial instances using incomplete types. If it 
is non-transformable to begin with… then the compiler won't 
transform it.

2. Search optimizing IR: What the compiler does could be based on 
heuristics and statistical information. Think term rewriting 
systems working on "possible programs" with heuristics as a guide 
so you build up a database of precompiled segments for "possible 
programs" and produce guiding datastructures that speed the 
optimization search. The basic idea being that you spend a lot of 
time precompiling libraries, and cut down on compiling concrete 
instances of programs.

3. Generating IR: The compiler could build JITable compiler code 
for templates, e.g. the templates are stored as a VM program that 
is executed by the compiler and is allowed to make calls into the 
compiler code. Basically "compile-time-functions" with inside 
compiler know-how.


More information about the Digitalmars-d mailing list