Deep learning para entender Ruby | Source Code

Nardo Nykołyszyn
Bit Concept
Published in
3 min readDec 24, 2017

Después de un tiempo de usar Ruby (Y más si es tu primer lenguaje) te darás cuenta que hay métodos que realizan la misma función. Se suele pensar que incluso uno puede llegar a ser más rápido en tiempo de ejecución que el otro.

1.1 Big O notation schema.

La verdad es que el team de Ruby Core no se molestaría en agregar dos métodos que al parecer realizan las mismas funciones pero siendo uno más óptimo que el otro. Muchas veces lo que parece ser igual no es nada más que un alias, la razón de ésto es hacer el código más versátil y verboso. Un caso de estos es entre Array.length y Array.size. Ambos métodos retornan la cantidad de elementos de un Array, Hash o String.

Una manera de poder ver el código fuente de éstos métodos es usando el REPL de Ruby pry que agrega funciones muy interesantes entre ellas una llamada show-source. Para instalar ésta gema hacemos lo siguiente:

gem install pry --no-rdoc --no--ri

Una vez instalada, entramos en ella escribiendo en la consola: pry.

1.2 C functions

Como vemos en la imagen superior al ejecutar show-source y el método nos retorna su código en funciones de bajo nivel (Lenguaje C). Es el mismo código, sólo con diferentes nombres en los métodos. No es cuestión de Benchmarking, ambos funcionan exactamente igual.

De hecho, si quisieramos hacer un Benchmarking de ambos métodos sucedería esto:

1.3 Script para Benchmarking
1.4 Resultado de Benchmarking

Acá nos dice que hubieron pequeñas milésimas de segundos en donde size le gana a length, ésto sucede porqué nuestra CPU almacena en caché operaciones anteriores, proporcionando así el mismo resultado para la misma operación (Es el mismo código), por lo tanto vemos que al ejecutar el mismo código pero con el alias size, retorna el resultado más rápido.

Pry también tiene muchos métodos más que te serán útil para entender mejor tu código Ruby. Tambien hay una serie de gemas que te dan otros superpoderes:

Final.

¿Te gustó hacer ésta introspección a Ruby?

Escribe en los comentarios o en un gist el resultado de cualquier otro método, clase o módulo que probaste con show-source.

--

--

Nardo Nykołyszyn
Bit Concept

Software Engineer and Data Scientist | Reduce mutability as much as possible.