News for hackers. Stuff that matters.
Re:Swift Regrets by zozbot234 on Wednesday September 22, 2021 @02:23PM (#28619856)
Swift does not provide memory safety for concurrent code. It has comparable pitfalls to Go. (You can use Thread Sanitizer to try and diagnose these issues, but that's best-effort and runtime-only; it does not make your code totally safe.)
Re:Swift Regrets by jarpadat on Wednesday September 22, 2021 @05:14PM (#28621916)
Concurrent memory safety is definitely a goal. Try the new ‘-warn-concurrency’ flag to see what I mean, it is comparable to rust and quite different than thread sanitizer. There’s also a new runtime sanitizer this year with swift intrinsics, not best effort like tsan was.

That said. Swift is in the tough position of trying to be a lot of things at once to users with competing needs. Applications, systems, performance, education, prototyping, etc. While there’s broad agreement concurrency safety is important, not everybody thinks it is important enough to bury your working build under a thousand errors (though that view is represented)

Ultimately swift’s philosophy is that safety is practice and not theory. Some people do turn on ‘-warn-concurrency’ and fix their errors, others would want to ignore them and find some escape hatch to squash them which doesn’t appreciably improve safety, still others might not upgrade if that was required and maybe the ecosystem as a whole becomes less safe for it. Swift feels responsible for these kinds of outcomes.

It’s a tough problem but it does lead to interesting ideas that make safety more practical and productive. Remains to be seen how much of both worlds you can have, but swift/clang/llvm have a long history of doing stuff like that better than you expect.

Re:Swift Regrets by azakai on Wednesday September 22, 2021 @02:54PM (#28620247)
That is true, but the great majority of memory safety issues are not concurrent ones. In practice Swift and Go are huge improvements over C, C++, and Objective-C in terms of memory safety.

I'd also say they are in a reasonable space in the state of the art of safety in general. While they do not make concurrency safe and Rust does, in Rust you need to use unsafe to write things like doubly-linked lists and graphs (or resort to things like indexes-in-an-array), which you can do safely in Swift and Go. So there are interesting tradeoffs all around - our industry has not found a perfect solution here yet.

Re:Swift Regrets by saagarjha on Wednesday September 22, 2021 @03:47PM (#28620900)
In my experience post-ARC almost all memory safety issues are thread-safety related.
Re:Swift Regrets by pjmlp on Thursday September 23, 2021 @02:20AM (#28625720)
Except ARC only works for Cocoa like classes, everything else is traditional C like memory management.
Re:Swift Regrets by saagarjha on Friday September 24, 2021 @12:37AM (#28638682)
Yes, but most of the time you’re not using that in your Objective-C code.
Re:Swift Regrets by novok on Wednesday September 22, 2021 @03:23PM (#28620617)
If I had Go's build speed in Swift, I wouldn't have minded a clean break language like Swift.
Re:Swift Regrets by dddddddan on Wednesday September 22, 2021 @04:28PM (#28621343)
It does now with actor based concurrency