Isn't it about time for D3?
Mike via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jun 14 05:08:16 PDT 2017
On Saturday, 10 June 2017 at 23:30:18 UTC, Liam McGillivray wrote:
> I think it's about time for D3 to start developing.
I would love to see a fork of D2 that attempts to address some
obstacles I encountered when I was using D. However, it is quite
apparent that there is little to no interest in such a venture
from those in the D community with the talent to actually do it.
And I have to admit there is still room for innovation in D2, and
that seems to be where most want to allocate their limited
resources.
For D3 to happen, it will likely require talent outside D's core
team.
I do a lot of programming in different domains, and it seems I
have to use a different language for each one in order to be
productive. I would like to find a single language that I can use
to program just about any domain, but still be able to enjoy
modern features for safety, convenience, zero-cost abstractions,
and modeling power. I'm not aware of any language that fits that
description, but the languages I've found to be somewhat close
are C++11~17 and Rust. They're the only ones that appear to be
scalable down to domains such as resource constrained
microcontrollers.
* Using D for resource constrained systems requires too many
compromises and silly runtime hackery.
* C++11~17 is quite good but it is not at all convenient, and
safety is just too easy to get wrong.
* Rust is probably the best, but it doesn't have the modeling
power of D and C++.
It'd be more constructive to begin collecting information from
the community about what changes they'd like to see in D3.
Here's a start from things just off the top of my head and in no
particular order.
THINGS TO CHANGE OR ADD
-----------------------
* Final-by-default
* immutable by default
* @safe by default
* Fix attribute inconsistency and revisit if D is using the
appropriate defaults
* Pay as you go druntime.
The compiler is too coupled to druntime and expects things to be
there even though they're not required. This would also make D a
better language for replacing much of the exising infrastructure
code out there that is currently written in C because it wouldn't
require the D runtime dependency and all the overhead that goes
with it. Rust has done well in this regard.
* Minimal druntime
The language should be easy to port to other platforms. Keep
druntime small and to a few fundamental primitives to whatever
extent that is possible. Rust has also done well in this regard.
* Compiler resolves druntime symbols at compile time.
This is important for porting D to other platforms that may not
have the resources or hardware to support certain features of the
language. The compiler would emit a compile-time error if usage
of such a feature was attempted, but not supported by the
runtime. Proposed here [1].
* Some way to mark memory at compile-time with certain attributes
(e.g. See [2]) to inform the compiler of proper code generation
(e.g. volatile semantics). This would probably only be useful
for bare-metal programming, but I encounter this all the time and
its getting worse with each new MCU generation.
* Remove the "module must be a file" arbitrary limitation
I ran into this when I was trying to model hundreds of
memory-mapped IO registers. I wanted to use a module for each
register, but each module would only have a small amount of code,
and I would have ended up with hundreds of little files. It
would have been better if I could group all "register" modules
for a given peripheral under one "peripheral.d" package file.
Something like `package UART { module SR {} module DR{} }` would
have been nice. I ultimately ended up with `final abstract class
{}` instead, which is stupid.
* get rid of the "_t" suffix added to types from C.
Come up with a better, more consistent naming convention for
these types that doesn't carry baggage from other languages.
* Drop the GC or at a minimum make it opt-in. Add a borrow
checker, automatic reference counting, or some other GC
alternative that doesn't require a separate thread.
DIP1000 is interesting and may enable some new interesting
patterns and idioms. Might be able to take some inspiration from
it. I wonder if DIP1000 would have been more elegant if D didn't
have to worry about breaking code.
* The C standard library bindings and C++ standard library
bindings should be in Deimos not in the druntime.
I already tried to promote this, but only encountered obstruction.
* Cure the TypeInfo infection [3]
TypeInfo has been over(ab)used in the runtime implementation.
This is probably due to historical baggage, but also a lack of
discipline.
THINGS TO KEEP
--------------
* CTFE
* Templates and static-if (static-if is some powerful stuff!)
* Mixins (or some other way to do convenient composition)
I get that one should favor composition over inheritance, but
most object oriented languages offer precious little to do the
"right" thing. D mixins are great for composition.
* Traits (or some other form of reflection)
* UFCS
THINGS TO DROP
--------------
* C++ interoperabiliy
Walter's right: memory safety is going to kill C and C++ will go
with it. Don't waste time on this; it's not going to matter in
10 or 20 years.
After collecting such a list, begin a fork of LDC, and start
working on it. If you can show progress and potential, others
may be willing to contribute, accelerating the project. I,
personally, think it would be very exciting to see and would
eventually become an active contributor myself if the project
addressed some of the issues I have with D2.
I was on cloud 9 when I first started using D, and had high hopes
that it would change my career and even give me a new tool off
which to build a profitable business. But the more I used it, I
just became more disillusioned. D has so much potential compared
to all other languages out there, but it's potential that it will
never reach because it's just carrying too much baggage and has
not been designed with domains like resource constrained
microcontrollers in mind, like Rust was.
I don't do anything in D anymore, but I still watch what goes on
here in the D community, and hope that someday enough people will
come together and begin a fork to take D to its true potential.
I don't have the skills or resources at this time to lead such a
project, but I'll volunteer my resources if it ever gets off the
ground and shows promise.
Mike
[1] - Proposal to have druntime inform compiler of platform
support -
http://forum.dlang.org/post/psssnzurlzeqeneagora@forum.dlang.org
[2] - ARM Cortex-M3 memory attributes -
https://developer.arm.com/products/processors/cortex-m/cortex-m3/docs/dui0552/latest/2-the-cortex-m3-processor/22-memory-model/221-memory-regions-types-and-attributes
[3] - Discussion about the TypeInfo infection -
http://forum.dlang.org/post/nevipjrkdqxivoerftlw@forum.dlang.org
More information about the Digitalmars-d
mailing list