Линейные типы и логика разделения великолепны, но могут потребовать немного усилий программиста. Написание безопасного связного списка в Rust может быть довольно трудным, например.
Но есть альтернатива, которая требует гораздо меньших усилий программиста, хотя и с менее строгими гарантиями. (Довольно старый) поток работы - гарантировать безопасность памяти, используя (как правило, стек) областей. Используя вывод области, компилятор может статически решить, в какую область следует поместить часть выделенных данных, и освободить область, когда она выходит из области видимости.
Вывод области доказуемо безопасен (не может освободить доступную память) и требует минимального вмешательства программиста, но он не является «полным» (то есть он все еще может утечь память, хотя определенно намного лучше, чем «ничего не делать»), поэтому обычно он объединяется с GC на практике. MLtonКомпилятор ML Kit использует регионы для устранения большинства вызовов GC, но у него все еще есть GC, потому что в противном случае он все равно будет пропускать память. По словам некоторых из первых пионеров в области, логический вывод региона не был изобретен для этой цели (я думаю, что это было сделано для автоматического распараллеливания); но оказалось, что его можно использовать и для управления памятью.
В качестве отправной точки я бы сказал, что Маддс Тофте и Жан-Пьер Талпин написали статью «Внедрение типизированного λ-исчисления при вызове по значению с использованием стека регионов». Для большего количества работ по выводу региона, посмотрите другие работы М. Тофте и Ж.-П. Талпин, некоторые из работ Пьера Жувело, а также серия работ Грека Моррисетта, Майка Хикса и Дэна Гроссмана о Циклоне.