DartHe actualizado dart-lzma a la versión M2 de Dart. El lenguaje está en continua evolución, y algunos de los cambios que introduce Google en cada release hacen que el código de una versión ya no compile en la siguiente. dart-lzma es un proyecto que ya tiene casi un año de antiguedad, cuando Dart estaba en su versión alpha, por lo que estaba totalmente desactualizado en relación al estado actual del lenguaje y sus librerías.

En la nueva versión he realizado principalmente los siguientes cambios:

  – Adaptado el código a la versión actual M2 de Dart. El wizard «Clean Up» del Dart Editor ha sido muy útil para esta tarea. Me gustó mucho esta opción desde el principio y me sigue gustando. Lo que hace es detectar el código deprecado y sugerir el cambio a realizar. Como la típicas opciones de refactorizar de Eclipse.

  – Corregida la función de descompresión para conseguir que funcione tanto de forma nativa en Dart como cuando se compila a JavaScript. Esto fue una petición que me hicieron y que al final me ha servido para reactivar todo el proyecto (y a mí mismo).

  – Añadida una función para comprimir a formato LZMA. La librería original sólo permitía descomprimir, ya que estaba pensada para ser usada en la parte cliente, donde normalmente sólo interesa descomprimir los recursos comprimidos enviados desde el servidor. Pero como Dart permite realizar aplicaciones que pueden ejecutarse en la parte servidora utilizando el mismo código base, pues ahora tiene sentido añadir la opción de comprimir.

  – Adaptada la estructura del proyecto al formato estándar de paquetes de Dart. De hecho, la librería está ahora publicada como un paquete en la página oficial de Dart:

  http://pub.dartlang.org/packages/lzma

  – Añadidos dos programas de ejemplo para comprimir y descomprimir ficheros desde línea de comando.

  – Añadido un fichero README.md.

La versión actual puede añadirse como dependencia en cualquier proyecto en el fichero pubspec.yaml de la siguiente forma:

dependencies:
  lzma: 0.1.0

Aunque el proyecto ya lo doy más o menos por cerrado durante otra larga temporada, hay unas cuantas cosas que tengo que modificar:

  – Cambiar el formato de fichero README.md, que no parece ser compatible con el que es capaz de leer la web de paquetes de Dart.

  – Añadir un aviso en la página principal del proyecto, y en el fichero README.md, acerca de que es conveniente ejecutar el código desde el Dart Editor sin las opciones «checked» y «debug» activadas. Estas opciones ralentizan sobremanera la ejecución del código Dart, sobre todo cuando hacen un uso intensivo de la CPU, como es el caso de un compresor/descompresor.

  – Añadir un fichero CHANGES.md para actualizarlo en cada release.

  – Cambiar las clases de «streaming» que estoy utilizando ahora mismo. Quería utilizar las del paquete «io» estándar de Dart, pero no se pueden utilizar en la parte cliente, por lo que las he descartado. Al parecer hay un movimiento por parte del equipo de desarrollo de Dart para crear un nuevo paquete «stream», pero aún no está publicado y no tengo claro si es lo que necesito.

  – Añadir el paquete «fixnum» como dependencia. Actualmente tengo el código embebido dentro de mi librería, por que aún no está publicado en la web de paquetes. Este paquete proporciona las clases int32 y int64 que resultan útiles para trabajar con aritmética entera con un tamaño determinado en vez de ilimitado, que es como funcionan los enteros en Dart.

Me ha gustado tener la oportunidad de liberar el paquete en la página oficial de Google. Una experiencia más. Ya estoy planificando la actualización a Dart M2 del emulador de Spectrum de cara a liberarlo como un paquete de aplicación.