Perl 6

 Camelia.svg





Perl6  (también conocido como Raku6​) es un miembro de la familia de lenguajes de programación Perl.7​

Históricamente, mientras que se han escrito algunas implementaciones de intérpretes y compiladores, el único hoy en día en desarrollo activo es el de Rakudo Perl 6.

Está incorporando elementos de muchos lenguajes modernos e históricos. La compatibilidad con versiones anteriores de Perl 5 no es un objetivo directo, aunque un modo de compatibilidad es parte de la especificación. El proceso de diseño de Perl 6 comenzó en el 2000. En febrero de 2015, un mensaje en el blog The Perl Foundation comunicaba un intento de lanzamiento de la versión 1.0 coincidiendo con el cumpleaños de Larry Wall, en septiembre, y lanzamiento final de la versión 1.0 para Navidades,8​ y el 25 de diciembre de 2015 se anunció la primera versión estable de la especificación.9​

El desarrollo de Pugs, la primera implementación con mayor empuje, comenzó en el 2005, y hoy existen múltiples proyectos de implementación de Perl 6. Rakudo Perl 6 se basó en y NQP (Not Quite Perl) y puede usar MoarVM, la máquina virtual Java o Parrot como entorno de ejecución, y aparecen nuevas versiones cada mes (incluyendo paquetes precompilados GNU/Linux 10​). En julio de 2010, el proyecto lanzó la primera distribución Rakudo Star,11​ una colección de útiles y materiales relacionados, de una implementación de Perl 6. Larry Wall mantiene una referencia de la gramática conocida como STD.pm, escrita en Perl 6 y ejecutada con Perl 5.
Historia
En Perl 6, decidimos que sería mejor arreglar el lenguaje que arreglar al usuario.

Larry Wall
El proceso de diseño de Perl 6 se anunció por primera vez el 19 de julio de 2000, en el cuarto día de la Conferencia Perl anual,12​ por Larry Wall, en su charla State of the Onion 2000.13​ En ese momento, los objetivos primarios eran eliminar las "verrugas históricas" del lenguaje; "las cosas sencillas deberían continuar siendo sencillas, las cosas difíciles deberían ser más fáciles, y las cosas imposibles deberían ser difíciles"; una limpieza general del diseño interno y de la API. El proceso comenzó con una serie de peticiones de comentarios o "RFC". Este proceso estuvo abierto a todos los contribuyentes, y no dejó ningún aspecto del lenguaje cerrado al cambio.14​

Una vez que el proceso de las RFC se completó, Wall revisó y clasificó cada petición. Empezó entonces el proceso de escribir los "Apocalipsis", un término que se refiere a la "revelación".15​ Mientras que el objetivo original era escribir un Apocalipsis por cada capítulo de Programming Perl, a medida que se iba escribiendo cada uno, se hizo obvio que los cambios previos iban siendo invalidados por los posteriores. Por esta razón, se publicaron un conjunto de Sinopsis, cada una relacionada con los contenidos de un Apocalipsis, pero reflejando los cambios posteriores. Hoy, la especificación de Perl 6 continua casi de forma completa dentro de las Sinopsis.16​

Existen también una serie de Exégesis escritas por Damian Conway que explican los contenidos de cada Apocalipsis en términos de uso práctico. Cada Exégesis contiene ejemplos de código junto con la discusión del uso y las implicaciones de los ejemplos.17​

A día de hoy, se usan tres métodos de comunicación en el desarrollo de Perl 6. El primero es el canal de IRC #perl6. El segundo es un conjunto de listas de correo en los servidores de The Perl Foundation en perl.org.18​ El tercero es el repositorio de código fuente Git alojado en https://github.com/perl6.

Objetivos
La ruptura en la compatibilidad era obligada desde el comienzo del proyecto, e inmediatamente permitió algunos de los cambios que Larry Wall había sugerido en su discurso inicial. "Verrugas históricas" tales como la confusión que rodea el uso del sigilo (sigil) para los contenedores; la ambigüedad entre las funciones select; el impacto sintáctico de los gestores de fichero de una palabra simple; y muchos otros problemas que los programadores de Perl habían discutido cómo arreglar durante años fueron algunos de los primeros temas tratados.

A lo largo de los años, Perl 6 ha sufrido varias alteraciones en su dirección. De forma temprana se introdujeron conceptos desde Python y Ruby, pero a resultas de la escritura del intérprete Pugs en el lenguaje de programación Haskell, muchas influencias de la programación funcional fueron absorbidas por el equipo de diseño de Perl 6.

Mascota

