jueves, 16 de junio de 2011

Rubinius 2.0 - versión preliminar para desarrolladores

Rubinius

Rubinius es una implementación de Ruby que tiene la característica principal de estar escrito mayormente en Ruby.

La máquina virtual está escrita en C++ y utiliza LLVM para convertir el bytecode en el código nativo del procesador destino, pero el compilador de los bytecodes y la gran mayoría de las bibliotecas están escritas en Ruby. Este nucleo utiliza un recolector de basura muy optimizado y permite extensibilidad en C que soporta las mismas extensiones en este lenguaje que utiliza el intérprete estándar de Matz (conocido como MRI).

El siguiente diagrama muestra la distribución de componentes de Rubinius:

Componentes

Uno de los desafíos de Rubinius siempre fue medir el nivel de compatibilidad contra la implementación de Matz, por lo que tempranamente empezaron a trabajar en RubySpec, una serie de pruebas que funcionan como la especificación del lenguaje, ya que éste no tenía una originalmente y por sus propias características de meta-programación, es especialmente complejo de validar.

Básicamente, Rubinius, hasta su última versión estable, soporta Rails, Rake, RSpec, Nokogiri, Mongrel y prácticamente todas las bibliotecas y frameworks hasta Ruby 1.8.x.

La novedad es que el equipo acaba de liberar la versión preliminar 2.0, que fundamentalmente soporta Ruby 1.8.7 y 1.9.2, y funciona bajo Windows, pero además utiliza un nuevo mecanismo de threading realista que aprovecha los múltiples núcleos de los procesadores modernos.

Adicionalmente, el equipo migró el repositorio a GitHub. Para los interesados en el desarrollo de lenguajes, vale la pena al menos pegarle una mirada.

 

 

martes, 14 de junio de 2011

Raros lenguajes nuevos: Nemerle

Nemerle

Uno de los principios de diseño del framework .NET, o más específicamente del CLI (Common Language Infrastructure) es, como su nombre lo indica, permitir implementar fácilmente una variedad importante de lenguajes.

El CLI es una pieza estandarizada ante ECMA como un estándar abierto, y es lo que ha permitido la creación de implementaciones abiertas de .NET como Rotor y Mono.

Pero también ha permitido la implementación de muchos lenguages (más allá de Microsoft) que comparten todo el ecosistema de herramientas y bibliotecas disponibles.

Nemerle es uno de estos casos. Desarrollado en la Universidad de Wroclaw, Polonia, se trata de un lenguaje de tipos estáticos, casi un superset de C#, que soporta estilos de programación funcional y orientada a objetos, metaprogramación, lenguajes específicos de dominio y mucho más. Al estar basado en el CLI genéricamente, funciona en .NET y en Mono por igual.

Siendo un superset, es posible compilar (con un par de toques en el archivo .csproj) fuentes C# en Nemerle.

Dos de las características más distintivas de Nemerle son la inferencia de tipos y el uso de macros.

Veamos algunos ejemplos de código, con inferencia de tipos:

def d = Dictionary ();
d.Add ("Code and Beyond", 42);
foreach (s in args) {
  ...
}

Notese que no hace falta inicializar los tipos del diccionario, que son declarados y chequeados a partir del primer uso.

En el caso de las macros, pueden escribirse cosas como:

ExecuteReaderLoop ("SELECT nombre, apellido FROM personas WHERE nombre = $miNombre", dbcon,
{
  System.Console.WriteLine ("Persona: {0} {1}", nombre, apellido) 
});

que enmascaran la creación del SqlCommand y el SqlReader, la clásica iteración y la obtención de las strings para los dos campos leídos, pero es importante ver que es mucho más que una función de una biblioteca, ya que en este caso se está interpretando la string conteniendo la sentencia SQL y generando el código chequeado correspondiente.

Nemerle también tiene interpolación de strings más eficiente que en C#, ya que se ejecuta en tiempo de compilación, como en:

$"Me llamo $Nombre y tengo $Edad años."

donde las variables reemplazadas son chequeadas por el compilador, a diferencia de utilizar String.Format, donde se realizan en tiempo de ejecución.

