Máquina virtual Parrot


Máquina virtual Parrot
Máquina virtual Parrot

?
Información general
Última versión estable 3.6.0 Pájaros del Caribe
19 de julio de 2011
Género Máquina virtual
Sistema operativo Multiplataforma
Licencia Licencia Artística 2.0
En español No. 

Parrot es una máquina virtual basada en registros, que está siendo desarrollada en lenguaje C, y que pretende la ejecución de programas escritos en distintos lenguajes dinámicos, de manera eficiente. La misma utiliza un mecanismo de compilación en tiempo de ejecución para acelerar la velocidad de ejecución de los programas y reducir la tarea de los lenguajes interpretados. Actualmente es posible compilar el lenguaje ensamblador de Parrot y el PIR (su lenguaje intermedio), para generar bytecodes -en formato Parrot- que pueden ser ejecutados dentro de esta máquina virtual.

Parrot fue iniciada en la comunidad Perl, pero se sigue desarrollando con la ayuda de otras comunidades de código abierto. Como resultado, el proyecto está enfocado en la compatibilidad entre las licencias GPL y Artistic, la compatibilidad de plataformas (Unix, Microsoft Windows, Mac OS X y Mac OS Classic, VMS, Windows CE, Palm OS y otros), la compatibilidad entre arquitecturas (x86, IA-64, PowerPC, SPARC, MIPS, Alpha, ARM, entre otros), la velocidad de ejecución, la reducción de su tamaño (cerca de 700k dependiendo de la plataforma), y en dotarla con la suficiente flexibilidad para soportar lenguajes como Perl 6, Python, Tcl, Ruby, Scheme y otros lenguajes dinámicos. El proyecto también está enfocado en mejorar las capacidades de introspección, depuración y modulación semántica en tiempo de compilación, de esta máquina virtual.

Contenido

Historia

