fbpx
Wikipedia

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 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.

Máquina virtual Parrot
Logo de la Fundación Parrot
Información general
Tipo de programa Máquina virtual
Desarrollador La Fundación Parrot
Licencia Licencia Artística 2.0
Estado actual Desarrollo
Información técnica
Programado en Lenguaje de programación C
Versiones
Última versión estable 8.1.0 (info) 16 de febrero de 2016 (5 años, 5 meses y 18 días)
Enlaces
Sitio web oficial
Repositorio de código

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.

La versión 1.0, con una API estable para desarrollo, fue lanzada el 17 de marzo de 2009.[1]

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 .

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 amplio soporte para un conjunto de características de programación funcional, incluyendo clausuras y continuaciones, que son especialmente difíciles de implementar de forma correcta y portable, especialmente en conjunción con el manejo de excepciones e hilos de ejecución. La mayor ventaja es la expansibilidad dinámica de objetos con métodos (PMC) y operaciones genéricas. Implementar soluciones a estos problemas a nivel de la máquina virtual previene la repetición de esfuerzos en la resolución de esos problemas en los lenguajes cliente individuales.

Herramientas del compilador

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.

Posibles 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 Psyco y PyPy, que son intérpretes que compilan código 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 sintaxis 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, o 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 núcleo 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 . 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.

Referencias

  1. «Parrot Roadmap». Parrot Foundation. 20 de noviembre de 2008. Consultado el 20 de noviembre de 2008. 

Véase también

Enlaces externos

  • Sitio web oficial del proyecto Parrot (en inglés)
  • Rakudo Perl 6: Página oficial de Rakudo, una implementación de Perl 6 sobre la máquina virtual Parrot. (en inglés)
  •   Datos: Q1354914

