"Better C" runtime?
Mike via Digitalmars-d
digitalmars-d at puremagic.com
Sat Jul 26 07:50:41 PDT 2014
On Friday, 25 July 2014 at 12:38:03 UTC, w0rp wrote:
> There were a couple of talks at DConf which made some mention
> of re-implementing parts of druntime so you can compile D code
> without druntime. I wonder, do we have any current projects for
> creating lightweight runtimes? I'm thinking of what it would be
> like to write library aplications which use @nogc everywhere
> and expose some extern(C) functions, so you could write C
> libraries in D instead, such that you could produce lightweight
> binaries for use in machines which don't have druntime
> installed on them. I think it would be a fun project.
I'm thinking of actually creating a couple of different runtimes.
The one I'm researching right now is intended to be very C-like,
i.e. no classes, exceptions, garbage collector, runtime type
info, threads, TLS, etc... Just the most basic parts of D that
one would need to build a single-threaded kernel. Dynamic memory
allocation may not even be needed.
Such a runtime would certainly be better than C because there
would still be CTFE, mixins, templates, etc... Very cool! So
far, my experiments seem to indicate that such a runtime would
require very little code; potentially less than a few thousand
lines (famous last words).
If we call that runtime level_0, I then want to build level_1 on
top of that. This would include dynamic memory allocation,
manual memory managment, classes, and anything else that doesn't
require threads.
Then, on top of that, level_2. level_2 would add threads, TLS,
and the garbage collector. Potentially, level_1 and level_2
could be merged. I don't know. I'm just thinking off the top of
my head at the moment.
One of the problems I haven't yet solved is what to do when the
user tries to use one of the missing features. I'm thinking of
using the `disable` attribute or static and non-static asserts,
but I haven't yet experimented with these ideas to determine
their feasibility.
Another problem I'm currently grappling with is what to do about
dynamic arrays and other built in types that expect an automatic
memory manager (GC) to exist. I'm thinking about just building
classes to replace these, but I'm not sure just yet. I would
love to hear some ideas.
Also, one needs to consider what to do with the stdc stuff. I,
personally, want to strip it out. I don't think D needs to be
dependent on or ported to the C library. My goal is to make D
more autonomous.
I was originally envisioning such a runtime to be used
specifically for my microcontroller needs, but now that I've
learned a little more about D and the runtime, I suppose it could
be made more general purpose. It may even serve as a nice
precedent to make the D runtime more modular or tiered, assisting
with issue 11666 [1].
I'm currently distracted with getting a decent 64-bit GUI
framework so I can build some utilities and code generators for
some other parts of my project. But, If you're really serious
about pursuing this, let's see if we can reach a consensus on
design and start building it. If we keep it minimal, we could
potentially have it done in a month or two (more famous last
words).
An execellent prerequisite to this would be to figure out how to
implement enhancement 12270 [2], so we don't have to do the phony
object.d TypeInfo nonsense.
[1] https://issues.dlang.org/show_bug.cgi?id=11666
[2] https://issues.dlang.org/show_bug.cgi?id=12270
Mike
More information about the Digitalmars-d
mailing list