It seems obvious that you <i>can</i> do anything without circular references. Proof: implement a Turing machine without using them.<p>The question is whether it&#x27;s a reasonable constraint for real-world programs. In theory, Malbolge can be used to perform any algorithm, but few people would actually want to.<p>Circular references are really convenient in many cases. For example, view hierarchies typically have a pointer from a view back to its parent view. This means you can walk up the view hierarchy as well as down, so you can find sibling views, remove a view from its parent, invalidate a parent&#x27;s layout when the view&#x27;s sizing needs change, and stuff like that. Without circular references you could still accomplish all this, it just becomes slower and more painful.<p>In practice, reference cycles are a <i>big</i> problem for ARC. One of the most common questions I see with Objective-C and Swift programmers is when it&#x27;s necessary to use a weak reference to self in a block, and when it&#x27;s necessary to use a strong reference. It&#x27;s difficult enough that I&#x27;ve seen a lot of people just punt on the entire question and go for &quot;always capture self as a weak reference no matter what.&quot; Which works most of the time, and occasionally creates entertaining bugs. Even for experienced developers it&#x27;s easy to miss a spot occasionally, and end up with a silent leak or a subtle bug.