Re: Why I Like D

2022-01-13 Thread Araq via Digitalmars-d-announce

On Friday, 14 January 2022 at 02:13:48 UTC, H. S. Teoh wrote:
It takes 10x the effort to write a shell-script substitute in 
C++ because at every turn the language works against me -- I 
can't avoid dealing with memory management issues at every turn 
-- should I use malloc/free and fix leaks / dangling pointers 
myself? Should I use std::autoptr? Should I use 
std::shared_ptr? Write my own refcounted pointer for the 15th 
time?  Half my APIs would be cluttered with memory management 
paraphrenalia, and half my mental energy would be spent 
fiddling with pointers instead of MAKING PROGRESS IN MY PROBLEM 
DOMAIN.


With D, I can work at the high level and solve my problem long 
before I even finish writing the same code in C++.


Well C++ ships with unique_ptr and shared_ptr, you don't have to 
roll your own. And you can use them and be assured that the 
performance profile of your program doesn't suddenly collapse 
when the data/heap grows too big as these tools assure 
independence of the heap size. (What does D's GC assure you? That 
it won't run if you don't use it? That's such a low bar...)


Plus with D you cannot really work at the "high level" at all, it 
is full of friction. Is this data const? Or immutable? Is this 
@safe? @system? Should I use @nogc? Are exceptions still a good 
idea? Should I use interfaces or inheritance? Should I use class 
or struct? Pointers or inout? There are many languages where it's 
much easier to focus on the PROBLEM DOMAIN. Esp if the domain is 
"shell-script substitute".


Re: Why I Like D

2022-01-13 Thread Araq via Digitalmars-d-announce
On Thursday, 13 January 2022 at 10:21:12 UTC, Stanislav Blinov 
wrote:
Oh there is a psychological barrier for sure. On both sides of 
the, uh, "argument". I've said this before but I can repeat it 
again: time it. 4 milliseconds. That's how long a single 
GC.collect() takes on my machine. That's a quarter of a frame. 
And that's a dry run. Doesn't matter if you can GC.disable or 
not, eventually you'll have to collect, so you're paying that 
cost (more, actually, since that's not going to be a dry run). 
If you can afford that - you can befriend the GC. If not - GC 
goes out the window.




But the time it takes depends on the number of threads it has to 
stop and the amount of live memory of your heap. If it took 4ms 
regardless of these factors it wouldn't be bad, but that's not 
how D's GC works... And the language design of D isn't all that 
friendly to better GC implementation. That is the real problem 
here, that is why it keeps coming up.


Re: Interesting rant about Scala's issues

2014-04-06 Thread Araq

On Sunday, 6 April 2014 at 17:52:19 UTC, Walter Bright wrote:

On 4/6/2014 3:31 AM, Leandro Lucarella wrote:
What I mean is the current semantics of enum are as they are 
for
historical reasons, not because they make (more) sense (than 
other
possibilities). You showed a lot of examples that makes sense 
only
because you are used to the current semantics, not because 
they are the

only option or the option that makes the most sense.


I use enums a lot in D. I find they work very satisfactorily. 
The way they work was deliberately designed, not a historical 
accident.


The fact that you are unaware of how it's properly done (hint: 
Pascal got right with 'set of enum' being distinct from 'enum') 
makes it a historical accident.


Re: Interesting rant about Scala's issues

2014-04-04 Thread Araq

And another:

 enum Mask { A=1,B=4 }

 Mask m = A | B;   // Error: incompatible operator | for enum


That would be a 'set of enum' in Pascal/Delphi.