core.stdcpp
eles via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Tue Aug 26 11:47:48 PDT 2014
On Tuesday, 26 August 2014 at 18:33:07 UTC, Daniel Murphy wrote:
> "Mike" wrote in message
> news:bkkdiikafdsraqssjndv at forum.dlang.org...
>
>> > I really don't see a practical problem with having them in
>> > druntime, only a philosophical one.
>>
>> It give the impression that D requires the C standard library,
>> the C++ standard library, and an full-featured desktop OS in
>> order to function. If I create a port without core.stdc, it
>> can be argued that my port is incomplete. Well I argue that
>> my port is a complete implementation of the language and
>> core.stdc is not part of the D language.
>
> What platform supports threads and GC but doesn't have a C lib
> available? I certainly would argue that this hypothetical port
> is incomplete, not because druntime including bindings to libc
> declares it part of the language, but because I can't see a
> good reason not to include them.
>
>> Then they can be put in their own library instead of phobos.
>
> Yes, they could. IMO the downsides of having to maintain a
> third library outweighs the 'correctness' advantage, or even
> having a different root package for this stuff. And there is
> no way it's ever going to change at this point.
>
>> That's even better as far as I'm concerned. GTKD isn't part
>> of phobos or druntime. I don't see libc as being any
>> different (in principle) than GTKD.
>
> Druntime doesn't use GTK, so it is different. The inclusion of
> C/OS bindings is historical, and not worth changing.
>
>> > and they are used in druntime internally.
>>
>> For a practical implementation, those ports that have a libc
>> can make use of it, but it should be internal, and isolated
>> from the language implementation and the other ports, as is
>> the spirit of 11666.
>
> There is no point as the bindings are already in druntime and
> there is very little chance that is going to change.
>
>> But you could take it a step further for the principled
>> approach. Implement those few features of libc that are needed
>> by the druntime in D, and earn some bragging rights.
>
> You could, but it has very little practical value. I
> personally wouldn't waste my time bragging to someone who
> thinks druntime depending on libc is an argument against D.
>
>> Why create DDMD? We already have an implementation in C++,
>> right. What a waste of time... (of course I'm being
>> facetious. Forgive me, but I think it's a great example of
>> why we should do something in D even though a C/C++
>> implementation exists. No offense intended)
>
> It's possible you missed the point of DDMD. DMD is an actively
> developed codebase which can benefit from many of the features
> D offers. Well, that was my motivation anyway. I know other
> people got excited by the idea for other reasons.
>
> There is no practical advantage (to the project) from
> converting a fully debugged, optimized application or library
> to another language, unless the language barrier is preventing
> interop. A libc written in D would not give us anything of
> practical value.
>
>> That's exactly my point. The debate that ensued with 11666
>> had nothing to do with the spirit of 11666. If those OS
>> bindings weren't in druntime, 11666 would already be
>> implemented without controversy. And we'd likely already have
>> a few more ports of D to other platforms. The 11666 debate
>> belongs in a std.linux debate or a liblinux debate or some
>> other OS API port debate.
>
> No, the exact same thing would have happened if they were in a
> different package/repository. A different root package would
> not change the contributors or contribution process.
>
>> Publicly exposing core.stdc and the OS bindings in druntime is
>> getting in the way of bringing D to more platforms, and the
>> 11666 debate demonstrates that.
>
> This is just nonsense. Changing the root package changes
> nothing.
>
>> Or those features in libc could be implemented in D, removing
>> the artificial dependency on libc.
>
> Re-implementing debugged and optimized code is a waste of time.
>
>> Only the *port* should have bindings to libc. The language
>> implementation should not. Again those bindings should be
>> encapsulated in the port, not publicly exposed as part of the
>> D language.
>
> 1) Being part of druntime does not automatically mean something
> HAS to be available on every platform. eg the windows bindings
> are not available on non-windows
> 2) I don't see any point in not exposing the c lib from
> druntime, nor do I see any platform where that would be a
> problem that does not have much more serious issues with
> hosting D.
>
>> * It conflates the language with the platform. druntime should
>> be solely the implementation of the language, not an OS API.
>
> I disagree, having the OS API in druntime is great and not a
> problem.
>
>> * It conflates the implementation of the language with
>> bindings for external libraries.
>
> C interop is part of D. Low level (direct) access to operating
> system APIs is part of D. Exposing them is useful.
>
>> Again, druntime is the language implementation, not an
>> application programming framework.
>
> By this logic the C lib header files and windows.h files make
> an application programming framework.
>
>> * It sets the wrong precedent for a systems programming
>> language. IMO a true systems programming language should be
>> self-reliant. That is, it should be a language that can be
>> used to build the first layer of hardware abstraction.
>
> D can be used for that. But realistically, this is a
> constrained environment which will use a custom druntime, and
> be restricted to a subset of D.
>
>> * It creates artificial dependencies when there's no real
>> dependency. C++ being a superset of C is an example of a real
>> dependency. That is not D.
>
> I don't consider this to be a problem worth worrying about.
>
>> * It gets in the way of porting the language to more platforms
>> and complicates maintenance of the runtime. Case in point: the
>> 11666 debate.
>
> No, it doesn't. Even if these bindings weren't in druntime,
> they'd be in another official library. Nothing would be
> different with respect to 11666.
>
>> * It makes D unportable to some platforms without creating
>> their own dialect of the language or their own D runtime
>> implementation
>
> I expect D is already unportable to these platforms without
> doing these things. Removing libc bindings would not change
> this.
>
>> In summary, I believe libc, libstd++, and the OS bindings
>> should be encapsulated and isolated by the ports that need
>> them, not publicly exposed as part of the D language
>> implementation. Having bindings to these these libraries is
>> super important, and I'm glad they exists. I just don't think
>> they belong in the D language implementation, except as
>> encapsulated, isolated artifacts of ports that need them.
>
> In an ideal world, the bindings would be more cleanly separated
> from other runtime stuff. But they're not. It would require a
> very compelling argument to move them now, and this really
> isn't it.
>
> We could document that core.stdc is not a required part of a D
> implementation, but it should be trivial to provide on any
> platform that can support a complete the rest of D, so there
> doesn't seem to be any point.
While this might be acceptable, there is one more question: what
use to have the druntime separated from phobos, in this case?
For me the druntime shall include only the runtime components
that are required for a program to function and on which one
could build the whole standard library. And that would be:
handling the arguments, the GC, basically, the D program
execution model. And by D here I mean "the language", not the
"batteries included".
More information about the Digitalmars-d-announce
mailing list