El proyecto comenzó para implementar Perl 6 y originalmente tenía el nombre bastante obtuso de "El software que estamos escribiendo para ejecutar Perl 6". El nombre Parrot viene de una broma de pescado de abril (April fools' day) en la cual se anunciaba un lenguaje hipotético llamado Parrot que unificaría Python y Perl [1]. El nombre fue más tarde adoptado por este proyecto, que tiene como objetivo soportar tanto Perl como Python. Varios pequeños lenguajes se están desarrollando también teniendo como base la máquina virtual Parrot.

Las versiones anteriores están documentadas en el registro histórico de la web oficial [2].

Lenguajes

El objetivo de la máquina virtual Parrot es hospedar lenguajes clientes, y permitir la interoperación entre ellos. Existen un conjunto de problemas que resolver para conseguir este objetivo.

Lenguajes Estáticos y Dinámicos

Las diferentes propiedades de los lenguajes tipados estática y dinámicamente han influido en el diseño de Parrot. Las actuales máquinas virtuales populares tales como la máquina virtual Java y el Common Language Runtime han sido diseñados para ser usados con lenguajes tipados estáticamente, mientras que los lenguajes objetivo de Parrot son dinámicamente tipados.

Las máquinas virtuales similares a la de Java y la actual máquina virtual de Perl 5 están también basadas en pila (máquina de pila). Los desarrolladores ven como una ventaja que la máquina Parrot tenga registros, y por tanto recuerda más de cerca un diseño hardware, lo cual permite usar la vasta literatura acerca de la optimización de compiladores para generar código para la máquina virtual Parrot, de modo que el bytecode se ejecute a velocidades cercanas a la de lenguajes compilados tales como C.

Conceptos Funcionales

Parrot tiene un rico soporte para un conjunto de características de los programas funcionales, incluyendo clausuras y continuaciones. Especialmente a la vista de las ricas características de Parrot para el manejo de excepciones e hilos de ejecución, pueden ser características muy difíciles de implementar correctamente, y resolver tales problemas de una vez al nivel de la máquina virtual puede ofrecer grandes ganancias para todos los lenguajes clientes de Parrot.

Herramientas del Compilador

Artículo principal: Motor de Análisis Sintáctico

Parrot provee un conjunto de herramientas de escritura de compiladores que incluye el Motor de Análisis Sintáctico (Parser Grammar Engine - PGE), un generador de analizadores híbridos que puede expresar analizadores recursivos descendentes así como analizadores basados en precedencia de operadores, lo cual permite la libre transición entre los dos en una única gramática. El PGE alimenta al Motor de Árboles Sintácticos (Tree Grammar Engine - TGE) que transforma el árbol sintáctico generado por el PGE para su optimización y de manera última para la generación de código.

Lenguajes Clientes Existentes

Además de un subconjunto del planeado Perl 6, se pueden compilar en lenguaje ensamblador de Parrot un conjunto creciente de lenguajes, incluyendo APL, BASIC, Befunge, Brainfuck, Cola, Forth, Jako, Lisp, M4, Miniperl, Ook!, Parakeet, OpenComal, PHP, Plot, Pheme, Punie, Python, Ruby, Scheme, Span, Tcl (también conocido como partcl), URM, Winxed, y YAL. La mayoría de estas otras implementaciones de lenguajes están actualmente todavía incompletas y son experimentales.

Posible Lenguajes Futuros y Proyectos

Hay un fuerte interés en partes de la comunidad de Ruby. La comunidad de Python está tomando una actitud más de esperar y ver, debido a que tienen Psycol, que es un compilador de Python a código máquina just-in-time, Jython, que es un compilador de Python a códigos de byte Java, e IronPython para compilar a la plataforma .NET, así como PyPy en desarrollo, que es una reescritura de Python en Python dirigida a proveer generación estática de código, así como un alto nivel de optimización.

Interioridades

El código Parrot presenta tres formas. Códigos de byte interpretados de forma nativa por Parrot. Lenguaje Ensamblador de Parrot (Parrot Assembler - PASM) que es el lenguaje de bajo nivel que se compila a códigos de byte. Representación Intermedia de Parrot (Parrot Intermediate Representation - PIR) es un lenguaje de un nivel ligeramente más alto que PASM y que también se compila a códigos de byte. Es el objetivo primario de las implementaciones de los diversos lenguajes. PIR gestiona de forma transparente las convenciones de llamada entre rutinas de Parrot, provee una sintáxis mejorada, asigna y reasigna registros, entre otras cosas. El código PIR es guardado normalmente en ficheros con el sufijo ".pir".

IMCC es el Compilador de Código Intermedio de Parrot y compila a PIR.

Ejemplos

Registros

Parrot está basado en registros, como la mayoría de las CPUs en hardware, y a diferencia de la mayoría de las máquinas virtuales, que están basadas en pilas. Parrot provee cuatro tipos de registros:

  • I: tipo entero nativo
  • N: números en coma flotante
  • S: registros avanzados de cadenas con soporte para Unicode
  • P: PMC, ó Parrot Magic Cookie — tipo objeto de Parrot

Hasta la versión 0.3.0, Parrot proveía típicamente 32 registros de cada tipo, con la posibilidad de activar 64 registros. Versiones posteriores proveen un número ilimitado de registros; cada función puede solicitar tantos registros de cada tipo como necesite.

Operaciones Aritméticas

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 main :main
   $I1 = 4
   inc $I1     # $I1 es ahora 5
   $I1 += 2    # $I1 es ahora 7
   $N1 = 42.0
   dec $N1     # $N1 es ahora 41.0
   $N1 -= 2.0  # $N1 es ahora 39.0
   print $I1
   print ", "
   print $N1
   print "\n"
.end

Cultura

La línea (humorística) actual del proyecto Parrot es «un bytecode para regirlos a todos», en referencia al Anillo Único de El hobbit y El Señor de los Anillos, de Tolkien

Hasta el final de 2005, Dan Sugalski fue el diseñador principal y el arquitecto jefe de Parrot. Chip Salzenberge, un viejo programador de Perl, del kernel de Linux, y de C++, asumió esta posición hacia la mitad de 2005, cuando se convirtió en el desarrollador principal. Allison Randal, la desarrolladora principal de Punie y arquitecto jefe de la cadena de herramientas de compilador de Parrot, es ahora el arquitecto jefe.

Las discusiones acerca del desarrollo tienen lugar de forma primordial en la lista de correa de portadores de Perl, alojada en perl.org. Además, hay encuentros semanales moderados para los desarrolladores de Parrot y de sus lenguajes alojados en #parrotsketch en irc.perl.org. El canal #parrot en esa misma red es visitado a menudo por los programadores de Parrot.

Las discusiones de diseño existen en la forma de Documentos de Diseño de Parrot, o PDDs, en el repositorio de Parrot [3]. El arquitecto jefe o algún 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 programadores de Parrot convierten estos documentos en pruebas ejecutables, y entonces se implementan dichas características.

Licencia

Parrot es un proyecto de software libre, distribuido bajo los mismos términos que Perl, es decir, licenciado de forma dual bajo la Licencia Pública General de GNU y bajo la Licencia Artística.

Véase también

Enlaces externos


Wikimedia foundation. 2010.

Mira otros diccionarios:

  • Máquina virtual Parrot — Parrot es una máquina virtual basada en registros, que está siendo desarrollada en lenguaje C, y que pretende la ejecución de programas escritos en distintos lenguajes dinámicos, de manera eficiente. La misma utiliza un mecanismo de compilación… …   Enciclopedia Universal

  • Máquina virtual — Arquitectura típica de una máquina virtual. VirtualBox …   Wikipedia Español

  • Parrot — Saltar a navegación, búsqueda El término Parrot puede designar a: Friedrich von Parrot Máquina virtual Parrot Obtenido de Parrot Categoría: Wikipedia:Desambiguación …   Wikipedia Español

  • Perl 6 — Saltar a navegación, búsqueda Perl 6 Paradigma: multiparadigma Apareció en: 2000 Diseñado por: Larry Wall y la comunidad Perl Tipo de dato: Dinámico y estático Implementaciones …   Wikipedia Español

  • Motor de Análisis Sintáctico — Este artículo o sección se refiere o está relacionado con un software futuro o en desarrollo. La información de este artículo puede cambiar frecuentemente. Por favor, no agregues datos especulativos y recuerda colocar referencias a fuentes… …   Wikipedia Español

  • Common Language Runtime — El Common Language Runtime o CLR ( entorno en tiempo de ejecución de lenguaje común ) es un entorno de ejecución para los códigos de los programas que corren sobre la plataforma Microsoft .NET. El CLR es el encargado de compilar una forma de… …   Wikipedia Español

  • JRuby — Desarrollador Charles Nutter, Thomas Enebo, Ola Bini y Nick Sieger www.jruby.org/ Información general Última versión estable 1.6.0 …   Wikipedia Español

  • Pugs — Saltar a navegación, búsqueda 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. Contenido 1 Sumario 2 Versiones …   Wikipedia Español

  • Perl — Desarrollador(es) Larry Wall www.perl.org Información general Paradigma multiparadigma, funcional, im …   Wikipedia Español

  • Monstruos de Power Rangers — Anexo:Monstruos de Power Rangers Saltar a navegación, búsqueda Los monstruos es un término que se usa para los secuaces de los villanos de Power Rangers. Los villanos usan a monstruos para destruir a los Power Rangers. Los monstruos son creados… …   Wikipedia Español


Compartir el artículo y extractos

Link directo
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.