stringtranslate.com

Máquina virtual de loros

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 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 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 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 de 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:

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:

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

Referencias

  1. ^ ab "Nueva versión soportada 8.1.0 "Periquito Andino"". Fundación Loro. 2016-02-16 . Consultado el 2016-09-26 .
  2. ^ "Parrot Contributor License Agreement 1.0" (PDF) . Fundación Parrot. Archivado desde el original (PDF) el 2010-08-16 . Consultado el 2009-03-18 .
  3. ^ "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 .
  4. ^ ab "Parrot inactivo | Parrot VM". www.parrot.org .
  5. ^ "La historia detrás de la broma del loro - O'Reilly Media". Oreilly.com. 2001-04-06 . Consultado el 2014-02-25 .
  6. ^ "Programming Parrot". Perl.com. Archivado desde el original el 18 de julio de 2010. Consultado el 25 de febrero de 2014 .
  7. ^ "Búsqueda avanzada de corporaciones". Departamento de Licencias del Estado de Washington . UBI 602 839 536. Consultado el 9 de abril de 2021 .
  8. ^ Anunciando la Fundación Parrot Archivado el 29 de junio de 2008 en Wayback Machine
  9. ^ "Parrot 6.1.0 - Documentos de diseño de Parrot (PDD)". Docs.parrot.org . Consultado el 25 de febrero de 2014 .
  10. ^ 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 .
  11. ^ [1] Archivado el 9 de mayo de 2009 en Wayback Machine.
  12. ^ "Idiomas - Parrot VM". parrot.org . Consultado el 18 de noviembre de 2023 .
  13. ^ "Idiomas – Parrot". Wiki de desarrollo de Parrot . Consultado el 18 de noviembre de 2023 .
  14. ^ "El formato Parrot Bytecode (PBC) - parrotcode". Archivado desde el original el 24 de diciembre de 2008. Consultado el 15 de julio de 2009 .
  15. ^ [2] Archivado el 20 de julio de 2009 en Wayback Machine .

Enlaces externos