Weil die Überprüfung von Indizes zur Kompilierzeit nicht möglich ist. Das Nachdenken über die möglichen Werte von willkürlichen Variablen ist irgendwo zwischen hart und unmöglich sogar für kleine Programme. Niemand will müssen:
- formal beweisen, dass der Index nicht außerhalb der Grenzen sein kann und
- kodieren, dass der Nachweis in das Typsystem
... für jedes einzelne Scheibe/Vec/etc. Zugriff. Da müssen Sie zum Überprüfen der Kompilierung während der Kompilierung eine Überprüfung durchführen. Sie benötigen im Wesentlichen abhängige Typisierung. Neben der Möglichkeit, die Typüberprüfung unentscheidbar zu machen (und ein Programm zur Typüberprüfung erheblich härter zu bekommen), wird Typinkompensation im Allgemeinen unmöglich (und im besten Fall viel stärker eingeschränkt), Typen werden viel komplizierter und wortreicher und die Komplexität der Sprache steigt deutlich. Dass Indizes in Grenzen sind, lässt sich nur unter sehr einfachen Umständen ohne signifikanten zusätzlichen Programmieraufwand nachweisen.
Darüber hinaus gibt es wenig Anreiz, Grenzen Checks loszuwerden. Lebenszeiten ziehen ihr Gewicht, indem sie die Notwendigkeit der Garbage-Collection fast vollständig eliminieren - was ein riesiges, invasives Merkmal mit unvorhersehbarem Durchsatz, Raum und Latenz-Implikationen ist. Das Überprüfen der Laufzeitgrenzen ist dagegen sehr wenig invasiv, hat einen kleinen und bekannten Overhead und kann in leistungskritischen Bereichen selektiv ausgeschaltet werden, selbst wenn der gesamte Rest des Programms es großzügig verwendet.
mögliches Duplikat von [Warum lässt der Rust-Compiler den Index außerhalb der zulässigen Grenzen zu?] (Http://stackoverflow.com/questions/24898579/why-does-rust-compiler-allow-index-out-of-bounds) – Shepmaster