Vala управление памятью объектов основано на подсчете ссылок и имеет RAII (в том смысле, что его деструкторы называются детерминистически). Типичный вариант использования - создание графических интерфейсов, где издержки от пересчета часто незначительны. Вы можете использовать указатели и обойти пересчет, например, для совместимости или если вам нужна дополнительная производительность, но в большинстве случаев вы можете жить без указателей. Он также делает что-то умное, вы можете пометить ссылки как owned
или unowned
и передать право собственности, и во многих случаях он может исключить подсчет ссылок (например, если объект не экранирует функцию). Vala тесно связана с GObject / GTK, поэтому использовать ее имеет смысл, только если вы хотите работать в этой экосистеме.
Другим интересным кандидатом будет Rust . Хотя он также имеет указатели и сборщик мусора, оба являются необязательными. Вы можете писать программы полностью с эквивалентом интеллектуальных указателей C ++, с гарантией отсутствия утечек, и он поддерживает RAII. У него также есть понятие ссылочной собственности, как у Vala, но немного более сложное. По сути, Rust дает вам полный контроль над тем, как вы управляете памятью. Вы можете работать на уровне «голого металла» и даже написать ядро в нем, или вы можете работать на высоком уровне с GC, или чем-то промежуточным, и большую часть времени это защищает вас от утечки памяти или других указателей. связанные ошибки. Недостатком является то, что он довольно сложный, и, поскольку он все еще находится в разработке, все может измениться.