← Back to context

Comment by skohan

6 years ago

ARC as in "Atomic Reference Counting". ARC uses atomic operations to increment and decrement reference counts. That means these operations must be synchronized between threads. synchronization between threads/cores tends to be an expensive operation.

This is required for reference counting objects between threads. Otherwise, you might have one thread try to release an object at the same time another thread is trying to increment the reference count. It's just overkill for objects which are only ever referenced from a single thread.

Well that is confusing. Any Apple developer has known for many years that ARC means Automatic Reference Counting:

https://docs.swift.org/swift-book/LanguageGuide/AutomaticRef...

I never heard this alternate and very different expansion for that term.

  • It's an overloaded acronym to be sure. Atomic reference counting is a familiar concept in systems programming languages like C++ and Rust. It just so happens that Apple's automatic reference counting is also atomic.

  • It's a bit less confusing in practice - the full types are std::rc::Rc and std::sync::Arc (where std::sync is all multithreading stuff, and you have to actually use that name to get access to Arc in your code), and both are well documented (including spelling out the acronym):

    https://doc.rust-lang.org/std/rc/struct.Rc.html

    https://doc.rust-lang.org/std/sync/struct.Arc.html

    ...I could see this causing merry hell if trying to do advance interop between Swift and Rust, though, and it's admittedly probably going to be a minor stumbling block for Apple-first devs. (I managed to avoid confusion, but I just port to Apple targets, they're not my bread and butter.)