Ponieważ sprawdzanie indeksów w czasie kompilacji nie jest możliwe. Rozumowanie o możliwych wartościach arbitralnych zmiennych jest gdzieś pomiędzy trudnymi i niemożliwymi nawet dla małych programów. Nikt nie chce mieć do:
- formalnie udowodnić, że indeks nie może być poza boiskiem, a
- zakodować, że dowód w systemie typu
... dla każdego slice/Vec/etc. dostęp. Bo właśnie to musisz zrobić, aby sprawdzać granice podczas kompilacji. Potrzebne jest zasadniczo pisanie zależne. Oprócz ewentualnego dokonywania sprawdzenia typu nierozstrzygalnego (i otrzymania programu do sprawdzenia typu znacznie trudniejszego), wnioskowanie typu staje się w ogóle niemożliwe (i znacznie bardziej ograniczone w najlepszym przypadku), typy stają się znacznie bardziej skomplikowane i bardziej rozwlekłe, a złożoność język znacząco się zwiększa. Wskaźniki te są w granicach, które można udowodnić tylko bez znaczącego dodatkowego wysiłku programisty w bardzo prostych okolicznościach.
Ponadto istnieje niewielka zachęta do pozbycia się kontroli granicznych. Żywoty ciągną swoją wagę prawie całkowicie eliminując konieczność zbierania śmieci - co jest ogromną, inwazyjną cechą o nieprzewidywalnych skutkach przepustowości, przestrzeni i opóźnień. Sprawdzanie czasu granicznego w drugiej ręce jest bardzo nieinwazyjne, ma mały i dobrze znany narzut, i może być selektywnie wyłączone w sekcjach o krytycznym znaczeniu, nawet jeśli cała reszta programu używa go w sposób swobodny.
możliwy duplikat [Dlaczego kompilator Rust zezwala na indeks poza zakresem?] (Http://stackoverflow.com/questions/24898579/why-does-rust-compiler-allow-index-out-of-bounds) – Shepmaster