Found a couple of programming languages with a concept of memory ownership. They manage memory in compile time.
https://aglang.org/
Argentum - a new programming language that is safe, scalable, fast and tiny.
It is memory safe, type safe, null-safe, array-index safe and so on. It is safe.
It automates memory management, and object hierarchy management.
Unlike Rust and Swift it guarantees absence of memory leaks and doesn't force you to use unsafe hacks. It has no unsafe mode at all.
Unlike Java, Go, JS and Python, it doesn't use garbage collector, so no sudden pauses and overheads, and leaks.
It has precise predictable object disposal moments, so objects can control any resources, not just memory.
It compiles to machine code producing tiny executables with no extra dependencies.
It has multithreading without deadlocks and data races.
It is simple and expressive, crazy fast and memory-effective.
And its interop with C is mostly a pass-through.
================
https://newlang.net/
В NewLang реализовано автоматическое управление памятью без сборщика мусора.
За основу была взята модель “владения” из языка Rust, но она переработана под концепцию сильных и слабых указателей (аналоги shared_ptr и weak_ptr из С++), где каждое значение в памяти может иметь только одну переменную-владельца с сильным указателем.
И когда такая переменная-владелец уходит из области видимости, счетчик ссылок уменьшается и при достжении нуля память освобождается.
Фактически, это автоматическое управление памятью с помощью подсчёта ссылок на этапе компиляции и без использования сборщика мусора.
Существование ссылок на объекты предполагает и возможность одновременного доступа к данным из нескольких потоков выполнения. Из-за чего управление памятью включает в себя и элементы межпотокового взаимодействия, так как совместное владение ссылками по любому будет требовать каких либо механизмов синхронизации доступа к разеделяемой памяти объектов.
Поэтому, при определении объекта указывается, какие типы ссылок допускается создавать на него, а так-же какая используется модель совместного доступа к переменной.
Весь механизм подсчета ссылок и проверки их корректности реализован на уровне синтаксиса. В рантайме выполняется только контроль идентификатора потока для однопоточных ссылок, а все остальные проверки выполняются во время компиляции.