Oh, querida, esta es una pregunta complicada, porque Ruby es un lenguaje dinámico de tipo pato con tablas de símbolos de tiempo de ejecución. No soy un experto en componentes internos de Ruby (de hecho, no sé nada de ellos), por lo que la mayor parte de esto es una suposición basada en mis experiencias con Perl, Python y PHP, y mi modesta experiencia con Ruby como programador de Ruby . Por lo tanto, puedo estar equivocado en algunos de los detalles a continuación, ya que estoy haciendo suposiciones sobre cómo se implementa el tiempo de ejecución de Ruby.
Voy a omitir el proceso de convertir el texto “x = 10” en una declaración simbólica, en parte porque no sé qué estrategia utiliza Ruby para esto. En cualquier caso, terminas con una representación intermedia (probablemente un bytecode de algún tipo) que codifica “Asignar a la variable llamada ‘x’ el valor constante entero ’10′”. En este caso, “x” probablemente será lo que se conoce como una “cadena interna”: un puntero en una tabla de cadena global, apuntando a una cadena con el valor “x”, y “10” probablemente será una constante entera, un puntero en una tabla constante global que contiene el valor “10”. (Es posible que Ruby use un número entero sin caja 10 aquí, pero dudo mucho dado lo que he escuchado sobre la falta de eficiencia del intérprete de Ruby).
El ejecutor de código de bytes, cuando encuentra esta instrucción, busca en todas las tablas de símbolos actualmente activas (en orden de alcance, de más interno a más externo) para ver si tiene un enlace para el símbolo “x” buscando en cada tabla de símbolos una clave que coincida con puntero en la tabla de cadena global mencionada anteriormente. Si se encuentra uno, la primera entrada encontrada se modificará para apuntar a la constante entera mencionada anteriormente (haciendo que se olvide cualquier valor anterior, lo que debería reducir el recuento de referencia de ese valor y posiblemente calificarlo para la recolección de basura). Si no se encuentra ninguno, se agregará una entrada de la tabla de símbolos a la tabla de símbolos activa más interna con una clave igual a esa constante de cadena interna y un valor que apunta a la misma constante entera.
- Para un ingeniero de software senior, ¿contrataría a un maestro en ingeniería de software con experiencia pero sin experiencia profesional en el campo?
- ¿Cuáles son los aspectos más importantes de las pruebas de software?
- ¿Por qué las aplicaciones o los juegos a menudo ofrecen la opción de idioma inglés británico o estadounidense? ¿Es la diferencia realmente notable e importante?
- ¿Qué será de los ingenieros de software una vez que las computadoras aprendan a codificarse?
- ¿Qué es un buen complemento de membresía en WordPress?
La constante de cadena ‘x’ y la constante entera ’10’ probablemente se crean durante el proceso de tokenización, ya que la tokenización solo ocurre una vez y, por lo tanto, crearlas en esta fase será más eficaz que crearlas una y otra vez en el momento en que se usan.
Obviamente, este proceso implica una serie de búsquedas en la tabla de símbolos (probablemente tablas hash agrupadas), y en el caso de que deba crearse una nueva entrada, la posible asignación de memoria para almacenar la nueva entrada de la tabla hash, así como una posible revalorización de la tabla tabla si la nueva entrada supera el umbral de repetición; No sé qué estrategias de hashing usa el tiempo de ejecución de Ruby. Además, cuando se sobrescribió un valor anterior, es probable que ese valor esté sujeto a desasignación si ese fuera el último lugar al que se hace referencia.
Perdón por la falta de detalles; como dije, no estoy familiarizado con los componentes internos de Ruby, pero era A2A y por eso intenté responder de todos modos.