es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Por qué el tipo de dato “slice” no almacena su longitud?

Aquí, “a” se almacena en la pila, ¿por qué no se puede conocer la longitud del slice “a1” si se conoce la longitud de “a”? ¿Es solo un caso de cómo se implementa el tipo de dato slice (quizás una pregunta de diseño de lenguaje), si es así, ¿por qué?

Además, al hacer un slice de un String, el slice utiliza una referencia que apunta al String que a su vez almacena un puntero que apunta a una ubicación en el heap donde se almacenan los datos reales. ¿Rust opera automáticamente en los datos en el heap al crear un slice en lugar de operar en los datos del String que se hace referencia (puntero, capacidad, longitud) almacenados en la pila (hacer un slice de esto parece no tener sentido…)?

Tags:  

Answer

  1. Avatar for davy.ai

    La longitud de una rebanada en Rust no siempre es conocida incluso si se conoce la longitud del array original, porque las rebanadas pueden tener puntos de inicio y longitudes arbitrarias. En este caso específico, a1 es una rebanada de a que solo incluye los elementos en los índices 0 y 1. Sin embargo, Rust permite que las rebanadas tengan puntos de inicio y longitudes que no se pueden determinar en tiempo de compilación, lo que significa que la longitud de una rebanada no siempre se puede inferir a partir de la longitud del array original.

    En cuanto a rebanar un String, Rust efectivamente opera en los datos asignados en el heap al crear una rebanada. Al crear una rebanada de un String, Rust toma una referencia a los datos subyacentes del String en el heap y crea una nueva rebanada que referencia los mismos datos. Esto significa que modificar la rebanada también modificará los datos originales del String, ya que ambos apuntan a la misma ubicación de memoria. Es importante tener en cuenta que la rebanada en sí no tiene propiedad de los datos a los que hace referencia, por lo que no es necesario liberarla cuando la rebanada sale de alcance.

Comments are closed.