Wednesday, February 4, 2009

Diferencias entre Ruby 1.9.1 y 1.8.x

Bueno, y qué hay de nuevo en Ruby 1.9.1?

En resumidas cuentas:
- nueva máquina virtual (antes era solo un interpretador AST)
- algunos objetos han sido sometidos a dieta de memoria (Object, Array, String, etc)
- mucho más rápido (ver Antonio Cangiano)
- soporte para caracteres multilingües;
- nueva sintaxis para Hashes con símbolos como llaves, y ahora las llaves preservan el orden;
- muchos cambios al API (mejoras, consistencia, remueven código obsoleto, etc.);
- cambios en la semántica del lenguaje (argumentos a bloques ahora funcionan casi como argumentos a métodos);
- índice a cadena ahora retorna subcadena de longitud 1;
- dos puntos (:) ahora ya no se pueden usar en if y en when;
- String.each ya no existe;
- nueva literal para lambdas: ->
- iteradores externos (class Enumerator) ahora hacen parte del lenguaje;
- concepto nuevo, fibras (class Fiber);
- lazos nativos (con GIL, como Python);
- rubygems, rake ahora son parte del lenguaje;
- minitest reemplaza el test/unit viejo;

Los libros citados en las referencias saldrán en mes y medio. Yo también estoy actualizando el mío, "Ruby Fácil", y estará listo en un par de semanas, pues no tengo que lidiar con la burocracia y distribución de las casas de imprenta.

Referencias:
Lista oficial de diferencias, Ruby-lang
"Ruby 1.9: What to Expect", Dave Thomas y David A Black, RubyConf2008, video en Confreaks
"1.9.1?", tema en Ruby-Forum
"The Great Ruby Shootout", Antonio Cangiano
"10 Things to be Aware of in moving to Ruby 1.9", David A Black
"Son of 10 Things ...", David A Black
"Programming Ruby 1.9", Dave Thomas (saldrá en Abril-2009)
"The Well-Grounded Rubyist", David A Black (saldrá en Marzo 2009)

Tuesday, February 3, 2009

Salió Rails 2.3 RC1

Acaba de salir también Rails 2.3 RC1.
Esta no es la versión definitiva, que se espera en Mayo, pero para los intrépidos, nos da acceso a lo último en esta plataforma. Tiene algunos errores.

Qué trae de nuevo?
* Templates: Permite configurar las aplicaciones esqueleto que se generan con sus propios gems, configs, y otras cosas.
* Engines: Permite compartir pedazos de una aplicación con rutas, modelos, etc.
* Rack: Rails ejecuta ahora con Rack, que permite acceso a otras cositas buenas de middleware.
* Metal: Escriba piezas super-rápidas con lógica optimizada alrededor del Action Controller.
* Nested forms: Permite manipular formas complejas de una manera mucho más fácil.

Más detalles aquí:
http://weblog.rubyonrails.org/2009/2/1/
rails-2-3-0-rc1-templates-engines-rack-metal-much-more

Rails 2.3 Release Notes

No dicen nada sobre compatibilidad con Ruby 1.9.1.

Monday, February 2, 2009

Cómo instalar Rails 2.2.2 con Ruby 1.9.1 en Ubuntu 8.04

Continuamos con la instalación de Rails, después de haber instalado Ruby 1.9.1 en Ubuntu 8.04. Estoy siguiendo los pasos que me encontré en el screencast que cito en la referencia (abajo).

Parece que Mongrel todavía no funciona con Ruby 1.9.1. Para principiantes, no es problema, pues podemos aprender Rails con los elementos básicos de este sistema.

Los pasos son los siguientes:
[ colores: verde: mis comentarios; azul: los comandos que ejecutamos; negro: el resultado ]


#Para instalar Rails
# (lo puse en dos líneas por conveniencia,
# pero va todo en una línea)

sudo gem install rails sqlite3-ruby rubygems-update
test-unit capistrano rspec

... #esto se toma un ratito

# ya instaló, ahora pasamos a revisarlo:
rails -v
Rails 2.2.2

cd ~/code/rails
rails testapp # generamos una aplicación
cd testapp
script/server # la corremos con el servidor WEBrick


Ahora abrimos el browser y lo apuntamos a :
http://localhost:3000.

Debe salir nuestra primera aplicación en Rails, el resultado es como se ve en la siguiente imagen:



(notar que el primer enlace nos da detalles de la máquina en la que estamos corriendo)

Para detener el servidor, hacer ctrl-C.

Referencia:
"Installing Ruby 1.9.1 & Rails From Source", en RubyHead

Cómo Compilar e Instalar Ruby 1.9.1 en Ubuntu 8.04

Siguiendo los pasos que me encontré en el screencast que cito en la referencia (abajo), logré instalar Ruby 1.9.1 en Ubuntu 8.04, sin ningún problema.

Ojo, parece que Mongrel no funciona (todavía) con Ruby 1.9.1. Los que dependáis de Mongrel (y otras gemas), tendréis que esperar un poco más a que alguien lo (las) actualice. [Para los novatos: Mongrel es un servidor para correr Rails; esto no os debe frenar, pues podemos ejecutar y aprender Rails con otro servidor llamado WEBrick; los pasos para instalar Rails los escribiré en otra nota aparte]

Los pasos para compilar e instalar Ruby 1.9.1 son los siguientes (para los curiosos y aventureros):
[ colores: verde: mis comentarios; azul: los comandos que ejecutamos; negro: el resultado ]


# primero, instalar las herramientas para compilar
# (lo puse en dos líneas por conveniencia,
# pero va todo en una línea)

sudo apt-get install build-essential wget libreadline5-dev
libncurses5-dev zlib1g libsqlite3-dev libssl-dev

#ojo: zlib + uno + g
# tener a la mano el CD de instalación de Ubuntu,
# que lo va a pedir


#segundo, bajar el *.tar.gz desde esta página:
#http://www.ruby-lang.org/en/news/
2009/01/30/ruby-1-9-1-released/


# tercero, expandirlo:
cd ~/downloads/ruby-1.9.1
tar xvzf ruby-1.9.1-p0.tar.gz
rm *.gz


# ahora sí, vamos a compilarlo
cd ruby-1.9.1-p0
autoconf


# si se queja y dice que no tiene autoconf, bajarlo e instalarlo:
# sudo apt-get install autoconf


./configure --prefix=/usr --enable-pthread
make
... #este comando se toma varios minutos

sudo make install

#ahora vamos a revisarlo:
clear
ruby -v

ruby 1.9.1.p0 (2009-01-30 revision 21907) [i686-linux]

#revisamos gem
which gem
/usr/bin/gem
gem -v
1.3.1
sudo gem update
Updating installed gems
Nothing to update # dice que no tiene nada que actualizar

#revisamos irb
irb
> RUBY_VERSION

=> "1.9.1"
> exit

#crear enlace simbólico
cd /usr/bin
sudo mv ruby ruby1.9
#coexiste con ruby1.8
sudo ln -s ruby1.9 ruby



Bueno, que les aproveche.

Referencia:
"Installing Ruby 1.9.1 & Rails From Source", en RubyHead