Parrot es una máquina virtual de procesos basada en registros que ya no se fabrica y que está diseñada para ejecutar lenguajes dinámicos de manera eficiente. Es posible compilar el lenguaje ensamblador de Parrot y la representación intermedia de Parrot (PIR, un lenguaje intermedio) en código de bytes de Parrot y ejecutarlo. Parrot es un software libre y de código abierto . [2]
Parrot fue creado por la comunidad Perl y desarrollado con la ayuda de las comunidades de software libre y de código abierto . Como resultado, se centró en la compatibilidad de licencias con Perl ( licencia Artistic 2.0 ), la compatibilidad de plataformas en una amplia gama de sistemas, la compatibilidad de arquitecturas de procesadores en la mayoría de los procesadores modernos, la velocidad de ejecución, el tamaño pequeño (alrededor de 700k según la plataforma) y la flexibilidad para manejar las diferentes demandas de Raku y otros lenguajes dinámicos modernos .
La versión 1.0, con una interfaz de programación de aplicaciones (API) estable para el desarrollo, fue lanzada el 17 de marzo de 2009. [3] La última versión es la versión 8.1.0 "Andean Parakeet". [1] Parrot fue descontinuado oficialmente en agosto de 2021, después de ser reemplazado por MoarVM en su uso principal (Raku) y nunca convertirse en una máquina virtual convencional para ninguno de sus otros lenguajes compatibles. [4]
Historia
El nombre Parrot proviene de una broma del Día de los Inocentes que anunciaba un lenguaje hipotético, llamado Parrot , que unificaría Python y Perl . [5] [6] El nombre fue adoptado más tarde por el proyecto Parrot (inicialmente una parte del esfuerzo de desarrollo de Raku) que tenía como objetivo dar soporte a Raku, Python y otros lenguajes de programación.
La Fundación Parrot se disolvió en 2014. [7] La Fundación se creó en 2008 para mantener los derechos de autor y las marcas registradas del proyecto Parrot, para ayudar a impulsar el desarrollo de las implementaciones del lenguaje y el código base central, para proporcionar una base para el crecimiento de la comunidad Parrot y para llegar a otras comunidades lingüísticas. [8]
Las decisiones de diseño históricas se documentan en forma de Documentos de Diseño de Parrot, o PDD, en el repositorio de Parrot. [9]
Hasta finales de 2005, Dan Sugalski fue el diseñador principal y arquitecto jefe de Parrot. Chip Salzenberg, un hacker veterano de Perl, kernel de Linux y C++, tomó el relevo hasta mediados de 2006, cuando se convirtió en el desarrollador principal. Allison Randal , la desarrolladora principal de Punie y arquitecta principal de las herramientas de compilación de Parrot, fue la arquitecta principal hasta mediados de octubre de 2010, cuando renunció y eligió a Christoph Otto como el nuevo arquitecto principal. [10]
Idiomas
El objetivo de la máquina virtual Parrot era alojar lenguajes cliente y permitir la interoperabilidad entre ellos. Existen varios obstáculos para lograr este objetivo, en particular la dificultad de mapear conceptos, datos y estructuras de datos de alto nivel entre lenguajes.
Lenguajes estáticos y dinámicos
Las diferentes propiedades de los lenguajes de tipado estático y dinámico motivaron el diseño de Parrot. Las máquinas virtuales populares actuales, como la máquina virtual Java y Common Language Runtime para la plataforma .NET , se han diseñado para lenguajes de tipado estático, mientras que los lenguajes a los que apunta Parrot son de tipado dinámico.
Las máquinas virtuales como la máquina virtual de Java y la actual máquina virtual Perl 5 también están basadas en pila . Los desarrolladores de Parrot eligieron un diseño basado en registros, argumentando que se asemeja más a un diseño de hardware, lo que permite utilizar la vasta literatura sobre optimización de compiladores para generar código de bytes para la máquina virtual Parrot que podría funcionar a velocidades más cercanas al código de máquina . [ cita requerida ] Otras máquinas virtuales basadas en registros inspiraron partes del diseño de Parrot, incluidas LLVM , Lua VM y Dis de Inferno .
Conceptos funcionales
Parrot ofrece un amplio soporte para varias características de la programación funcional , incluidos los cierres y las continuaciones , que pueden resultar especialmente difíciles de implementar de forma correcta y portátil, especialmente en combinación con el manejo de excepciones y el subprocesamiento . La mayor ventaja es la capacidad de extensión dinámica de los objetos con métodos, lo que permite contenedores polimórficos (PMC) y códigos de operación asociados . La implementación de soluciones a estos problemas a nivel de máquina virtual evita la necesidad de resolverlos en los lenguajes de cliente individuales.
Herramientas de compilación
Parrot ofrece un conjunto de herramientas de escritura de compiladores [11] que incluyen el Parser Grammar Engine (PGE), un generador de analizador híbrido que puede expresar un analizador descendente recursivo así como un analizador de precedencia de operadores , lo que permite una transición libre entre los dos en una única gramática. El PGE alimenta al Tree Grammar Engine (TGE) que transforma aún más el árbol de análisis generado por PGE para la optimización y, en última instancia, para la generación de código.
Implementaciones
Las implementaciones de lenguaje más completas dirigidas a Parrot VM fueron Raku (conocido en ese momento como Rakudo Perl 6), Lua y un nuevo lenguaje llamado "Winxed". [12] Se iniciaron proyectos para implementar muchos otros lenguajes, incluidos PHP , Python y Ruby ; junto con lenguajes esotéricos y de demostración como Befunge y el lenguaje tutorial "squaak". [13] Ninguno de estos proyectos tuvo éxito en convertirse en la implementación principal de sus respectivos lenguajes. [4]
Internos
Hay tres formas de código de programa para Parrot:
- El código de bytes [14] es binario y Parrot lo interpreta de forma nativa. El código de bytes suele almacenarse en archivos con la extensión de nombre de archivo ".pbc".
- El lenguaje ensamblador Parrot (PASM) es un lenguaje de bajo nivel que se compila en código de bytes. El código PASM suele almacenarse en archivos con la extensión de nombre de archivo ".pasm".
- La representación intermedia de Parrot (PIR [15] ) es un lenguaje de nivel ligeramente superior al PASM y también se compila en código de bytes. Es el objetivo principal de las implementaciones del lenguaje. PIR administra de manera transparente las convenciones de llamadas entre rutinas de Parrot, proporciona una sintaxis mejorada, asignación de registros y más. El código PIR generalmente se almacena en archivos con la extensión de nombre de archivo ".pir".
Ejemplos
Registros
Parrot se basa en registros, como la mayoría de las CPU de hardware , y a diferencia de la mayoría de las máquinas virtuales, que se basan en pilas, Parrot ofrece cuatro tipos de registros:
- I: tipo entero nativo
- N: números de punto flotante
- S: registros de cadena avanzados con soporte Unicode
- P: PMC, o contenedor polimórfico : tipo de objeto Parrot
Parrot proporciona un número arbitrario de registros; este número se fija en el momento de la compilación por subrutina.
Operaciones aritméticas
En PASM
establecer I1 , 4 inc I1 # I1 ahora es 5 sumar I1 , 2 # I1 ahora es 7 establecer N1 , 42 .0 dec N1 # N1 ahora es 41.0 sub N1 , 2 .0 # N1 ahora es 39.0 imprimir I1 imprimir ' , ' imprimir N1 imprimir "\ n " fin
En PIR
. sub 'main' : main
$I1 = 4
inc $I1 # $I1 ahora es 5
$I1 += 2 # $I1 ahora es 7
$N1 = 42.0
dec $N1 # $N1 ahora es 41.0
$N1 -= 2.0 # $N1 ahora es 39.0
print $I1
print ', '
print $N1
print "\n"
. fin
mod_loro
mod_parrot es un módulo opcional para el servidor web Apache . Incorpora un intérprete de máquina virtual Parrot en el servidor Apache y brinda acceso a la API de Apache para permitir que los controladores se escriban en lenguaje ensamblador Parrot o en cualquier lenguaje de alto nivel destinado a Parrot.
Véase también
- MoarVM
- GraalVM
- Common Language Runtime (CLR)
- Comparación de máquinas virtuales de aplicaciones
- Máquina Da Vinci
Referencias
- ^ ab "Nueva versión soportada 8.1.0 "Periquito Andino"". Fundación Loro. 2016-02-16 . Consultado el 2016-09-26 .
- ^ "Parrot Contributor License Agreement 1.0" (PDF) . Fundación Parrot. Archivado desde el original (PDF) el 2010-08-16 . Consultado el 2009-03-18 .
- ^ "Parrot Roadmap". Fundación Parrot. 20 de noviembre de 2008. Archivado desde el original el 15 de abril de 2010. Consultado el 20 de noviembre de 2008 .
- ^ ab "Parrot inactivo | Parrot VM". www.parrot.org .
- ^ "La historia detrás de la broma del loro - O'Reilly Media". Oreilly.com. 2001-04-06 . Consultado el 2014-02-25 .
- ^ "Programming Parrot". Perl.com. Archivado desde el original el 18 de julio de 2010. Consultado el 25 de febrero de 2014 .
- ^ "Búsqueda avanzada de corporaciones". Departamento de Licencias del Estado de Washington . UBI 602 839 536. Consultado el 9 de abril de 2021 .
- ^ Anunciando la Fundación Parrot Archivado el 29 de junio de 2008 en Wayback Machine
- ^ "Parrot 6.1.0 - Documentos de diseño de Parrot (PDD)". Docs.parrot.org . Consultado el 25 de febrero de 2014 .
- ^ Otto, Christoph (21 de octubre de 2010). "reparrot: Parrot tiene un nuevo arquitecto. ¿Y ahora qué?". Reparrot.blogspot.com . Consultado el 25 de febrero de 2014 .
- ^ [1] Archivado el 9 de mayo de 2009 en Wayback Machine.
- ^ "Idiomas - Parrot VM". parrot.org . Consultado el 18 de noviembre de 2023 .
- ^ "Idiomas – Parrot". Wiki de desarrollo de Parrot . Consultado el 18 de noviembre de 2023 .
- ^ "El formato Parrot Bytecode (PBC) - parrotcode". Archivado desde el original el 24 de diciembre de 2008. Consultado el 15 de julio de 2009 .
- ^ [2] Archivado el 20 de julio de 2009 en Wayback Machine .
Enlaces externos
- Sitio web oficial
- Enlaces entre Perl 6 y Parrot
- Para mod_parrot:
- "Sitio web de Mod_parrot". parrot.org . Jeff Horwitz . Consultado el 18 de agosto de 2023 .
- Horwitz, Jeff (22 de diciembre de 2004). "Presentación de mod_parrot". perl.com . O'Reilly Media .
- Josh McAdams (3 de junio de 2008). "Jeff Horwitz en mod_parrot". Perlcast . Perlcast.com. Archivado desde el original el 2008-09-07 . Consultado el 2008-06-09 .