GSOC - Holiday Edition

Mike via Digitalmars-d digitalmars-d at puremagic.com
Sat Jan 3 19:50:06 PST 2015


On Saturday, 3 January 2015 at 14:14:42 UTC, Adam D. Ruppe wrote:

>
> What changes did you have in mind? When I played with it, it 
> was mostly using the C-like subset, but I still think it was 
> worth it because bits like operator overloading and slicing are 
> really convenient.
>
> What I've wanted before is better ability to remove dependency 
> on stuff like moduleinfo. Though that isn't a big deal on 
> something like x86 where an extra 30 KB is fine, I think it 
> would be really important on something like a arduino. (Which I 
> intend to play with - finally have one here - but haven't 
> gotten around to yet.)

Indeed, by using a C-like subset of D you have a much more 
powerful and convenient language than C.  But the compiler is not 
aware of that subset, so it's not a professional experience.  
That's why it plays second fiddle to C.  I need that polished 
experience before I can sell D to my employer, my customers, or 
even myself.

Right now if you step outside of the aforementioned subset, 
you'll only get a linker error.  Furthermore, you have limited 
facilities outside of hacks and creative linker scripting to 
reign in code generation.  And programmers have to create their 
own port of the runtime to provide that subset, but there is no 
hope in that port every making it upstream, so 
bare-metal/embedded/kernel programmers will always be forced to 
their own corner of the world, with a different dialect of the 
language.

There have been suggestions to create compiler flag in order 
restrict compilation to a minimal subset of D, but I don't think 
that's the right solution.  Programmers will define "minimal" 
differently. For example, I would like to be able to use 
exceptions, but I don't want that to implicitly require the 
garbage collector.  A better approach would be to modularize the 
language so users can start with something very minimal and add 
features (rather than remove features) to scale the language to 
their needs.

Here are some of the changes I had in mind:

1.  Move the runtime hook definitions out of the compiler to .di 
files so programmers wanting to create a subset of the language 
can decorate those definitions, or omit them, in order to get 
compiler errors instead of linker errors when they explicitly or 
implicitly use an unimplemented language feature.

2.  Add toolchain support (compiler and especially linker) to 
reign in all the implicit code generation and remove dead code.  
This is crucial for microcontroller programming.

3. The GC, and other automatic memory management strategies, 
should be opt-in library features, instead of default language 
features one has to avoid.  Other emerging languages have shown 
that D can have much more elegant lifetime management if it broke 
with the past, but it's clear that's not going to happen.

4. But it's not just a laundry list of individual features that's 
needed.  The community and the language leaders need a change in 
perspective.  Even if the above were addressed, a port (or 
potentially ports) of the runtime would still be required.  But, 
the current runtime is designed in such a way that it implicitly 
expects an underlying operating system.  I don't think that's a 
characteristic of a systems programming language.  All the 
platform-specific code and language features that are provided by 
the OS need to be moved to libraries and encapsulated.  I would 
like to see "language", "library", and "platform" clearly 
separated so the language can be modularized and we can choose 
what features of the language to support in our ports.  
Unfortunately, this has proven to be very unpopular in this 
community.

I've tried a few things, but it's clear I need to learn the 
compiler in order to do anything significant, and that's not 
really within my interest or ability.  Furthermore, the 
controversy surrounding some of my most trivial ideas has left me 
feeling that even if I rolled up my sleeves and implemented a few 
things, it would be such an uphill battle justifying it to this 
community that my time would be far better spent studying 
compiler implementation and going my own way.

Again, using D for bare-metal/embedded/kernel programming shows 
huge potential as you know, but it's currently not a professional 
experience, and getting it there would be a difficult, 
frustrating, and likely doomed experience.  I think users serious 
about using D for such programming should fork and go their own 
way, or start over with D as an inspiration...and that would be a 
good GSOC bare-metal project.

Mike


More information about the Digitalmars-d mailing list