News for hackers. Stuff that matters.
Re:Ada for the C++ and Java Developer [pdf] by pjmlp on Sunday March 28, 2021 @06:32AM (#26609242)
Yes they are bounds checked, at compile time, or runtime if not able to prove them at compile time.

Overflow is checked.

However both can be disabled via unsafe code pragmas if so desired.

As of Ada 2012, the SPARK proof system was integrated into Ada and you can also use DbC as formal proofs.

Many of the use cases that in C++ would require new/delete are handled by the compiler itself, thus there is an error if when a function is called there is not enough space available.

In the cases that there is a need to explicilty do malloc/free like programming, only malloc (new) is considered safe, manually releasing memory is an explict unsafe operation and marked as such.

Re:Ada for the C++ and Java Developer [pdf] by fpoling on Sunday March 28, 2021 @07:29AM (#26609447)
In addition Ada allows dynamically-sized arrays to be allocated on the stack and to be returned from a function. Efficient implement of the latter requires rather non-trivial support on the compiler side and C/C++/Rust have nothing like that. Yet in many cases it allows to eliminate new/delete and simplify code.

For example, just consider if C allowed to return a plain C string from a function without any heap allocation. Things like unsafe sprintf/strcopy would never happen then.

Re:Ada for the C++ and Java Developer [pdf] by okl on Sunday March 28, 2021 @11:14AM (#26611028)
There a two stacks, the call stack, and a stack for returned values of dynamic size, not very complicated, is it?
Re:Ada for the C++ and Java Developer [pdf] by pjmlp on Sunday March 28, 2021 @09:24AM (#26610152)
Yes that is what I mean by allocation being handled by the compiler.
Re:Ada for the C++ and Java Developer [pdf] by MaxBarraclough on Sunday March 28, 2021 @07:47AM (#26609527)
Although Ada still isn't fully memory safe. Read-before-write causes undefined behaviour, if I recall correctly.
Re:Ada for the C++ and Java Developer [pdf] by foerbert on Sunday March 28, 2021 @08:19AM (#26609712)
Accesses - pointers - are automatically nulled when declared. So you won't silently screw up who-knows-what with an uninitialized access, though yeah, it's not perfectly safe.
Re:Ada for the C++ and Java Developer [pdf] by okl on Sunday March 28, 2021 @11:19AM (#26611086)
You can also declare access types as "not null" in which case initialization is compulsory.

http://www.ada-auth.org/standards/12rm/html/RM-3-10.html#p13...

Re:Ada for the C++ and Java Developer [pdf] by MaxBarraclough on Sunday March 28, 2021 @09:17AM (#26610093)
I didn't mean pointers/access-types, I meant ordinary integer-type locals.
Re:Ada for the C++ and Java Developer [pdf] by pjmlp on Sunday March 28, 2021 @09:30AM (#26610216)
You can put a pragma Warning_As_Error ("never assigned"); or the respective compiler switch on GNAT.

Other compilers have similar switch.

Heck even C and C++ have them, although few make use of them.

Re:Ada for the C++ and Java Developer [pdf] by MaxBarraclough on Sunday March 28, 2021 @10:29AM (#26610678)
Also, I think Ada is fully memory-safe but for initialization. That is to say, the only way in which it's not memory-safe, is regarding uninitialized variables. (That's assuming of course that you don't disable checks.)

I'm not sure if it lets you shoot yourself in the foot regarding invalid type conversions, misuse of unions, that kind of thing.

Re:Ada for the C++ and Java Developer [pdf] by okl on Sunday March 28, 2021 @11:22AM (#26611112)
Re:Ada for the C++ and Java Developer [pdf] by touisteur on Sunday March 28, 2021 @09:47AM (#26610362)
Pragma Initialize_scalars for the win. But at runtime.

And if you can afford it, Codepeer (static analysis) finds most of the ones the compiler doesn't find. And then if you can live with the Spark subset, you get proof of initialization in 'bronze' mode :-).