Parrot es un software descontinuado que implementa una máquina virtual de proceso basada en registros 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 el código de bytes de Parrot y ejecutarlo. Parrot es un software gratuito y de código abierto. [2]
Lanzamiento estable | 8.1.0 / 16 de febrero de 2016 [1] |
---|---|
Repositorio | |
Escrito en | C |
Sistema operativo | Multiplataforma |
Tipo | Máquina virtual |
Licencia | Licencia Artística 2.0 |
Sitio web | loro |
Parrot fue iniciado por la comunidad de Perl y se desarrolló con la ayuda de las comunidades de código abierto y software libre . Como resultado, se centra en la compatibilidad de la licencia con Perl ( Artistic License 2.0 ), la compatibilidad de la plataforma en una amplia gama de sistemas, la compatibilidad de la arquitectura del procesador 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 hechas por 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 versión actual es la versión 8.1.0 "Andean Parakeet" [1]
Historia
El nombre Parrot proviene de una broma de April Fool que anunciaba un lenguaje hipotético, llamado Parrot , que unificaría Python y Perl . [4] [5] El nombre fue posteriormente adoptado por este proyecto (inicialmente una parte del esfuerzo de desarrollo de Raku) que tiene como objetivo admitir Raku, Python y otros lenguajes de programación. Se están transfiriendo varios idiomas para que se ejecuten en la máquina virtual Parrot. [6]
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 comerciales del proyecto Parrot, para ayudar a impulsar el desarrollo de implementaciones de lenguaje y la base de código central, para proporcionar una base para el crecimiento de la comunidad Parrot. y llegar a otras comunidades lingüísticas. [8]
Idiomas
El objetivo de la máquina virtual Parrot es alojar los idiomas del cliente y permitir la interacción 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 tipados estática y dinámicamente han motivado 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 se dirige Parrot se tipean dinámicamente.
Las máquinas virtuales como la máquina virtual Java y la máquina virtual Perl 5 actual también se basan en pilas . Los desarrolladores de Parrot ven la inclusión de registros de Parrot como una ventaja, ya que, por lo tanto, se asemeja más a un diseño de hardware, lo que permite que la vasta literatura sobre optimización de compiladores se utilice 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 . Otras máquinas virtuales basadas en registros han inspirado partes del diseño de Parrot, como LLVM , Lua VM e Inferno's Dis .
Conceptos funcionales
Parrot tiene un amplio soporte para varias características de programación funcional, incluidos cierres y continuaciones , los cuales pueden ser particularmente difíciles de implementar de manera correcta y portátil, especialmente en conjunto con el manejo de excepciones y el enhebrado . La mayor ventaja es la extensibilidad 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 resolver estos problemas en los lenguajes individuales del cliente.
Herramientas del compilador
Parrot proporciona un conjunto de herramientas de escritura de compiladores [9] que incluye Parser Grammar Engine (PGE), un analizador-generador híbrido que puede expresar un analizador de descenso recursivo , así como un analizador de precedencia de operador , lo que permite una transición libre entre los dos en una sola gramática. El PGE se alimenta del 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.
Idiomas existentes del cliente
Muchos lenguajes ya tienen interfaces de compilador diseñadas para Parrot; sin embargo, muchos de ellos todavía funcionan sólo parcialmente. [10] En julio de 2013 [ necesita actualización ] , los idiomas que se mantienen activamente son: [11]
- C (C99 "dialecto")
- Java
- Código de bytes de Java
- Alegría
- Lua
- MiniPerl (Perl 1.0) [ cita requerida ]
- NQP (no del todo Perl)
- Perl 5
- PHP (a través de Pipp)
- Python (a través de pynie)
- Raku (a través de Rakudo )
- Ruby (a través de Cardinal)
- Esquema
- El lenguaje del tutorial " squaak "
- Tcl (a través de partcl)
- WMLScript
Los idiomas inactivos, a julio de 2013, son los siguientes:
- Arco
- APL
- antes de Cristo
- Lisp común
- Ceceo
- ECMAScript
- Adelante
- Lenguaje imperativo genérico
- GNU m4
- Jako
- Octava [12]
- QuickBASIC 4.5
- Smalltalk (a través de Chitchat)
- .NET código de bytes
También se han implementado los siguientes lenguajes de programación esotéricos :
- Befunge
- Brainfuck
- HQ9 Plus
- Lazy K
- LOLCODE
- ¡Ook!
- Shakespeare
- Unlambda
Internos
Hay tres formas de código de programa para Parrot:
- Bytecode [13] es binario y Parrot lo interpreta de forma nativa. Elcódigo de bytesgeneralmente se almacena en archivos con la extensión de nombre de archivo ".pbc".
- El lenguaje ensamblador de Parrot (PASM) es el lenguaje de bajo nivel que se compila en código de bytes. El código PASM generalmente se almacena en archivos con la extensión de nombre de archivo ".pasm".
- La representación intermedia de Parrot (PIR [14] ) 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 de idiomas. PIR gestiona de forma 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 de
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 proporciona cuatro tipos de registros:
- I: tipo entero nativo
- N: números de coma flotante
- S: registros de cadena avanzados con soporte Unicode
- P: PMC o contenedor polimórfico : tipo de objeto loro
Parrot proporciona un número arbitrario de registros; este número se fija en tiempo de compilación por subrutina.
Operaciones aritmeticas
En PASM
set I1 , 4 inc I1 # I1 es ahora 5 add I1 , 2 # I1 es ahora 7 set N1 , 42 .0 dec N1 # N1 es ahora 41.0 sub N1 , 2 .0 # N1 es ahora 39.0 print I1 print ' , ' print N1 print "\ n " end
En PIR
. sub 'principal' : principal $ 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 39.0 imprime $ I1 imprime ',' imprime $ N1 imprime "\ n" . final
Desarrollo
Hasta finales de 2005, Dan Sugalski fue el diseñador principal y arquitecto jefe de Parrot. Chip Salzenberg , un veterano hacker de Perl, kernel de Linux y C ++, asumió el control hasta mediados de 2006, cuando se convirtió en el desarrollador principal. Allison Randal , la desarrolladora principal de Punie y arquitecta en jefe de las herramientas de compilación de Parrot, fue la arquitecta en jefe hasta mediados de octubre de 2010, cuando renunció y eligió a Christoph Otto como el nuevo arquitecto en jefe. [15]
Las discusiones sobre desarrollo tienen lugar principalmente en el canal #parrot de irc.perl.org. Además, hay reuniones semanales moderadas para Parrot y desarrolladores de lenguaje alojadas en #parrotsketch en la misma red. También se produce mucha discusión en la lista de correo parrot-dev, alojada en parrot.org.
Las discusiones de diseño existen en forma de documentos de diseño de Parrot, o PDD, en el repositorio de Parrot. [16] El arquitecto jefe u otro diseñador designado produce estos documentos para explicar la filosofía de una característica, así como su interfaz y notas de diseño. Los piratas informáticos de Parrot convierten estos documentos en pruebas ejecutables y luego en funciones existentes.
El equipo de Parrot lanza una nueva versión estable del software el tercer martes de cada mes. Los confirmadores centrales se turnan para producir lanzamientos en un cronograma rotatorio, donde ningún autor individual es responsable de múltiples lanzamientos seguidos.
Ver también
- Common Language Runtime (CLR)
- Comparación de máquinas virtuales de aplicaciones
- mod_parrot
- Máquina Da Vinci
Referencias
- ^ a b "Nueva versión compatible 8.1.0" Periquito andino " " . Fundación Parrot. 2016-02-16 . Consultado el 26 de septiembre de 2016 .
- ^ "Acuerdo de licencia de colaborador de Parrot 1.0" (PDF) . Fundación Parrot . Consultado el 18 de marzo de 2009 .
- ^ "Hoja de ruta del loro" . Fundación Parrot. 2008-11-20 . Consultado el 20 de noviembre de 2008 .
- ^ "La historia detrás de la broma del loro - O'Reilly Media" . Oreilly.com. 2001-04-06 . Consultado el 25 de febrero de 2014 .
- ^ "Programación Parrot" . Perl.com. Archivado desde el original el 18 de julio de 2010 . Consultado el 25 de febrero de 2014 .
- ^ "Idiomas | Parrot VM" . Parrot.org. 2006-02-14 . Consultado el 25 de febrero de 2014 .
- ^ "Búsqueda avanzada de empresas" . Departamento de Licencias del Estado de Washington . UBI 602 839 536 . Consultado el 9 de abril de 2021 .
- ^ Anuncio de la Fundación Parrot Archivado el 29 de junio de 2008 en Wayback Machine
- ^ [1] Archivado el 9 de mayo de 2009 en la Wayback Machine.
- ^ "Idiomas - Parrot" . Trac.parrot.org . Consultado el 25 de febrero de 2014 .
- ^ "Idiomas - Parrot VM" . parrot.org . Consultado el 19 de abril de 2018 .
- ^ Caballero blanco. "Whiteknight / matrixy - GitHub" . Github.com . Consultado el 25 de febrero de 2014 .
- ^ http://www.parrotcode.org/docs/parrotbyte.html
- ^ [2] Archivado el 20 de julio de 2009 en la Wayback Machine.
- ^ 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 .
- ^ "Parrot 6.1.0 - Documentos de diseño de Parrot (PDD)" . Docs.parrot.org . Consultado el 25 de febrero de 2014 .
enlaces externos
- Página web oficial
- Enlaces a Perl 6 y Parrot