Ruby está viva y bien y pensando en los próximos 25 años.
NoticiasLa comunidad global de Ruby es sinónimo de amabilidad y apoyo, que utiliza la frase "Matz es agradable y por eso somos agradables", que comúnmente se abrevia a MINASWAN. Matz sabe cómo encantar a su público, y comenzó su discurso de apertura en la Conferencia de Bath Ruby con el comentario: “A los japoneses nos encantan los baños, tomamos baños todos los días en lugar de tomar duchas, lo que significa que Bath es bueno, esta es una ciudad muy bonita, por lo que somos buenos BINSWAN " Crédito: Dan Bartlett
¿Cómo nace el software? No es exactamente la primera pregunta que esperas escuchar por un orador principal en una conferencia de programación, pero esta es la genial y japonesa creadora del lenguaje de programación Ruby, Yukihiro. “Matz” Matsumoto, y está hablando con más de 500 desarrolladores de Ruby en la Conferencia anual de dos días en Bath Ruby.
El lenguaje Ruby celebró 25 años en febrero, aunque oficialmente el primer lanzamiento de Ruby, 0.95, fue en diciembre de 1995. En respuesta a su propia pregunta filosófica, Matz sugiere que el software nace cuando se le llama. En el caso de Ruby, que fue dos años antes, el 24 de febrero de 1993, de ahí la gran celebración en Tokio y en todas las redes sociales. Matz dice que quería ponerle el nombre de una joya: “Ruby era breve, Ruby era hermosa y más cara, así que llamé a mi idioma Ruby,” dice bromeando con su comunidad..
Sin embargo, Matz no estuvo en el Reino Unido por primera vez en cinco años solo para comer pastel de cumpleaños. Ruby puede haber alcanzado la madurez, pero todavía hay dudas sobre si puede sobrevivir otros 25 años. Al igual que su creador, el lenguaje Ruby es muy agradable y se convierte en seguidores apasionados. La sintaxis, por ejemplo, es muy legible pero expresiva de una manera concisa y como lenguaje de programación dinámico, reflexivo, orientado a objetos y de propósito general, es intuitivo y fácil de aprender. Ruby intenta no restringir a quienes lo usan o, como suele decirse a Matz, se cita: “Ruby está diseñado para hacer felices a los programadores..”
Pero no todos son felices. La popularidad del lenguaje Ruby se ha visto reforzada durante muchos años por el éxito del marco de la aplicación web Ruby on Rails (RoR) que dominó la escena web, especialmente entre las nuevas empresas que querían algo que se ocupara de gran parte del trabajo pesado. Esa mejora dominante hizo que Ruby subiera al quinto lugar en el ranking de idiomas de RedMonk en 2012, que usa una combinación de idiomas de GitHub y Stack Overflow para evaluar la popularidad de un idioma, [desde entonces se ha reducido a octavo].
Pero RoR, aunque popular, no es la superestrella que fue y se ha enfrentado a una competencia feroz debido a que temas como el escalamiento se han convertido en una preocupación mayor para las compañías web. El marco de JavaScript Node.js, por ejemplo, se ha vuelto popular, ya que requiere menos memoria para manejar numerosas conexiones debido a sus funciones de devolución de llamada..
La posición de Ruby entre los diez principales lenguajes de programación ha caído lentamente en los rankings de RedMonk desde 2012, en el Índice de popularidad del idioma Tiobe, ha caído dentro y fuera del top 10, pero eso es probablemente un reflejo de haber alcanzado la madurez y la dominación menguante de El framework de aplicaciones web Ruby on Rails..
(Imagen: © Redmonk.com)Está claro que Matz está consciente de que la adopción de cualquier lenguaje de programación se ve estimulada por los proyectos y marcos que crecen a partir de la comunidad y el ecosistema de un idioma. RoR fue un ejemplo sorprendente de eso, y no generalmente de los idiomas mismos, incluso si Ruby engendra Mucho amor de sus usuarios. Así que, aunque estaba dispuesto a expresar su pesar por los errores pasados que había cometido en su lenguaje en la Conferencia de Bath Ruby, también quería definir el camino a seguir para abordar los problemas de rendimiento y escala que los desarrolladores tienen para no usar Ruby.
El enfoque de Matz para abordar los problemas clave también tiene en cuenta dos tendencias clave que ve para el futuro: escalabilidad y, lo que él llamó, el compañero más inteligente..
Para combatir la escalabilidad y crear una mayor productividad, Matz cree, “Ejecución más rápida, menos código, equipo más pequeño [son] las claves para la productividad.”
Las computadoras son cada vez más rápidas pero no es suficiente, “Necesitamos una ejecución más rápida porque necesitamos procesar más datos y más tráfico, reconoce Matz.. “Estamos llegando al límite del rendimiento de los núcleos. Es por eso que Ruby 3.0 tiene el objetivo de ser tres veces más rápido que Ruby 2.0” o lo que Matz llama 'Ruby3x3'. “Esto es facil de decir” Matz admitió y en los días de 1.8, dice que Ruby fue “demasiado lento” y fue un error.
El trabajo de Koichi Sasada en YARV (otra máquina virtual de Ruby) mejoró el rendimiento de Ruby 1.9, y “Desde entonces,” dice matz, “hemos estado trabajando duro para mejorar el rendimiento de la máquina virtual, pero no es suficiente.”
Tiempo para JIT
Para mejorar aún más el rendimiento, Ruby está introduciendo la tecnología JIT (Just-In-Time), que ya es utilizada por JVM y otros idiomas.. “Así que hemos creado un prototipo de este compilador JIT para que este año, probablemente el día de Navidad, se lance Ruby 2.6.,” Matz confirmado.
Puede probar la implementación inicial del compilador MJIT en la versión preliminar 2.6 2.6. Actualmente, puede verificar y compilar programas Ruby en código nativo con la opción --jit, pero Matz dice que es “no optimizado” aunque para “Al menos el trabajo intensivo de CPU se ejecuta dos veces más rápido que en Ruby 2.0,” que él dice “suena prometedor y ofrece mucho espacio para mejorar el rendimiento del compilador JIT”. Para tareas intensivas de CPU, en particular, Matz parecía confiado en que serían capaces de lograr la mejora de rendimiento tres veces.
De acuerdo con los comentarios encontrados en el código MJIT por John Hawthorn, el prototipo actual del compilador JIT tiene un enfoque bastante inusual ya que utiliza los compiladores C, GCC y LLVM Clang, para la implementación y aunque el código Ruby es de un solo hilo, el MJIT se compila en un segundo hilo.
Probablemente, Shannon Skipper proporciona la explicación general más clara de cómo funciona el MJIT:
“Con MJIT, ciertas instrucciones de Ruby YARV se convierten a código C y se colocan en un archivo .c, que GCC o Clang compilan en un archivo de biblioteca dinámica .so. La RubyVM puede usar ese código nativo precompilado y en caché de la biblioteca dinámica la próxima vez que RubyVM vea esa misma instrucción YARV.
Matz también cree que la escalabilidad debería significar crear menos código como “Más código es más mantenimiento, más depuración, más tiempo, menos productividad,” y él bromeó “mas pesadilla.”
Yukihiro “Matz” Matsumo, el científico informático japonés que creó Ruby, estuvo en el Reino Unido para dirigir el primer desafío de pirateo para los aspirantes a la lengua, que se celebró en Cookpad en Bristol, y para hablar en la Conferencia Bath Ruby.
Sin embargo, menos código Ruby no significará cambios significativos en la sintaxis del lenguaje en el futuro. En gran parte porque hay poco espacio para el cambio: “Nos hemos quedado sin personajes. Casi todos son utilizados.,” dice matz.
Al ser un exponente del desarrollo sin ego, tampoco está preparado para cambiar la sintaxis por el bien de su autoestima y ver los programas Ruby existentes rotos, por lo que tuvo cuidado de decir: “No vamos a cambiar tanto la sintaxis de Ruby.”
El proceso también debe ser manejado por equipos más pequeños, según Matz, para manejar la escalabilidad y aumentar la productividad: “Si tu equipo es más grande que el hecho de que pueden comer dos pizzas,” citando al CEO de Amazon Jeff Bezos 'Two-Pizza Rule “entonces tu equipo es demasiado grande.” Francamente, eso puede depender de quién está en tu equipo y de cuánto les gusta la pizza, pero la idea, dice Matz, se basa en la experiencia personal, “Si su equipo es más grande, entonces necesita más comunicación y la comunicación en sí misma es el costo.”
Más abstracción
En los últimos años ha habido debates bastante acalorados sobre la necesidad de más abstracciones de Ruby que brinden servicios para que los desarrolladores creen aplicaciones adecuadas para diferentes campos, por lo que fue interesante escuchar a Matz decir que Ruby necesitaba “más abstracción”, y mencionando el uso de Ruby on Rails de la abstracción de Model-View-Controller (MVC) como ejemplo. El creador de Ruby no creía que fueran perfectos. “Pero proporcionan el tipo de abstracción que es vital para la productividad en el futuro..”
Una de las abstracciones clave que elaboró fue un proyecto de abstracción concurrente llamado Guild.
“Una cosa que lamento en el diseño de Ruby fue el hilo [...] es demasiado primitivo,” Matz lo admite. Pero Ruby es víctima de su propio éxito: el lenguaje es utilizado por tanta gente, por lo que Matz siente que es demasiado tarde para eliminar el hilo..
“Creo que está bien incluir una nueva abstracción.,” se aventuró “y desalentar el uso de hilos.” en el futuro. "Guild es el experimento de Ruby para brindar un mejor enfoque. Guild está totalmente aislado,” Matz le dijo a la audiencia en Bath..
“Básicamente no tenemos un estado compartido entre los gremios. Eso significa que no tenemos que preocuparnos por compartir el estado, por lo que no tenemos que preocuparnos por los bloqueos o exclusivas mutuas. Entre los gremios nos comunicamos con un canal o cola..”
Matz espera enviar la abstracción concurrente de Guild en Ruby 2.7 o 2.8.
Otro proyecto con nombre en código que Ruby tiene en las obras es Steep. Este es un intento de análisis de tipo estático para Ruby: “Es difícil analizar la información del tipo de Ruby, porque Ruby es un lenguaje de tipo dinámico, por lo que puede hacer cualquier cosa con todos los tipos,” explicó Matz. Algunos subconjuntos de Ruby se pueden escribir de forma estática, por lo que Matz dice que pueden agregar esas comprobaciones de tipo estático, que son “tipo de información de tipo definida por el usuario de TypeScript [...]. Vamos a inferir tanto como sea posible y estamos tratando de obtener información de esos archivos externos de tipo definido o del análisis de tipo de perfil de tiempo de ejecución ... ”
Según este análisis, sugiere Matz, los desarrolladores podrán detectar más errores en el momento de la compilación, “No vamos a implementar el 100% de detección de seguridad, no es posible para Ruby, pero podemos detectar 20-40% de errores,” lo que Matz dice es mucho mejor que nada en absoluto.
Ruby no se sintió muy muerta en la conferencia Bath Ruby, donde más de 500 desarrolladores se reunieron durante dos días en oradores y talleres (y karaoke). La conferencia anual es el mayor evento de desarrollo de Ruby en el Reino Unido y el primer evento en cinco años en ser anfitrión de Yukihiro “Matz” Matsumoto, el creador de Ruby..
(Imagen: © Bath Ruby)Matsumoto también tocó a Ruby convirtiéndose en una “compañero más inteligente” así como el mejor amigo del programador. “Estamos ahora al comienzo de las computadoras más inteligentes, por lo que, por ejemplo, RuboCop [analizador de código estático] es una forma de ayudarlo,” aunque, Matz comentó a muchas risas en la audiencia, él es “No soy un gran fan del libro de reglas predeterminado de RuboCop.” Matz sugirió que en el futuro, cuando compile un programa “Ruby podría sugerir [por ejemplo] 'Llamas a este método con una cadena de argumento pero [esperas] llamaste a este método con un entero'”. Hablando con él después de su discurso principal, Matz elaboró un poco más sobre sus esperanzas de la interactividad de la programación, que acordó que sonaban como el Jarvis de Tony Stark. Matz dice que esencialmente quiere ver “una IA [que] interactuará conmigo para organizar un mejor software.”
Cuidado con la brecha
El cambio trae consigo la posibilidad de un software que ya no funciona según lo previsto o en absoluto. Es una preocupación que persigue a Matz de errores pasados: “En el pasado hicimos una gran brecha, por ejemplo entre 1.8 y 1.9,” dice matz. “Hicimos una gran brecha e introdujimos muchos cambios importantes, de modo que nuestra comunidad se dividió en dos durante cinco años.”
Aunque este tipo de cosas ha sucedido en el pasado, el ejemplo clásico de Python 2 y Python 3, Matz ve esto como una tragedia: “No volveremos a cometer ese error, así que haremos una evolución continua. Agregaremos el compilador JIT a 2.6 y no esperaremos a Ruby 3.0, agregaremos algún tipo de abstracción concurrente en el futuro en Ruby 2.7 a 2.8, pero no será un cambio importante. […] Lo tendremos para que cada programa de Ruby 2 se ejecute en Ruby 3.”
Revertir la trayectoria lenta de Ruby hacia abajo no va a ser una tarea fácil y Matz parece darse cuenta de esto. Comentando al ver los resultados recientes de la Encuesta de desarrolladores de desbordamiento de pila en la mañana de la presentación, su sonrisa desapareció brevemente: “Go y Rust son los idiomas más queridos y, por desgracia, Ruby no está en la lista. Creo que Ruby volverá a calentarse en el futuro. La gente ama las nuevas tecnologías. Hace diez años, Ruby estaba realmente caliente, debido a Rails. En estos días Ruby no se considera caliente, pero es estable..“
Ruby, sin embargo, ha cruzado esa brecha hacia la madurez y Matz no tiene intención de rendirse: “Ruby es un buen lenguaje para ayudarte a ser productivo y quiero que Ruby sea así para siempre, si es posible. Eso significa que tenemos que evolucionar continuamente para siempre, por lo que no podemos detenernos; no podemos parar”
Parte de ese impulso se refleja en el primer Ruby Hack Challenge realizado fuera de Japón. Esto se llevó a cabo la semana pasada en la nueva sede internacional de Cookpad, una plataforma para compartir recetas que emplea a los desarrolladores de Ruby en Bristol. Estos desafíos son una oportunidad para que los aspirantes a comisionados aprendan cómo extender las funciones de Ruby, corregir errores y mejorar el rendimiento de Ruby.
Según Miles Woodroffe, CTO de Cookpad, el principal patrocinador de la conferencia de Bath Ruby, este truco se centró en el intérprete de Ruby, que le indica a las computadoras cómo ejecutar programas escritos en código Ruby..
Uno de los objetivos del truco permitió a los participantes contribuir directamente a la próxima versión del intérprete Ruby.
A medida que se acerca el lanzamiento de Ruby 3, programado de manera no oficial para 2020, está claro que Matz desea continuar brindando una herramienta que lo ayude a concentrarse en los aspectos divertidos y agradables de la programación..
Dos cosas son evidentes cuando hablas con Yukihiro. “Matz” Matsumoto. Primero, que hará todo lo que pueda para permitir que Ruby sobreviva y prospere y, segundo, que se divierta haciendo lo que hace. Le apasiona Ruby y su comunidad y su perspectiva es bastante simple: la programación es divertida, se divirtió durante los últimos 25 años haciendo Ruby y a la edad de 52 años, espera poder pasar los próximos 25 años teniendo fue muy divertido trabajar en el lenguaje que soñó y escribió en una libreta, ahora perdida, a la edad de 17 años..
- Este es un extracto de un artículo para la revista mensual de usuarios y desarrolladores de Linux, la autoridad respetada en GNU / Linux y el ecosistema de código libre y abierto para entusiastas de Linux, profesionales de TI y desarrolladores. Suscríbase hoy y obtenga 5 números por £ 5 (solo Reino Unido. La oferta finaliza el 30 de abril de 2018).