<br><br><div class="gmail_quote">On Wed, Feb 27, 2013 at 6:37 PM, Andrei Alexandrescu <span dir="ltr"><<a href="mailto:SeeWebsiteForEmail@erdani.org" target="_blank">SeeWebsiteForEmail@erdani.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello,<br>
<br>
<br>
Walter and I have had a long conversation about the next radical thing to do to improve D's standing. Like others in this community, we believe it's a good time to consider bootstrapping the compiler. Having the D compiler written in D has quite a few advantages, among which taking advantages of D's features and having a large codebase that would be its own test harness.<br>

<br>
By this we'd like to initiate a dialog about how this large project can be initiated and driven through completion. Our initial basic ideas are:<br>
<br>
1. Implement the dtoh standalone program that takes a D module and generates its corresponding C++ header.<br>
<br>
2. Use dtoh to initiate and conduct an incremental port of the compiler. At given points throughout the code D code will coexist and link with C++ code.<br>
<br>
3. At a point in the future the last C++ module will be replaced with a D module. Going forward there will be no more need for a C++ compiler to build the compiler (except as a bootstrapping test).<br>
<br>
It is essential that we get support from the larger community for this. This is a large project that should enjoy strong leadership apart from Walter himself (as he is busy with dynamic library support which is strategic) and robust participation from many of us.<br>

<br>
Please chime in with ideas on how to make this happen.<br>
<br>
<br>
Thanks,<br>
<br>
Andrei<br>
</blockquote></div><br>Having ported Boost.units to D, I can attest to this being a lot of work.  I did try translating first and then refactoring the code, but that did not go well, mainly because of all the tricks and hacks employed when doing template meta-programming in C++ that did not translate well at all to D.  With my first attempt I pretty much ended up with C++ code that was written in D, and that's not what I wanted.  So I had to start over, refactoring and writing D code in D as I went.  The problem with refactoring is that once you refactor a piece, chances are that you will need to refactor everything that depends on the code that was refactored, and that starts a domino effect.<br>
<br>Of course, things are different with DMD, so translating first and then refactoring is probably the right way to do it. But, I don't see how we could use D's nice features without refactoring.  So, I presume this is going to be done in two phases:<br>
<br>Phase 1: direct translation to make sure everything works.<br>Phase 2: refactoring to use D's nice features.<br><br>And your three steps would be describing Phase 1.<br><br><br>Arlen<br>