¿Cuáles serán las diferencias mayores/menores entre ruby 1.9.2 y ruby 2.0?
ruby-1.9.2 (1)
Me han dicho que ruby 1.9.2 es ruby 2.0 pero que ruby 1.9.3 está programado para ser lanzado en un futuro próximo y contendrá algunas mejoras de rendimiento.
Entonces, ¿qué están planeando para 2.0? ¿Será muy diferente al ruby 1.9.x?
Dos características que ya están implementadas en YARV, y que probablemente terminarán en Ruby 2.0, son las características ( mix
) y el Module#prepend
.
El método de mix
, a diferencia del método de include
actual, toma una lista de módulos y los mezcla todos al mismo tiempo, asegurándose de que no tengan métodos conflictivos. También le proporciona una manera de resolver conflictos fácilmente, si, por ejemplo, dos módulos que desea combinar para definir el mismo método. Básicamente, mientras que el método de include
permite tratar un módulo como una mix
, el método de mix
permite tratar un módulo como un rasgo.
Module#prepend
mezcla un módulo en una clase o módulo, de nuevo, al igual que include
, pero en lugar de insertarlo en la cadena de herencia justo encima de la clase, inserta está justo debajo de la clase. Esto significa que los métodos en el módulo pueden anular los métodos de la clase, y pueden delegar los métodos de sobrescritura con super
, ambos de los cuales no son posibles cuando se usa include
. Básicamente, esto hace alias_method_chain
obsoleto.
Una característica que se ha discutido durante un par de meses (o 10 años, dependiendo de cómo cuente), son los refinamientos. Se ha discutido durante más de 10 años para agregar una manera de hacer parches de mono seguros en Ruby. Es decir, una forma en la que puedo parchear un mono en una clase principal, pero solo mi código ve ese parche de mono, el otro código no. Durante muchos años, el principal favorito para ese tipo de parches de mono seguros fueron los espacios de nombres de selector, sin embargo, más recientemente, los Classboxes han estado recibiendo mucha atención, y aún más recientemente, se ha puesto en práctica un prototipo de implementación de Refinements, una variante de Classboxes. adelante.
En general, el gran tema de Ruby 2.0 es la escalabilidad: escalar a equipos más grandes, bases de código más grandes, problemas más grandes, máquinas más grandes, más núcleos. Pero también se reduce a máquinas más pequeñas como dispositivos incrustados.
Las tres características que mencioné anteriormente son para escalar a equipos más grandes y bases de código más grandes. Algunas características propuestas para escalar a problemas de mayor tamaño y más núcleos son las colecciones paralelas y las implementaciones paralelas de los métodos de Enumerable
, como el map
, así como las mejores abstracciones de concurrencia, como futuros, promesas, agentes, actores, canales, patrones de unión o algo así.