Warum überprüft Rust Array-Grenzen zur Laufzeit, wenn (die meisten) anderen Prüfungen zur Kompilierzeit stattfinden?

8

Lesen Sie die grundlegende Einführung :

  

Wenn Sie versuchen, einen Index zu verwenden, der nicht im Array enthalten ist, erhalten Sie einen Fehler: Der Zugriff auf den Array wird zur Laufzeit mit einem Häkchen versehen.

Warum überprüft Rust Array-Grenzen zur Laufzeit, wenn die meisten anderen Prüfungen zur Kompilierzeit erscheinen?

    
haiqus 08.02.2015, 00:56
quelle

1 Antwort

17

Die Überprüfung von Indizes zur Kompilierzeit ist nicht möglich. 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 das müssen:

  1. formal beweisen, dass der Index nicht außerhalb der Grenzen sein kann, und
  2. kodiere diesen Beweis in das Typsystem

... für jedes einzelne Segment / Vec / etc. Zugriff. Das müssen Sie tun, um während der Kompilierung Überprüfungen durchzuführen. Sie benötigen im Wesentlichen abhängiges Tippen. Abgesehen von der Möglichkeit, die Typüberprüfung unentscheidbar zu machen (und ein Programm zur Typüberprüfung wesentlich härter zu bekommen), wird Typinferenz im Allgemeinen unmöglich (und im besten Fall viel eingeschränkter), 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.

Außerdem gibt es wenig Anreiz, Grenzen zu beseitigen. 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 geringen und bekannten Overhead und kann in leistungskritischen Bereichen selektiv ausgeschaltet werden, selbst wenn der gesamte Rest des Programms es großzügig nutzt.

>     
delnan 08.02.2015, 01:51
quelle