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

¿Qué lenguaje de programación debo aprender a codificar software para la industria química para que puedan cambiar el valor de un ejemplo de vapor?

¿Cómo grabar o descargar desde LiveLeak? Hay un software que conozco, pero ¿cuál debo usar?

¿Cuál es la parte más difícil de automatizar con éxito un sistema?

¿Cuáles son los algoritmos que todo profesional de software debe practicar para descifrar entrevistas de codificación?

¿Cuáles son las herramientas de automatización de control de calidad de software más solicitadas en este momento?

¿Por qué alguien querría trabajar en Amazon como desarrollador de software?

¿Cómo funciona Squwaka (o cualquier otro software que proporcione actualizaciones de fútbol en tiempo real)?

¿Apple tiene una guía para desarrolladores de Apple Pay?

¿Por qué bancos como JP Morgan y Bank of America Merrill Lynch utilizan Python para reemplazar los sistemas históricos heredados construidos en Java / C ++?

Cómo ayudar a mi equipo de software a mejorar

Soy ingeniero de software (contratista) en una empresa basada en productos. Me estresan las palabras que dice mi TL. ¿Cómo puedo superar esto?

¿Cuál es el signo del equipo de desarrollo de software mal administrado?

¿Qué última tecnología es mejor para crear una aplicación web realmente rápida y robusta que reciba un tráfico enorme?

¿Cómo cambian los estilos de codificación en el transcurso de una carrera en ingeniería de software?

¿Altair BASIC y DOS son el mismo software?