Hacker News new | ask | show | jobs
by tempodox 1130 days ago
If you use the Cocoa API with ObjC or Swift, you get Automatic Reference Counting (ARC), generated by the compiler. I guess with this you'd have to retain / release your objects manually again?
3 comments

No. Rust has RAII so you can have retain on 'clone' operations and release on drops, just like the native Rc/Arc types do.

This is, incidentally, how the servo bindings to core-foundation work (I prefer those bindings where there is overlap).

Servo bindings: https://github.com/servo/core-foundation-rs

Other crates of interest on this topic: - https://crates.io/crates/objc - https://crates.io/crates/block

Someone has to manually type .clone() calls.
If you don't, the compiler tells you to, as per standard Rust semantics.
Automatic Reference Counting.

Writing by hand isn't the same.

Except that even Apple's ARC is not automatic - try passing the pointer to a GArray, or putting it on a malloc'ed linked list or any other data structure not implemented in Swift or ObjectiveC (provided that you compile objectiveC with the correct build flags).

The point is: you can't leak, you can't end up keeping a reference without incrementing the refcount and you don't events have to worry about any of the refcounting as long as the code you write is sound according to Rust rules.

Moving goalposts.

We are speaking about the normal development experience, not corner cases or unsafe code.

Rust has ARC too so I very much doubt it.
Nope, someone has to manually type .clone() calls.
That's irrelevant (and barely different to having to type `=`). The salient point is that you don't need to manually call free/release.
That is more than relevant, otherwise we are comparing oranges to apples, pun intended.

Automatic Reference Counting.

Since = is the same as .clone() in character count?

Yes I'm aware that the A stands for Atomic in Rust, not Automatic. But it is still automatic because you do not need to increment and decrement the counter manually.

> Since = is the same as .clone() in character count?

Why does character count matter? I think you're getting a bit distracted from the point.

Will you need to manually free/release objects? No you will not.

Author here.

Nope, retain on create/etc and release on drop happens automatically.