Larry Wall y Camelia
El nombre de la mascota es "Camelia, el bicho de Perl 6".1​ Su nombre es una referencia a la mascota del dromedario asociado a Perl, y su forma, siguiendo la tradición amorosa de la comunidad Perl, es una reproducción de un "error de software". Los diseños en espiral incrustados en sus alas recuerdan las letras "P6", la abreviatura de Perl 6.

Implementaciones
En 2017, solo la implementación Rakudo Perl 6 está bajo desarrollo activo. Ninguna implementación se designará como la oficial de Perl 6; en su lugar, "Perl 6 será cualquier cosa que pase el conjunto de test oficial".19​

Rakudo Perl 620​21​ se compila para diversas máquinas virtuales, como MoarVM, la máquina virtual Java y Javascript. MoarVM es una máquina virtual construida especialmente para Rakudo perl 6 22​ y la cadena de montaje del compilador NQP.23​ Existe una capa entre Perl 6 y las máquinas virtuales, llamada Not Quite Perl 6, o NQP, que implementa las reglas de Perl 6 para la interpretación de Perl 6, así como el Árbol de sintaxis abstracta y la Generación de código específico de la arquitectura. La mayor parte de Rakudo se ha escrito en el mismo Perl 6, aunque no se trate de una implementación auto contenida, ni existan planes concretos, en este punto, para que Rakudo sea un compilador completo y autosuficiente.

Implementaciones históricas
Pugs fue una implementación inicial de Perl 6 escrita en el lenguaje de programación Haskell. Pugs se utilizaba como la implementación más avanzada de Perl 6, pero desde mediados del 2007 está prácticamente dormido (solo han aparecido desde entonces actualizaciones para las nuevas versiones de GHC). Desde noviembre de 2014, Pugs ya no recibe mantenimiento.24​

En 2007, v6-MiniPerl6 ("mp6") y su reimplementación, v6-KindaPerl6 ("kp6") se escribieron como un medio para arrancar el Perl-6.0.0 STD, usando Perl 5. El STD es una gramática completa para Perl 6, y está escrito en Perl 6. En teoría, cualquier cosa capaz de analizar el STD y generar el código ejecutable es un adecuado sistema de arranque para Perl 6. kp6 está actualmente compilado por mp6 y puede trabajar con múltiples entornos finales.25​26​ mp6 y kp6 no son implementaciones completas de Perl 6, y están diseñadas solo para implementar el conjunto de características mínimas para arrancar un completo compilador de Perl 6.

Yapsi es un compilador e intérprete de Perl 6 escrito en el propio Perl 6. De resultas de esto, requiere de la existencia de un intérprete de Perl 6, como el de Rakudo Star, para poder ejecutarse.27​

Niecza, otra principal implementación de Perl 6, se centraba en la investigación de la optimización e investigación de una implementación eficiente. Se dirige al Common Language Infrastructure.28​


Sistema de módulos
La especificación de Perl 6 solicita que los módulos se identifiquen por nombre, versión y autoría.29​ Es posible cargar sólo una versión específica de un módulo, o incluso dos módulos del mismo nombre que se diferencian en la versión o la autoría. Por comodidad, su puede indicar un nombre corto como un alias del módulo.

CPAN, el sistema de distribución de módulos de Perl 5, todavía no maneja módulos Perl 6. En su lugar, se usa un prototipo de un sistema de módulos.30​

Principales cambios con respecto a Perl 5
Perl 5 y Perl 6 difieren fundamentalmente, aunque en general la intención es la de "mantener Perl 6 como Perl". La mayor parte de los cambios están dirigidos a normalizar el lenguaje, para hacerlo más fácil de entender para los programadores novatos y expertos, y hacer "las cosas fáciles más fácilmente y las difíciles, más posibles".

Una especificación
Una principal, pero no técnica, diferencia entre Perl 5 y Perl 6 es que Perl 6 comienza como una especificación.19​ Esto significa que, si es necesario, Perl 6 puede ser reimplementado, y también significa que los programadores no necesitan leer el código fuente como último recurso para consultar el funcionamiento de alguna característica. La documentación de Perl 5 está considerada como excelente,31​ incluso fuera de la comunidad Perl, donde incluso la mezcla de las críticas dan una idea de su madurez y amplitud. Sin embargo, la documentación no se considera autorizada, y sólo describe el comportamiento real del intérprete de Perl 5 de forma informal. Las discrepancias encontradas entre la documentación y la aplicación pueden dar lugar a que se cambie uno para reflejar al otro, una dinámica que impulsa el continuo desarrollo y perfeccionamiento

Comentarios

Entradas más populares de este blog

Lenguaje de Programación