Se espera para diciembre de 2020 el release de Ruby 3, con actualizaciones importantes en:
- Rendimiento
- Concurrencia
- Análisis estático
- Problemas de transición
Más información en Big News: Ruby Version 3.0
Introducción
Lo que aprenderás sobre Ruby
¿Qué es Ruby? Ventajas y desventajas
Instalación de Ruby
Bases del lenguaje
Tipos de datos I: Integer, float
Tipos de datos II: Strings
Tipos de datos III: Symbols
Tipos de datos IV: Arrays
Tipos de datos V: Hashes
Uso de condicionales
Uso de ciclos
Rangos
Uso de Regex
Procs y lambdas
Programación Orientada a Objetos en Ruby Comenzando la creación de nuestra clase
Programación Orientada a Objetos en Ruby: Módulos
Programación Orientada a Objetos: Clases y Objetos
Concurrencia vs Paralelismo: Threads en Ruby
Bundler y gemas
Testing en Ruby
Testing con MiniTest
Diferencias entre Ruby 2.5 y 3
Proyecto
Introducción al proyecto
Instalar Ruby 2D
Overview Ruby 2D
Arquitectura
Estructurando el proyecto
Vista básica
Programando la base para los movimientos
Programando el movimiento de nuestro snake
Test de nuestras acciones
Implementando el timer del movimiento
Actualizando la vista
Preparando el cambio de dirección
Recapitulación de la arquitectura
Moviendo la serpiente con el teclado
Creciendo la serpiente y programando la condición de derrota
Generando comida aleatoria: uso de rand y stub en pruebas
Condición de salida y conclusiones
Retos del curso
Gracias a que la comunidad de Ruby es muy activa, constantemente se están lanzando nuevas versiones del lenguaje y de los diferentes intérpretes. Al momento de crear este curso el último “release” es la versión 2.5.3. Para mantenerte actualizado sobre estas versiones puedes revisar la página oficial del lenguaje (https://www.ruby-lang.org) y también, cada vez que sale una nueva versión te recomiendo “googlear” los cambios que esta versión incluye.
Por ejemplo:
http://lmgtfy.com/?q=ruby+2.5+release+new+features en donde te encontraras con articulos como https://blog.jetbrains.com/ruby/2017/10/10-new-features-in-ruby-2-5/ o https://www.engineyard.com/blog/ruby-250-new-features en donde te resumen las nuevas caracteristicas que se incluyen en la nueva version. Adicionalmente cada nueva versión incluye parches de seguridad que son importantes para mantener tu aplicación siempre segura y protegida en contra de ataques por lo que es muy recomendable siempre estar revisando las nuevas versiones y actualizar las aplicaciones cuando sea posible.
Los desarrolladores de Ruby tienen un proyecto llamado Ruby 3x3 con el que pretenden hacer que la versión 3 de Ruby sea 3 veces mas rápida que Ruby 2.
El termino rápido es muy subjetivo y depende de cómo se hagan las mediciones. Esto es algo que los desarrolladores del lenguaje tienen en cuenta así que no podemos esperar que con Ruby 3, nuestra aplicación web que utiliza Ruby on Rails sea 3 veces mas rápida que la versión que utiliza Ruby 2 pues el desempeño depende también de muchos detalles de implementación que están fuera del control de los desarrolladores del lenguaje.
Respecto al futuro de Ruby 3, los principales objetivos son:
Por lo pronto el proyecto ha hecho varios avances que ya se pueden ver respecto a desempeño. Como el punto de comparación es Ruby 2.0, ya hemos podido ver varias mejoras entre los releases intermedios como Ruby 2.1, 2.2, 2.3, etc en donde se han hecho mejoras por ejemplo de manejo de memoria que hacen que el intérprete sea más rápido.
Adicionalmente están trabajando en un nuevo modelo de concurrencia para ofrecer nuevas abstracciones que no solamente van a hacer posible ejecución en paralelo sino que además van a ofrecer una manera más fácil de crear programas concurrentes. Esta nueva abstracción es llamada guild, propuesta por Koichi Sasada en http://rubykaigi.org/2016/presentations/ko1.html. A grandes rasgos, los guilds son como grupos de ejecución de threads. Dentro del mismo guild pueden existir varios threads que comparten variables, pero estos threads en el mismo guild o grupo no se pueden ejecutar en paralelo. Sin embargo, threads en diferentes guilds si pueden ejecutarse en paralelo pero no tienen acceso a las mismas variables, lo cual limita lo que se puede hacer con guilds pero a la vez ofrece garantías para evitar problemas comunes de programas concurrentes como data races. Para compartir información entre diferentes guilds, se pueden usar channels (muy parecido al modelo de concurrencia en Go) y también se puede compartir objetos que sean inmutables. Para conocer mas sobre este modelo de concurrencia te recomiendo leer este blog post (https://mensfeld.pl/2016/11/getting-ready-for-new-concurrency-in-ruby-3-with-guilds/) en donde explican a grandes rasgos como prepararnos para el nuevo modelo de concurrencia en Ruby 3.
Finalmente, en lo que respecta a tipos en Ruby 3, aunque es uno de los grandes objetivos pues se sabe que la comunidad está pidiendo soporte para esto, el trabajo en este campo no está tan avanzado como en los otros 2 puntos.
En una conversación con 3 líderes de la comunidad incluyendo a Matz (el creador de Ruby), se habló de Ruby 3x3 y de los diferentes avances, sin embargo dijeron que hay todavía mucho trabajo por hacer y qué podemos esperar por Ruby 3 hasta el 2020.
Puedes encontrar la conversación en https://blog.heroku.com/ruby-3-by-3 y un post en redit en donde se hace un resumen del avance de Ruby 3x3 en https://www.reddit.com/r/ruby/comments/7hhgrt/where_is_the_work_on_ruby_3/
Aportes 6
Preguntas 1
Se espera para diciembre de 2020 el release de Ruby 3, con actualizaciones importantes en:
Más información en Big News: Ruby Version 3.0
Buena info, alguien sabe que es eso de Tipos?
Que buen tema, interesante y motivador.
Si quieren recibir semanalmente a su correo articulos sobre las nuevas actualizaciones y noticias interesantes de Ruby y RoR suscribanse a Ruby Weekly
Excelente!, ¿Alguien sabe donde se pueden hacer aportes para el desarrollo de la nueva versión?
Justo liberaron ruby 3 hace algunos dias, excelente par irme a leer las notas y diferencias con la version 2.x
¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.