On Saturday, 16 June 2018 at 21:25:01 UTC, Jonathan M Davis wrote:
On Saturday, June 16, 2018 18:45:53 wjoe via
Digitalmars-d-learn wrote:
What you said earlier:
On Monday, 11 June 2018 at 00:47:27 UTC, Jonathan M Davis
wrote:
> [...]
>
> 2. If the compiler knows that a function can't throw an
> Exception, then it doesn't have to insert any of the
> Exception handling mechanism stuff [...] So, the fact that a
> function is nothrow gives you a performance benefit, [...]
>
> - Jonathan M Davis
made me believe that performance is one of the major reasons
to use it. No?
From the betterC page https://dlang.org/spec/betterc.html
section
40.2:
---
Not Available
D features not available with BetterC:
Garbage Collection
TypeInfo and ModuleInfo
Classes
Built-in threading (e.g. core.thread)
Dynamic arrays (though slices of static arrays work) and
associative arrays
Exceptions
switch with strings
final switch
synchronized and core.sync
Static module constructors or destructors
Struct destructors
unittest (testing can be done without the -betterC flag)
---
Apart from a few convenience features lost this list reads
like a shopping list for performance gain over full fledged D,
in the spirit of nothrow omitting exception handling
mechanism, to me. You gain from no garbage collection
overhead, no vtable overhead, no RTTI overhead, no exception
overhead, etc, etc, ...
Back in the late 90ies I used to write the lion's share of
code in Pascal and implement mission critical algorithms in
asm. Worked back then why wouldn't it work today, except that
I wouldn't use asm anymore but something like C or betterC.
Thus, people who need this kind of performance boost can
benefit
2 fold from using betterC.
1. They get to keep most of D's awesomeness, including compile
time features, scope statements, RAII, lack of a pre processor,
memory safety protections and complete meta programming, are
just
_some_ of the highlights. And on the other hand
2. they gain by getting rid of a lot the 'performance hogs'
like
GC, exceptions and more, right?
And, with no exceptions altogether they do not need to worry
about it at all.
I'm sold!
The _entire_ point of betterC is to be able to call D code from
C code without having to deal with druntime (you can call D
code from C code even without betterC, but then you have to
worry about initializing and shutting down druntime). Basically
BetterC sounds like a C language with tons of features from..
well actually...it sounds like a C language that fixes C's
shortcomings.
To get that point across it should maybe be called C2D Easy
Interop Language.
every feature that you can't use in betterC is considered a
loss, and efforts are being made to make more of them work.
There's always going to be a limit to that, and some D features
just plain require druntime (just like some of C++'s features
require a runtime), but it was never the point of betterC to
strip out a bunch of D features. That's just the natural
It is what it is and if what it is is the best tool to fix a
problem I would not hesitate to use it to that end.
But you make it sound like betterC _should only_ work if actual D
code is called otherwise stick with good old C. From the POV of a
C programmer most of what betterC offers is a net gain and
nothing is a loss because what are they losing by upgrading from
C? And in general not paying for something you don't use or need
is considered a gain, no?
consequence of the goal of being callable from C code without
needing to worry about druntime.
All of those features that betterC can't use can be avoided in
normal D code if you don't want them for whatever reason.
nothrow is actually one of the few cases where you have to
explicitly do something in order to avoid that list of features
that you have there. In the other cases, you just don't use the
feature, and the only cost you're paying is the startup and
shutdown time for druntime and the few resources that it uses.
Please tell me. How would I disable just the Error mechanism, for
example ?
As far as I can tell it's not sufficient that I don't use nothrow
in my code because if it was used in phobos or druntime or some
other D code I'd have to deal with it.
But I know the answer to that. It's not possible because it was
never considered because why would anyone want to do that and
have the program just crash.
Let's say I don't want to deal with OutOfMemoryError. That means
essentially I'm losing the GC. Which sucks big time as it is
_the_ selling point for me to use D over C.
Let's say I didn't agree with RangeError for assoc. Arrays. I
imagine it allocates dynamically and hence has a dependency on
the GC so I have to consider the OutOfMemoryError headache even
if I would agree to RangeError. Solution again don't use it and
implement my own.
Really, I don't see the difference between not using a feature
and not having a feature available; result's the same - I need a
solution/replacement.
So, while you might choose to use betterC over concerns about
the performance of D features that betterC doesn't allow, that
was never the point of betterC.
- Jonathan M Davis
Looks like one can only choose the headache to deal with.
Now, from the point you make about betterC, it seems like a
better idea to abandon ship now and return to C instead of having
to deal with similar headaches with betterC in the future.