Desde el intérprete hasta el metal desnudo, cuando asigna una variable en Ruby tal que ‘x = 10’, ¿qué serie de eventos ocurren?

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.

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.

More Interesting

¿Vale la pena la maestría en administración de software en Carnegie Mellon?

¿Qué lugar es peor en verano entre Mumbai y Kolkata?

¿Qué tan rápido será la computadora en 10 años?

¿Cuáles son algunas técnicas de programación inteligentes que no se usan con la frecuencia suficiente?

¿Cómo se crean las actualizaciones de software?

¿Es posible conseguir un trabajo como ingeniero de software en Google sin haber estudiado conceptos informáticos como algoritmos y estructuras de datos?

¿Qué pasaría si las compañías de software como Microsoft o Apple lanzaran sus bases de código?

¿Cuál es la mejor manera de calcular el costo total de propiedad de los marcos web?

Tengo una oferta de Amazon (Seattle) para el puesto de analista de negocios. Sin embargo, el salario base es menor que mi base actual. ¿Es bueno aceptar la oferta?

Me acabo de graduar de la universidad y comencé a trabajar como ingeniero de software en Google. ¿Qué debo hacer ahora para maximizar el éxito en mi carrera?

¿Debo comenzar una carrera oficial como ingeniero de software a los 17 años, o esperar hasta que me gradúe de la universidad?

¿Cuáles son los diferentes tipos de programación como OOP?

¿Qué marcos e idiomas se usaron para desarrollar las siguientes aplicaciones (full stack) y por qué: 1) WhatsApp 2) Viber?

¿Qué programa sería más beneficioso en términos de trabajo y salario, informática o ingeniería de software?

¿Qué hace un integrador de sistemas de TI?