ポインタによる効率的なメモリ操作を可能にする一方、初期化されていない、有効なオブジェクトを指さないポインタ「ダングリングポインタ」や、確保したメモリを解放しないまま残り、メモリリソース枯渇の原因となる「メモリリーク」などによるプログラムの欠陥の原因になるなどの問題を生じさせてきました。
ネイティブコンパイラ言語では、動的にポインタの有効性などをチェックするのは性能とのトレードオフの関係にあり、一般的には行われていません。JavaやC#といった中間言語型の言語では動的なチェックを行っていますが、性能的には不利になります。
Rustでは、コンパイル時にメモリ安全性を確保するためのボローチェッカーを備えています。ボローチェッカーとは、メモリなどのリソースの所有者とリソースの生存期間(ライフタイム)の静的解析をする仕組みのことです。Rustでは、リソースと所有者を1対1にするという制約を設けることで、ある変数がオブジェクトを所有するとして、そのオブジェクトは他の変数では所有できないとし、変数の消滅とオブジェクトの破棄というライフタイムを管理できます。
ライフタイムを管理できるのでオブジェクトの破棄タイミングをコンパイラが把握でき、不要になったタイミングですぐに破棄できます。これはGC(ガベージコレクタ)が不要ということであり、GC特有の、「プログラマーからするとオブジェクトの破棄タイミングが分からない、コントロールできない」という問題と無縁になります。