una tipos que programacion matriz matrices ejemplos ejemplo declarar como arreglos array arrays compiler-errors runtime-error rust language-design

arrays - tipos - ¿Por qué Rust comprueba los límites de la matriz en tiempo de ejecución, cuando(la mayoría de las otras verificaciones se producen en el momento de la compilación?



que es una matriz en programacion (1)

Leyendo la introducción básica :

Si intenta utilizar un subíndice que no está en la matriz, obtendrá un error: el acceso a la matriz se limita a límites en el tiempo de ejecución.

¿Por qué Rust comprueba los límites de la matriz en tiempo de ejecución, cuando parece que la mayoría de las otras comprobaciones ocurren en el momento de la compilación?


Porque la comprobación de índices en tiempo de compilación no es factible. El razonamiento sobre los posibles valores de las variables arbitrarias se encuentra entre lo difícil y lo imposible incluso para los programas pequeños. Nadie quiere tener que:

  1. demostrar formalmente que el índice no puede estar fuera de límites, y
  2. codificar esa prueba en el sistema de tipos

... para cada porción / Vec / etc. acceso. Porque eso es lo que tendría que hacer para realizar comprobaciones de límites en tiempo de compilación. Básicamente necesitas escribir dependiente. Aparte de hacer que la comprobación de tipos sea indecidible (y lograr que un programa compruebe mucho más), la inferencia de tipos se vuelve imposible en general (y mucho más restringida en el mejor de los casos), los tipos se vuelven mucho más complicados y la complejidad del lenguaje aumenta significativamente Que los índices estén dentro de los límites solo se puede probar sin un esfuerzo adicional significativo del programador en circunstancias muy simples.

Además, hay pocos incentivos para deshacerse de los controles de límites. Las vidas útiles aumentan su peso eliminando casi por completo la necesidad de recolección de basura, que es una gran característica invasiva con un rendimiento impredecible, implicaciones de espacio y latencia. La verificación de límites de tiempo de ejecución por otro lado es muy no invasiva, tiene una sobrecarga pequeña y conocida, y puede ser desactivada selectivamente en secciones de rendimiento crítico, incluso si el resto del programa la usa libremente.