rv: La pieza perdida para la felicidad del programador Ruby

5 min read Original article ↗

Ruby es un lenguaje de programación creado para la felicidad del programador, pero al parecer esta felicidad no contemplaba el proceso de instalación del lenguaje. Si vas a la página oficial del lenguaje encontrarás un listado de soluciones para instalar y manejar versiones de Ruby. Pero casi todas tienen un problema: debes compilar la versión en local y el tiempo que tome eso dependerá de qué tan rápida es tu CPU.

Ahora eso está cambiando, una nueva herramienta llamada rv ha surgido. Se describe como “una forma extremadamente rápida de manejar tus versiones de Ruby y gemas”. En este post quiero explicar un poco cómo está funcionando y por qué es tan rápido en comparación con las soluciones anteriores, cómo puedes utilizarlo para instalar Ruby y el futuro de la herramienta.

ruby-build and others

Hasta el momento la comunidad de Ruby tenía un par de herramientas para realizar la instalación y el manejo de versiones de Ruby en sistemas Unix-like y Windows. El problema con estas herramientas es que la mayoría termina descargando el código fuente del intérprete y compilando en local.

Este proceso, aunque ha funcionado hasta el momento, tiene un par de complicaciones. Veamos el caso de ruby-build, este es el instalador que utiliza rbenv y es una de las formas más utilizadas para sistemas Unix-like. Esta herramienta no verifica por sí sola que tengas todas las dependencias necesarias instaladas para poder compilar Ruby; es más, tienes que verificar de forma manual en un listado todas las dependencias según tu sistema.

Luego, los pasos que van a seguir serán (en resumen):

  • Descargar un tarball oficial
  • Extraer los archivos
  • Compilar

Y el problema está en este último paso, dependiendo de tu CPU el proceso podrá tomar un minuto o más. Entonces el proceso en general no es rápido, te podrás encontrar con dependencias faltantes, lo que hará que tengas que ejecutar el proceso nuevamente. Y esto último te lo comento porque me pasó varias veces cuando iba a saltar a una versión nueva que dependía de librerías que las versiones anteriores no tenían. O directamente puedes tener problemas de compatibilidad muy comunes con OpenSSL.

¿Por qué compilar en local? Ruby está escrito mayormente en C, entonces cuando tú o tu gestor descarga el “tarball oficial” lo que obtienes es solo código, pero lo que tú necesitas no es código, es un ejecutable que pueda interpretar tu código escrito en Ruby. Es ahí que tú o tu gestor usan un compilador de C (gcc probablemente) para que según las características, la arquitectura de tu CPU y las dependencias que mencioné anteriormente logre generar este ejecutable.

rv

rv por otro lado está descargando directamente ejecutables precompilados que se ajustan a la arquitectura de tu CPU, los descomprime y configura todas las variables de entorno para que puedas usarlo. Entonces el proceso dependerá más que nada de tu velocidad de internet que de tu capacidad de procesamiento.

¿Solo eso?

No, aunque ya instalar Ruby en cosa de segundos y no de minutos es un gran avance, rv pretende ser un gestor más completo para todo lo que quieras hacer trabajando con este lenguaje de programación. Ya sea gestionar las versiones de Ruby como también las dependencias de tus proyectos. De cierta forma unifica lo que comúnmente harías con diferentes herramientas como bundler, rubygems y algún gestor de versiones, pero mucho más rápido y más simple.

rv actualmente está en desarrollo pero ya cumple con su función más importante: gestionar versiones de Ruby. Además puedes probar otros comandos como la ejecución de scripts rv run, instalar gemas que uses en forma de CLI de forma aislada con rv tool install o instalar las gemas de tu proyecto con rv clean-install. Te invito a darle un vistazo a su repositorio y los objetivos hacia los cuales apunta.

Instalar Ruby con rv

Instalar Ruby con rv es bastante simple, aquí te dejo los pasos:

  1. Instala rv usando el script de instalación:
# Unix-like
curl -LsSf https://rv.dev/install | sh

# Windows
powershell -ExecutionPolicy Bypass -c "irm https://rv.dev/install.ps1 | iex"
  1. Ejecuta el comando para instalar la última versión estable de Ruby:
  1. Comprueba la instalación:

Ok, si llevas un rato programando en Ruby y te tocó instalar cualquier versión compilando en local esto probablemente te sorprendió. Sí, instalaste Ruby en menos de un minuto (probablemente). Si ya tienes un gestor y quieres simplemente probarlo no deberías tener conflictos, cuando yo me cambié tenía rbenv instalado y no tuve ningún problema. Si luego quieres eliminarlo puedes hacerlo borrando los directorios rv cache dir, rv ruby dir y finalmente eliminar el ejecutable (y si es que agregaste alguna integración shell también).

Finalmente

La idea de este tipo de herramientas no es nueva, es más, rv está muy inspirada en lo que es uv para Python, pero en Ruby creo que toma mayor sentido tener este tipo de herramientas. Como mencioné en un principio, Ruby tiene como objetivo la felicidad del programador, pero no solo su sintaxis es la que influye en cómo el programador se sentirá, también lo harán las herramientas que rodean su experiencia con el lenguaje y es por eso que creo que este proyecto, independiente de estar (el proyecto y su creador) en medio de “incidentes”, reduce complejidad (múltiples herramientas en una) y reduce tiempo (segundos y no minutos), lo que finalmente se puede traducir en una contribución a esa felicidad de la que tanto se habla.

¿Y tú que opinas?