Does D have too many features?

Sean Kelly sean at invisibleduck.org
Tue May 8 14:48:12 PDT 2012


On May 8, 2012, at 2:31 PM, Jonathan M Davis wrote:
> 
> We've previously discussed having _all_ of the C system call functions from 
> the various OSes that we support being in druntime, and I very much think that 
> that's the right way to go. Phobos and druntime then have whatever they need 
> as for as standard C and system call functions go, and anyone who needs any 
> which aren't wrapped by Phobos in some manner has them available to them. 
> Anyone that doesn't want to use any of those C function directly, doesn't have 
> to, but I don't see any reason to hide them just because someone doesn't want 
> to use them in their code.
> 
> If the problem is that certain C functions end up getting used a lot when they 
> should have D wrappers of some kind which better encapsulate their 
> functionality, then maybe we add the appropriate wrappers to Phobos. But 
> that's a completely different issue. Hiding the C functions doesn't help us 
> any.

I personally use "import core.stdc" as an indicator that there may be some feature missing from Phobos.  It's easily greppable, and easy to avoid using the routines.  In fact, I think "import core" anything should be an exceptional case in a typical D application.  Everything exposed in Druntime is for what I'd consider power users.  Unsafe threads, runtime and GC hooks, platform API calls, etc.  It's all there because the higher-level stuff needs it, but is really not intended for general use.


> It makes sense to make truly internal stuff internal, but the standard C
> function declarations and OS system functions are _not_ internal to druntime.
> They're _very_ much external. druntime is just providing them because they're
> functionality which is core to the system that any D program is running on.

Once upon a time, there was a D runtime library (unrelated to Druntime) that has no C library dependence at all.  It was an interesting idea, but I don't know that there's any system that D targets which doesn't support C.


More information about the Digitalmars-d mailing list