máquina, virtual, parrot, parrot, máquina, virtual, basada, registros, está, siendo, desarrollada, lenguaje, pretende, ejecución, programas, escritos, distintos, lenguajes, dinámicos, manera, eficiente, misma, utiliza, mecanismo, compilación, tiempo, ejecución. Parrot es una maquina virtual basada en registros que esta siendo desarrollada en lenguaje C y que pretende la ejecucion de programas escritos en distintos lenguajes dinamicos de manera eficiente La misma utiliza un mecanismo de compilacion en tiempo de ejecucion para acelerar la velocidad de ejecucion 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 maquina virtual Maquina virtual ParrotLogo de la Fundacion ParrotInformacion generalTipo de programaMaquina virtualDesarrolladorLa Fundacion ParrotLicenciaLicencia Artistica 2 0Estado actualDesarrolloInformacion tecnicaProgramado enLenguaje de programacion CVersionesUltima version estable8 1 0 info 16 de febrero de 2016 5 anos 5 meses y 18 dias EnlacesSitio web oficial Repositorio de codigo editar datos en Wikidata Parrot fue iniciada en la comunidad Perl pero se sigue desarrollando con la ayuda de otras comunidades de codigo abierto Como resultado el proyecto esta 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 ejecucion la reduccion de su tamano 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 dinamicos El proyecto tambien esta enfocado en mejorar las capacidades de introspeccion depuracion y modulacion semantica en tiempo de compilacion de esta maquina virtual La version 1 0 con una API estable para desarrollo fue lanzada el 17 de marzo de 2009 1 Indice 1 Historia 2 Lenguajes 2 1 Lenguajes estaticos y dinamicos 2 2 Conceptos funcionales 2 3 Herramientas del compilador 2 4 Lenguajes clientes existentes 2 5 Posibles lenguajes futuros y proyectos 3 Interioridades 4 Ejemplos 4 1 Registros 4 2 Operaciones aritmeticas 5 Cultura 6 Licencia 7 Referencias 8 Vease tambien 9 Enlaces externosHistoria EditarEl proyecto comenzo para implementar Perl 6 y originalmente tenia 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 hipotetico llamado Parrot que unificaria Python y Perl 1 El nombre fue mas tarde adoptado por este proyecto que tiene como objetivo soportar tanto Perl como Python Varios pequenos lenguajes se estan desarrollando tambien teniendo como base la maquina virtual Parrot Las versiones anteriores estan documentadas en el registro historico de la web oficial 2 Lenguajes EditarEl objetivo de la maquina virtual Parrot es hospedar lenguajes clientes y permitir la interoperacion entre ellos Existen un conjunto de problemas que resolver para conseguir este objetivo Lenguajes estaticos y dinamicos Editar Las diferentes propiedades de los lenguajes tipados estatica y dinamicamente han influido en el diseno de Parrot Las actuales maquinas virtuales populares tales como la maquina virtual Java y el Common Language Runtime han sido disenados para ser usados con lenguajes tipados estaticamente mientras que los lenguajes objetivo de Parrot son dinamicamente tipados Las maquinas virtuales similares a la de Java y la actual maquina virtual de Perl 5 estan tambien basadas en pila maquina de pila Los desarrolladores ven como una ventaja que la maquina Parrot tenga registros y por tanto recuerda mas de cerca un diseno hardware lo cual permite usar la vasta literatura acerca de la optimizacion de compiladores para generar codigo para la maquina virtual Parrot de modo que el bytecode se ejecute a velocidades cercanas a la de lenguajes compilados tales como C Conceptos funcionales Editar Parrot tiene un amplio soporte para un conjunto de caracteristicas de programacion funcional incluyendo clausuras y continuaciones que son especialmente dificiles de implementar de forma correcta y portable especialmente en conjuncion con el manejo de excepciones e hilos de ejecucion La mayor ventaja es la expansibilidad dinamica de objetos con metodos PMC y operaciones genericas Implementar soluciones a estos problemas a nivel de la maquina virtual previene la repeticion de esfuerzos en la resolucion de esos problemas en los lenguajes cliente individuales Herramientas del compilador Editar Articulo principal Motor de Analisis Sintactico Parrot provee un conjunto de herramientas de escritura de compiladores que incluye el Motor de Analisis Sintactico Parser Grammar Engine PGE un generador de analizadores hibridos que puede expresar analizadores recursivos descendentes asi como analizadores basados en precedencia de operadores lo cual permite la libre transicion entre los dos en una unica gramatica El PGE alimenta al Motor de Arboles Sintacticos Tree Grammar Engine TGE que transforma el arbol sintactico generado por el PGE para su optimizacion y de manera ultima para la generacion de codigo Lenguajes clientes existentes Editar Ademas 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 tambien conocido como partcl URM Winxed y YAL La mayoria de estas otras implementaciones de lenguajes estan actualmente todavia incompletas y son experimentales Posibles lenguajes futuros y proyectos Editar Hay un fuerte interes en partes de la comunidad de Ruby La comunidad de Python esta tomando una actitud mas de esperar y ver debido a que tienen Psyco y PyPy que son interpretes que compilan codigo Python a codigo maquina just in time Jython que es un compilador de Python a codigos de byte Java e IronPython para compilar a la plataforma NET asi como PyPy en desarrollo que es una reescritura de Python en Python dirigida a proveer generacion estatica de codigo asi como un alto nivel de optimizacion Interioridades EditarEl codigo Parrot presenta tres formas Codigos 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 codigos de byte Representacion Intermedia de Parrot Parrot Intermediate Representation PIR es un lenguaje de un nivel ligeramente mas alto que PASM y que tambien se compila a codigos 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 sintaxis mejorada asigna y reasigna registros entre otras cosas El codigo PIR es guardado normalmente en ficheros con el sufijo pir IMCC es el Compilador de Codigo Intermedio de Parrot y compila a PIR Ejemplos EditarRegistros Editar Parrot esta basado en registros como la mayoria de las CPUs en hardware y a diferencia de la mayoria de las maquinas virtuales que estan basadas en pilas Parrot provee cuatro tipos de registros I tipo entero nativo N numeros en coma flotante S registros avanzados de cadenas con soporte para Unicode P PMC o Parrot Magic Cookie tipo objeto de ParrotHasta la version 0 3 0 Parrot proveia tipicamente 32 registros de cada tipo con la posibilidad de activar 64 registros Versiones posteriores proveen un numero ilimitado de registros cada funcion puede solicitar tantos registros de cada tipo como necesite Operaciones aritmeticas Editar 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 endCultura EditarLa linea humoristica actual del proyecto Parrot es un bytecode para regirlos a todos en referencia al Anillo Unico de El hobbit y El Senor de los Anillos de TolkienHasta el final de 2005 Dan Sugalski fue el disenador principal y el arquitecto jefe de Parrot Chip Salzenberge un viejo programador de Perl del nucleo Linux y de C asumio esta posicion hacia la mitad de 2005 cuando se convirtio 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 Ademas 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 diseno existen en la forma de Documentos de Diseno de Parrot o PDDs en el repositorio de Parrot 3 El arquitecto jefe o algun otro disenador designado produce estos documentos para explicar la filosofia de una caracteristica asi como su interfaz y notas de diseno Los programadores de Parrot convierten estos documentos en pruebas ejecutables y entonces se implementan dichas caracteristicas Licencia EditarParrot es un proyecto de software libre distribuido bajo los mismos terminos que Perl es decir licenciado de forma dual bajo la Licencia Publica General de GNU y bajo la Licencia Artistica Referencias Editar Parrot Roadmap Parrot Foundation 20 de noviembre de 2008 Consultado el 20 de noviembre de 2008 Vease tambien EditarCommon Language Runtime Java virtual machine mod parrot Perl 6Enlaces externos EditarSitio web oficial del proyecto Parrot en ingles Rakudo Perl 6 Pagina oficial de Rakudo una implementacion de Perl 6 sobre la maquina virtual Parrot en ingles Datos Q1354914Obtenido de https es wikipedia org w index php title Maquina virtual Parrot amp oldid 136619017, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos