Ви можете взяти мову, відому як Swift, і перейменувати її на "Swift with ARC". Потім можна створити нову мову під назвою "Swift with GC" з точно таким же синтаксисом, але з меншими гарантіями щодо розміщення об'єктів.
У Swift з ARC, як тільки число посилань дорівнює 0, об'єкт піде. Під час збору сміття, якщо у вас слабке посилання, ви можете призначити це слабке посилання сильним посиланням на "відновлення" об'єкта. (У Swift, коли кількість посилань дорівнює 0, слабкі посилання нульові); це головна різниця.
І звичайно, Свіфт з ARC гарантує, що вбивство останнього опорного підрахунку негайно розселить об'єкт. Наприклад, у вас може бути клас FileWriter, коли вам заборонено одночасно існувати два екземпляри запису в один і той же файл. У Swift з ARC можна було б сказати oldWriter = nil; newWriter = FileWriter (...), і ви знаєте, що новий FileWriter створюється лише після видалення старого (якщо ви не зберегли іншого посилання навколо); в Swift з GC це не працює.
Інша відмінність полягає в тому, що в "Швидкому переході з ARC" об'єкти, на які посилаються лише сильні еталонні цикли, але фактично не доступні, гарантовано не будуть розміщені.
deinit
як ключового слова, так і пов'язаної з ним семантики - це справді те, що в мові прямо підраховує посилання, а не сферу реалізації.