On Thursday, 12 December 2013 at 17:56:12 UTC, Walter Bright
wrote:
that does not even help you in sticking with that crippled
subset.
Is there a point to having a compiler flag that'll warn you if
you use "pure"?
Ugh, how "pure" is relevant? (I have not tried it but would
expect it to work in C-like code, it is just an annotation after
all). I am speaking about control about hidden allocations / gc,
referring to TypeInfo's and stuff like that. Stuff you get in C
out-of-the box because it does no clever magic. In D right now
all you can is to get rid of runtime and check for linker errors
- not impossible to do, but clearly less convenient than
compile-time errors.
Off the top of my head:
1. compile speed
Only partially true. Large projects need separate compilation and
D does not behave that good in such scenario. Still better than
C, but not good enough to make a difference.
2. dependable sizes of basic types
Not a real issue as your platform SDK always includes some kind
of "stdint.h"
3. unicode
Number one my list of advantages. Does not apply to plenty of
projects though.
4. wchar_t that is actually usable
Same as (3)
5. thread local storage
It is lot of pain and source of problems, not advantage. Extra
work to hack the druntime to get stuff working on barebone.
6. no global errno being set by the math library functions
This has made me smile :) It shows how different applications we
have in mind speaking about "C domain".
7. proper IEEE 754 floating point
Potentially useful but largely mitigated by platform-specific
development.
8. no preprocessor madness
Would have called this a feature if one could actually use
something instead out of the box. But there is no way to control
symbol visibility right now so templates / CTFE are often out of
the toolset. And what to do without those?
9. modules
Other than (1) it is also more a problem than help in current
implementation - you need to care also about emitted ModuleInfo.
10. being able to pass array types to functions without them
degenerating to pointers
Agreed,
11. inline assembler being a part of the language rather than
an extension that is in a markedly different format for every
compiler
Not an issue. You almost always stick to specific compiler in
barebone world (one adapted for your platform).
12. forward referencing (no need to declare everything twice)
Not an issue. C programmers are not tired from typing.
13. no need for .h files
Same as (9)
14. no ridonculous struct tag name space with all those silly
typedef struct S { ... } S;
declarations.
Nice but just a syntax sugar yet again.
15. no need for precompiled headers
Same as (9)
16. struct alignment as a language feature rather than an ugly
extension kludge
Same as (11)
17. no #include guard kludges
OH MY GOD EXTRA <10 LINE OVERHEAD PER HEADER
18. #define BEGIN { is thankfully not possible
Very tempting but partially mitigated by (8)
19. no need for global variables when qsorting
Doesn't matter
20. no global locale madness
(no idea what this means)
And if you use D features even modestly, such as auto, purity,
out variables, @safe, const, etc., you can get a large
improvement in clarity in function APIs.
`auto` has no real value in C world because there are not crazy
template types. @safe is a joke for barebone, you almost never be
able to apply it :) Purity, transitive immutability - yeah, those
are also top reasons in my list why I'd really love to see D in
that domain.
But most of those advantages are high-level advantages. To get
there and make use of those you need to get through issues that
hit you from the very beginning and frustrate _before_ you can
see how awesome high-level stuff is:
- Allocation for stuff like array literals making those unusable
once you remove runtime away
- No internal linkage or reliable LTO - no way to take care of
unused symbols and control binary size / layout
- Requried to stub out TypeInfo / ModuleInfo to use literally
anything
Note that those are not _fundamental_ language issues. It is
possible to fix those via slight tweaks to compiler / spec. But
it is state of affairs right now and I need to include time
estimates to implement those any time when asked how feasible
would have been to use D in that domain (some of my old
colleagues have been casually asking me about it).