Mozilla XPCOM implemented Bacon's approach, and this one to some degree can be ported to WinRT if needed. Generally, avoiding tracing garbage collector is a good thing. Developers still have plenty of ways to leak memory, so it's better not to fall into delusion. Also, from the control point of view, cyclic ownership does not make sense. That's like Munchausen pulling himself out of a mire by his own hair and keeping himself floating in the air. There must be a reason for every object to exist, and reference count is the manifestation of this reason. Another manifestation is the right to modify, which gives rise to robust copy-on-write techniques highly dependent on reference counter availability. In an environments only having tracing garbage collection one either has to perform deep copy of mutable data structures to preserve it from unwanted mutations, or use immutable data structures with big penalties for small deep changes. Or convert mutable and immutable data structures back and forth. Also, it was estimated that tracing garbage collection only works fine when there is 5x required RAM available (deeply copied replicas not accounted). In comparison, conservative allocators use 2x required RAM (wasted due to fragmentation). Don't be tricked, copying garbage collector only makes allocation faster, but wastes 2.5 times more RAM than reference counted conservative garbage collector to achieve comparable performance.
Look at the Apple. They introduced TGC into Objective-C 2.0 as an optional feature, but then deprecated it, and tons of iPhone applications live without it pretty fine. iPhones are known for excellent user experience and long battery charge duration. Windows 10 freezes like hell on my 4Gb RAM PC, while Mac OS X 10.4.10 Hackintosh worked pretty smoothly on 1Gb RAM. Maybe this is related somehow, don't you think so? Maybe memory is leaked accidentally somewhere, but in the end it is hard to observe compared to freezes and enormous RAM consumption.
Enormous RAM consumption make programs swap to disk, and if they swapped to disk and then started tracing garbage collection, swapped pages are all returned back to RAM, and moving swapped pages back to RAM is notably slow. Also, when doing so, pages of other applications have to be preempted to swap file. As we know, tracing garbage collected applications use 2.5 times more RAM, so these applications have 2.5 times more chance to go to swap. Suddenly another application will also initiate garbage collection and will have to get swapped pages back to RAM, preempting pages of another applications. And it goes and goes like perpetuum mobile vice versa. Normal perpetuum mobile infinitely produces energy out of thin air, and perpetuum mobile vice versa infinitely wastes energy for nothing. Tracing garbage collection is an algorithm that never ends. It is initiated heuristically from time to time and it is only known when it's done if it had any luck. Maybe this time we'll be lucky to collect something, maybe second time, maybe third time. You leave PC for a long time in the hope it will eventually be done its business and finally let you work, but this business never ends. Suddenly two applications run tracing garbage collection at the same time and start competing for unswapped RAM. Tracing garbage collection is likely to make several subsequent accesses to the same page, so one page can go to and from swap multiple times. In an office environments only boss's PC is likely to have lots of RAM, other PCs are as cheap as possible. Also, antivirus is forcefully deployed to every office PCs, and office employees can't get rid of it. Antivirus preserves RAM for in-memory signatures, making it even scarcer, and also checks every I/O including swap file driving freezes to complete insanity. That's where the hell on Earth is.
I asked tracing garbage collectors advocates if they can observe freezes like I do, and it turns out they put a lot of RAM into their PCs (like 16Gb on a notebook!!!), use it in a single user mode, and garbage collection works fine for them this way. In the hell they will have to work with their developments on the cheapest office PCs with antivirus forcefully deployed.
So I suggest you not to look at the cycle collection problem only. Learn to love reference counting, ENJOY IT and make users enjoy your slim programs. Make most of reference counting. Robust copy-on-write for nested structures. Database connection pools with wrapped connections where connections are returned to the pool immediately when their wrapper not referenced anymore. Network transparency. RAII.
And if you really have no other options, borrow from Mozilla XPCOM. By the way, on the Windows OS Mozilla XPCOM is told to have ABI identical to that of Microsoft COM, but not sure.