Es muy interesante además la sencillez para definir Macros, que no tienen nada que ver con las de C, y son descendientes directas de las macros de LISP. Veamos este caso que define un bucle hacia atrás:

macro ReverseFor (i, begin, body) 
syntax ("atras", "(", i, ";", begin, ")", body)
{
  <[ for ($i = $begin; $i >= 0; $i--) $body ]>
}

que se usaría de esta manera:

atras (i ; n) print (i);

Más información sobre Nemerle en la wiki del lenguaje, y los más interesados pueden encontrar el repositorio en Google Code.

jueves, 9 de junio de 2011

Video: Sesión NO presentada en Run WebCamp Chaco

Run WebCamp

Hoy tenía previsto estar en Resistencia, Chaco, participando en la edición local del Run WebCamp que está recorriendo el país, dando la sesión sobre Entity Framework que presentamos previamente en Buenos Aires con Daniel Laco.

Actualicé la presentación con algunos cambios en los poquísimos slides y mejoré un poco mi parte de los ejemplos, centrándome más en Code First que es la parte que me interesa más.

Pero no tuve mucha suerte: esta semana entró en erupción el volcán Pehueye en Chile, provocando bastantes problemas allá primero y en Argentina también, sobre todo en Bariloche, pero llegando a provocar demoras o cancelaciones de vuelos en toda la región.

Así que me quedé sin asistir, pero decidí grabar la sesión en video y compartirla. No llegué a tiempo con el procesamiento y la subida del video, me parece, pero espero que mis colegas y amigos de Chaco hayan podido compartir el link con el público de allá. Por mi parte, lo comparto aquí con todos los demás.

Duración aproximada: 55 minutos.

miércoles, 8 de junio de 2011

Recursos sobre HTML5

HTML5 logo

A medida que el tiempo avanza este lenguaje de marcado y su ecosistema se hacen temas cada vez más centrales en el desarrollo de software en general.

El reciente anuncio de Microsoft de que Windows 8 soportará HTML y JavaScript como una posibilidad para desarrollar aplicaciones de escritorio sigue en la línea de muchos otros jugadores del mercado que apuntan fuertemente a estos estándares.

Les dejo a continuación una serie de recursos para prender más sobre HTML5.

En Español

En inglés

Como siempre hay más recursos en inglés, y este tipo de información técnica es muy consumible para los programadores, incluso si no están duchos en ese idioma.

  • Dive into HTML5 es un libro completo en línea que además está escrito usando este estilo de marcado. Desde el comienzo se nota el uso de Web Fonts (noten que si bien la tipografía del título parece un gráfico, el texto es seleccionable).

  • Los blogs de SitePoint (que también ofrecen algunos libros pagos pero económicos) tienen muy buena infomación en sus blogs, categorizados por contenido sobre HTML5 y CSS3.

  • W3Schools tiene un Tutorial que además sirve como una buena referencia en línea para buscar información sobre forms, tags, atributos y eventos.

 


lunes, 6 de junio de 2011

Video: DHH en la RailsConf 2011

Este post contiene básicamente el video de la sesión de David Heinemeier Hansson (DHH) en la RailsConf 2011 a mediados del mes pasado en Baltimore, Maryland, EEUU.

El video, por supuesto, está en inglés, pero me parece interesante compartirlo porque en la sesión DHH comparte sus ideas acerca de los objetivos en los cambios en Rails 3.1, incluyendo la idea de más carpetas y archivos vacíos (para ayudar en la organización), y los motivos de la cuestionada inclusión de CoffeeScript y SCSS (comentada previamente en otro post).

Específicamente menciona que Rails seguirá siendo una plataforma con opiniones fuertes, donde las configuraciones por omisión serán las que el equipo considera las más relevantes y útiles en el momento, aunque siempre podrán cambiarse (por ejemplo, basta comentar las dos líneas que incluyen saas y coffee-script en el gemfile).

Sobre el final, menciona pjax, una biblioteca que maneja el contenido completo de una página estática como si fuese ajax pero manteniendo las url apropiadas, dejando que el botón BACK del navegador funcione perfectamente. Esa puede ser una de las próximas inclusiones en Rails.