2008-09-22 31 views
23

Entiendo que Parrot es una máquina virtual, pero siento que no entiendo completamente la idea detrás de esto.¿Qué es exactamente Parrot?

Según tengo entendido, se trata de una máquina virtual creada para manejar varios idiomas. ¿Es esto correcto?

¿Cuáles son las ventajas de utilizar una máquina virtual en lugar de solo un intérprete?

¿Qué está haciendo específicamente Parrot que lo hace tan importante?

Respuesta

13

Parrot es un intérprete de bytecode (posiblemente con un JIT en una etapa futura). Think Java y su máquina virtual, excepto que Java está (en este momento) más orientado a los lenguajes estáticos, y Parrot está orientado hacia los lenguajes dinámicos desde el principio.

¡También vea la excelente respuesta de Cody! Muy recomendable.

+0

Otra importación Un punto importante para mencionar es que Parrot está basado en el registro basado en la pila, a diferencia de la JVM y la CLR. Esto puede, en teoría, facilitar la optimización ya que tenemos mucha más experiencia con los sistemas basados ​​en registros. –

+0

Cody: Deberías publicar eso para que pueda hacer +1 en tu comentario. :-) –

+0

En realidad, el loro ha tenido jit, para sistemas x86 al menos, desde hace un tiempo. –

21

Chris cubrió las diferencias de cara al usuario, así que cubriré el otro lado.

Parrot se basa en registro en lugar de en la pila. Lo que eso significa es que los desarrolladores de compiladores pueden optimizar más fácilmente la forma en que los registros deben asignarse para una pieza determinada de código. Además, la compilación desde el código de bytes Parrot hasta el código máquina puede, en teoría, ser más rápido que el código basado en la pila, ya que ejecutamos sistemas basados ​​en registro y tenemos mucha más experiencia de optimización para ellos.

36

Parrot es una máquina virtual específicamente diseñada para manejar varios idiomas, especialmente los lenguajes dinámicos. A pesar de la tecnología interesante que implica, dado que puede manejar más de un idioma, podrá cruzar los límites del idioma. Por ejemplo, una vez que puede compilar Ruby, Perl y Python, debería ser fácil cruzar esos límites para permitirme usar una biblioteca de Ruby en Python, una biblioteca Perl de Python, así que cualquiera que sea la combinación que me guste.

Parrot comenzó en el mundo de Perl y muchas de las personas que trabajan en él son personas experimentadas de Perl. En lugar de utilizar el intérprete actual de Perl, que muestra su edad, Parrot permite que Perl tenga características como módulos precompilados distribuibles (que todos los demás han tenido durante mucho tiempo) y un recolector de basura más inteligente.

+1

¡Gracias por la buena respuesta de un miembro de la comunidad de Perl! No me quedaban votos, pero una vez que termine el día (dentro de 15 minutos) te votaré. :-) –

+0

Perl tiene módulos precompilados distribuibles desde hace mucho tiempo; simplemente nunca entendieron (en gran parte porque son solo un vuelco del formato en memoria del código compilado, por lo que terminan siendo lo suficientemente grandes como para que el tiempo para cargarlos desde el disco pueda ser más largo que el tiempo que le tomaría a Perl). regenerarlos desde el código fuente) – ysth

+0

Por lo que recuerdo haber leído, los PMC también solo funcionaban en ciertas situaciones. Nunca los exploré porque recuerdo haberlos roto rápidamente. Sin embargo, me olvido de los detalles. –

8

Otros han dado respuestas excelentes, entonces lo que me queda es explicar qué significan los lenguajes "dinámicos".

En el contexto de una máquina virtual, significa que no se conoce el tipo de una variable en tiempo de compilación. En los lenguajes "estáticos", el tipo (o al menos una clase principal) se conoce en tiempo de compilación, y muchas optimizaciones se basan en ese conocimiento.

Por otro lado, en idiomas dinámicos puede saber si una variable contiene un tipo de contenedor (como una matriz) o escalar (cadena, número, ...), pero tiene mucha menos información de tipo en tiempo de compilación.

Otra característica es que los lenguajes dinámicos generalmente hacen que las conversiones de tipo sean mucho más fáciles, por ejemplo, en perl y javascript si utiliza una cadena como número, se convierte automáticamente en un número.

Parrot está diseñado para hacer que tales operaciones sean fáciles y rápidas, y para permitir optimizaciones sin saber tener información de tipos en tiempo de compilación.

+0

No se trata solo de tipos. Los lenguajes dinámicos le permiten redefinir varias cosas que no son de tipo después de la compilación. –

2

Aquí está el Official Parrot Wiki.

Puede encontrar mucha información y enlaces allí.

La parte inferior de la página de inicio de Parrot wiki también muestra los últimos titulares del agregador de feeds Planet Parrot.

Además de la VM, el proyecto Parrot está construyendo una poderosa cadena de herramientas para facilitar el acceso a los idiomas existentes o el desarrollo de uno nuevo.

El Parrot VM también proporcionará otros idiomas bajo las cubiertas de soporte para muchas características nuevas y eficaces de Perl 6 (consulte el Official Perl 6 Wiki para obtener más información de Perl 6).

Parrot proporcionará interoperabilidad entre módulos de diferentes idiomas, de modo que, por ejemplo, otros idiomas pueden aprovechar lo que se convertirá en la gran versión Perl 6 de CPAN (el gran archivo de módulos Perl 5, que Perl 6 podrá acceso a través del próximo Perl 5.12).

1

Honestamente, no sabía que era tan importante. Ha recorrido un largo camino, pero no está viendo mucho uso. El principal idioma de destino todavía tiene que llegar realmente, y ha perdido una gran parte de la mente entre los profesionales de la industria. Mientras tanto, otras soluciones como .Net y proyectos como Jython nos muestran que el aquí y el ahora puede vencer cualquier expectativa.

1
  • loro se lo java dirigido por pero nunca logra - una máquina virtual para todos los de OS y plataformas
  • loro pondrá en práctica las ideas detrás de la Microsoft Common Language Runtime para cualquier lenguaje dinámico y verdaderamente multiplataforma
  • por encima de todo loro es y será libre y de código abierto
  • loro se convertirá en el estándar de facto para la programación de código abierto con lenguajes dinámicos