On Thursday, 25 May 2017 at 20:43:36 UTC, Jonathan M Davis wrote:
complication to the language. Certainly, from what I know of
Rust, it's far more complicated because of that sort of thing,
and glancing over that link on Pony, it looks like it's getting
a fair bit of complication as well in order to deal with the
problem.
I think Pony uses a GC (also to collect dead threads/actors).
But I have found that trying to understand their model to be a
good exercise for thinking about where problems can arise and
what it takes to resolve it through a typesystem.
stuff with regards to threads to shared, which is great, but
dealing with the stuff that involves sharing across threads
then requires that the programmer be much more careful than
would be the case if the type system were actually helping you
beyond preventing you from doing stuff that isn't thread safe
to a shared object without casting it to thread-local first.
Yes, that transition to/from shared is problematic. There are
ways to deal with it, proving concurrency patterns to be correct,
but it takes even more machinery than Pony/Rust.
I don't know what the right answer is. Rust seems to get both
praise and complaints about its approach - as do we for ours.
But both approaches are safer than what you get with C/C++.
Depends on what you do in C++. If you only share though a
ready-made framework, then you probably can do quite well in
terms of safety. With a small performance cost.
If you want max performance in the general case then I think all
these languages will have safety troubles. Because you need
proper full-blown verification then...