Пам'ять (і блокування ресурсів) повертається в ОС у детермінованих точках під час виконання програми. Сам по собі керуючий потік програми достатньо, щоб знати, де, безумовно, може бути розміщений даний ресурс. Так само, як людський програміст знає, куди писати, fclose(file)
коли програма робиться з ним.
GC вирішують це, з'ясовуючи це безпосередньо під час виконання під час виконання потоку управління. Але справжнє джерело істини про контрольний потік - це джерело. Таким чином, теоретично слід визначати, куди потрібно вставити free()
дзвінки перед компіляцією, проаналізувавши джерело (або AST).
Підрахунок посилань - це очевидний спосіб цього втілити, але легко зустріти ситуації, коли покажчики все ще посилаються (все ще в області застосування), але вони більше не потрібні. Це просто перетворює відповідальність за ручне переміщення покажчиків у відповідальність за ручне управління сферою / посиланнями на ці вказівники.
Здається, можна написати програму, яка може прочитати джерело програми та:
- передбачити всі перестановки керуючого потоку програми --- з аналогічною точністю, як перегляд виконання програми в реальному часі
- відстежувати всі посилання на виділені ресурси
- для кожної посилання пройдіть весь подальший потік управління, щоб знайти найдавнішу точку, що посилання гарантовано ніколи не буде відхилено
- у цей момент вставити операцію про розташування у цьому рядку вихідного коду
Чи є щось там, що це вже робить? Я не думаю, що Rust або C ++ розумні покажчики / RAII - це те саме.