On Wednesday, 27 December 2017 at 20:24:04 UTC, Walter Bright
wrote:
This illustrates my point if it was unclear:
C++:
int foo(int* p) { return p[1]; }
int bar(int i) { return foo(&i); }
clang++ -c test.cpp -Wall
D:
@safe:
int foo(int* p) { return p[1]; }
int bar(int i) {return foo(&i); }
dmd -c test.d
test.d(3): Error: safe function 'test.foo' cannot index
pointer 'p'
test.d(4): Error: cannot take address of parameter i in
@safe function bar
Well,I can press the accelerator on my car to the floor, and
crash the car.
But is that a problem with the car, or the way I used it
(referring to the C++ portion of your example)? Would be better,
and fairer, to write that portion in modern C++, and then make
the comparison with D.
And sure, we can (and do) make cars that modify the acceleraton
potential, but then you can't do burnouts ;-(
So safety certainly does have real value..but it always wants to
take something away. (and unfortunately, we're becoming a very
risk averse society, with more and more freedoms being taken away
in the name of 'safety' - but I divert..)
Of course, the nice thing about D, is that we can (for the most
part) switch it from one to the other...so I like that a lot.
But when I really want to put the pedal to the metal, I still
look to C.
(although, one day the government will try to make C illegal too
I guess).