# Pugs

Pugs es un compilador y un intérprete del lenguaje de programación Perl 6, cuyo desarrollo comenzó el 1 de febrero de 2005 por Audrey Tang.
El desarrollo de Pugs se ha parado, poniendo la mayor parte de los esfuerzos de implementación de Perl 6 en Rakudo; sin embargo su repositorio de código fuente se sigue usando para almacenar el conjunto de pruebas oficial de Perl 6.

## Sumario

El proyecto Pugs tiene como objetivo permitir el bootstrap de Perl 6 mediante la implementación de la especificación completa de Perl 6, como se detalla en sus Synopsis. Está escrito en Haskell, en particular usando el Compilador de Haskell de Glasglow.
Pugs incluye dos ejecutables principales:
* pugs es el intérprete con un intérprete de comandos interactivo.
* pugscc puede compilar programas de Perl 6 a código Haskell, Perl 5, JavaScript, o al ensamblador PIR de la máquina virtual Parrot.
Pugs es software libre, distribuible bajo los términos de la licencia pública GNU o la Licencia Artística. Estos son los mismos términos de la licencia de Perl.

## Versiones

Los números mayores y menores de las versiones de Pugs convergen a 2π (un esquema que recuerda a TeXy METAFONT, que usan esquemas similares); cada dígito significativo de la versión menor representa un hito completado con éxito. El tercer dígito es incrementado para cada liberación. Los hitos hasta ahora son:
* 6.0: versión inicial.
* 6.2: entrada/salida básica y elementos de control de flujo; variables mutables; asignación.
* 6.28: clases y tratos.
* 6.283: reglas y gramáticas.
* 6.2831: sistema de tipos y enlazado.
* 6.28318: macros.
* 6.283185: portado de Pugs a Perl 6, si fuera necesario.

## Compatibilidad con Perl 5

En la versión 6.2.6, Pugs tiene la habilidad de aceptar Perl 5 y usar los módulos de CPAN instalados en el sistema. El siguiente ejemplo muestra el uso del popular módulo Perl DBI para gestionar una base de datos:

## Modelo de Desarrollo

Varios factores han sido sugeridos como razones del progreso de Pugs:
* El uso de Haskell. El tipado estático hace fácil detectar los errores en el programa en tiempo de compilación. El código en Haskell es a menudo considerado conciso. La biblioteca Parsec, es un analizador sintáctico monádico combinatorial escrito completamente en Haskell, que simplifica el análisis. Debido a que Haskell es un lenguaje funcional puro, requiere algún esfuerzo para interaccionar con el mundo real (entradas/salidas y entorno guiado por el tiempo). Para conseguirlo, Pugs hace un uso extensivo de monádas.
* El uso en Pugs de una metodología guiada por pruebas (una máxima de la Programación Extrema). Esta metodología dicta que cualquier módulo debe tener código para pruebas, incluso antes que el módulo sea implementado. Los seguidores de esta metodología arguyen que mejora la calidad del software. Sin embargo, el proyecto a menudo ha silenciado los fallos en las pruebas de regresión antes de las liberaciones, cancelando gran parte del beneficio del desarrollo guiado por pruebas.
* Posición liberal de Tang a la hora de conceder el commit bit. El desarrollo de Pugs actualmente se basa en el uso de un repositorio en Subversion, y se concede libremente acceso - especialmente a aquella gente que desee escribir pruebas. A causa de esto, se ha acumulado una vasta biblioteca de pruebas. Otras implementaciones de Perl 6 usan los muchos tests desarrollados por Pugs como una especificación ejecutable de Perl 6.
* El estilo de comunicación de Tang; su diario (enlazado abajo) atrae a mucha gente al proyecto. Los desarrolladores de Pugs también se reúnen en el nodo libre del canal #perl6 de IRC.
A pesar de estos factores, el progreso en el propio Pugs se ralentizó durante 2006 debido a temas personales que impidieron que Audrey consagrara tanto tiempo al proyecto como en 2005. Aunque el desarrollo continua, pocos contribuyentes trabajan activamente en el intérprete basado en Haskell, lo cual hace su progreso mucho más lento de lo que mucha gente esperaba al principio del proyecto.