5 ms·
It also means it's easy to create reference cycles that never get deallocated. Especially in callback anonymous functions.
by 90s_dev 1y ago
It also means it's easy to create reference cycles that never get deallocated. Especially in callback anonymous functions.
- tbojanin 1y agoThe tooling around finding these references cycles (Instruments) is 2nd to none imo.
- Onavo 1y agoThe issues it has around circular data structures is almost, though not quite, as bad as rust.
- steeleduncan 1y agoTrue, but it only works on Apple systems, which makes Swift far less appealing on non-Apple systems. This adds weight to the point the GP comment makes about Swift being held back by its association with Apple
- dardeaup 1y agoAgreed. However, if Jetbrains were to provide a Swift IDE that's free for non-commercial use...
- ohdeargodno 1y agoThey used to. AppCode was excellent. Fleet kind of supports Swift well enough. AppCode was abandoned because Apple is impossible to work with and never provided up to date semantics and language definitions for Swift, keeping everything under wraps and making every single Swift release a race to suddenly implement whatever new keyword they made up this week. Fleet is more of a VSCode. Probably using the LSP these days, and it's good enough if a simple text editor is what you need.
- einsteinx2 1y agoSwift is literally developed in the open, so I don’t think your argument makes sense. I think the reason they abandoned it was trouble keeping up with new iOS SDK features getting shadow dropped as part of new Xcode betas and iOS devs wanting to immediately prepare their apps to use those features, not anything to do with Swift language releases. Also things like having to recreate interface builder, then support auto layout in it, and then later SwiftUI previews, etc. Again all iOS platform stuff, not Swift language stuff.
- ninkendo 1y agoAfter coding in swift for ~5 years at job - 1, I can count on one hand the times I had to deal with a reference cycle, and in each instance it was obvious in context that there was going to be a cycle so I used “weak” in anticipation. Zero times did I ever accidentally forget to use a weak reference. A simple rule of thumb is that if anything has a parent/child relationship, the child should use the weak keyword (or even “unowned” if you’re certain about object lifetimes) when referring back to the parent. That and things like hand-rolled doubly linked lists, but the standard library already has that so who cares.
- einsteinx2 1y agoAlso for all the hate Xcode deservedly receives, it comes with some really great tooling in the Instruments package that, among other things, makes it trivial to detect leaked memory when it does happen. And from my own experience developing in Obj-C and Swift for 15 years, I agree that it’s really not the big issue that anti-reference counting people make it out to be.
- miffy900 1y agoWell kinda; even in a tracing GC language like C# you have things like WeakEventManager (https://learn.microsoft.com/en-us/dotnet/api/system.windows.weakeventmanager?view=windowsdesktop-9.0&viewFallbackFrom=net-9.0 https://learn.microsoft.com/en-us/dotnet/api/system.windows....) to prevent memory leaks when using callbacks as event handlers. It is definitely not exclusive to ref counted languages. In C#, these aren't the exact same as a reference cycle, but the end result is the same, a memory leak: https://learn.microsoft.com/en-us/dotnet/desktop/wpf/events/weak-event-patterns https://learn.microsoft.com/en-us/dotnet/desktop/wpf/events/...