Let's stop parser Hell

David Piepgrass qwertie256 at gmail.com
Sat Jul 7 19:17:11 PDT 2012


>> Yeah, with a tree-transforming parser, I imagine the same 
>> thing, except
>> my current [fantasy] is to convert a certain subset of D to 
>> multiple other
>> languages automatically. Then I could write libraries that can 
>> easily be
>> used by an astonishingly large audience. I certainly would 
>> like to see D
>> targetting Android, but that's best done directly from D to 
>> ARM.
>>
> That does sound very cool.  Possibly difficult though, due to 
> having to cater to the lowest-common-denominator in all of your 
> API designs.  No templated functions or ranges in your API, 
> that's for sure.  I'm sure there are some things where this is 
> very doable though; it probably depends on what kind of 
> libraries you are writing.

Well, for templates, in general, it would be necessary to 
instantiate a particular set of templates and explicitly give 
them names in the target language. So for instance, I could 
define a Point!T struct in D, sure, but then I'd have to tell the 
language converter to create target-language specializations: in 
C#, PointD=Point!double, PointI=Point!int, etc. If the target 
were C++, the template could be translated to a C++ template, 
Point<T>, as long as there aren't any "static ifs" or other 
things that can't be translated. Notably, if a template P!T 
depends on another template Q!T, then P!T cannot be translated to 
a C++/C# P<T> unless Q!T was also translated as Q<T>.

Adapting standard libraries could no doubt be a gigantic problem. 
I don't know how to begin to think about doing that.

But for ranges in particular, I think the concept is too 
important to leave out of public interfaces. So I'd port the 
major range data structures to the target languages, most likely 
by hand, so that they could be used by converted code.

> As for D targeting Android, my intent is really to target X 
> where X is any CPU/OS combo you can think of.  I want to be 
> able to get D, the language, not necessarily phobos or other 
> niceties, to work on any platform, and to do so without much 
> work.  Cross-compiling to a new platform that has never been 
> cross-compiled before should require zero coding.

I understand. Conversion to C is an effective last resort. And, 
well, I hear a lot of compilers have even used it as a standard 
practice. I guess you'd be stuck with refcounting, though.

> I think that the D-directly-to-ARM is the current approach for 
> cross-compiling.  I critique it for its underwhelming lack of 
> results.

Yeah. I assume it involves weird object-file formats, calling 
conventions and ABIs. I guess very few want to get involved with 
that stuff, and very few have the slightest clue where to begin, 
myself included.

> (2) suffer from integration problems if you try to compile the 
> expressions in separate files before compiling the rest of the 
> front-end.

Absolutely, I love language-integrated metaprogramming. Without 
it you end up with complicated build environments, and I hate 
those, cuz there isn't a single standard build environment that 
everybody likes. I think people should be able to just load up 
their favorite IDE and add all source files to the project and It 
Just Works. Or on the command line, do dmd *.d or whatever. Oh, 
and the ability to run the same code at meta-compile-time, 
compile-time and run-time, also priceless.


More information about the Digitalmars-d mailing list