GC was dropped from the Ada2005 standard, because no Ada83 compiler ever implemented it.
Ada provides more ways to automate memory management, though.
Controlled types are Ada's version of RAII, used for arenas and smart pointers.
Also in Ada you can dynamically allocate everywhere, so a common pattern is to use a subroutine parameter to do stack allocation. If it fails, by throwing an exception, recall the subroutine with a smaller size.
1) No manual memory management, everything is static and you have memory safety
2) Garbage collection, you have memory safety
3) Manual memory management, you lose memory safety
Rust provides memory safety in the case of manual memory management.