perl parsing jit perl6

¿Solo puede ''perl6'' analizar Perl 6?



parsing jit (5)

¿Perl6 tiene un compilador JIT?

Usted implica que Perl5 no puede JITted basándose en "solo perl puede analizar Perl5", pero eso no es cierto. Aunque un programa Perl5 se puede compilar de manera diferente cada vez que se ejecuta, eso no impide que esté JITted.

Por lo tanto, si Perl5, una de las lenguas menos definidas, puede ser JITted, por qué Perl6 no podría serlo también.

Está ese axioma Perl (relativamente) bien conocido, "Sólo Perl puede analizar Perl". Me pregunto, ¿seguirá siendo así para Perl 6?

Ampliando la discusión ... Pensé en esta pregunta dada la reciente actualización de PyPy. ¿Perl la capacidad de análisis única de Perl lo excluye de esfuerzos similares? ¿Hay mucho valor en una vista restringida y estática del código Perl (PPI?)? ¿Perl 6 tiene un compilador JIT? *

* No estoy seguro si estos conceptos están relacionados. ¿Son ellos?


El axioma "Sólo Perl puede analizar Perl", donde "perl" es el binario del intérprete y "Perl" es el lenguaje, en gran parte se deriva del hecho de que las reglas de análisis pueden cambiar mientras se analiza el archivo. En Perl 5, esto proviene de declaraciones de subrutinas con prototipos, de varios pragmas y de filtros fuente.

En mi opinión, esto solo se convertirá en un problema mayor en Perl 6. En Perl 5, el número de lugares donde las reglas del analizador pueden cambiar es limitado, mientras que en Perl 6, son amplios y variados. Además de todo lo que tiene Perl 5, Perl 6 le permite definir sus propios operadores, y dado que esta definición se realiza en código Perl, se necesita un intérprete de Perl para darle sentido.

Hasta donde yo sé, ninguna implementación lo soporta todavía, pero la especificación Perl 6 también incluye macros de nivel de lenguaje real, que pueden reestructurar el código de Perl 6 textualmente o manipulando el AST. Ambos requieren la existencia de un intérprete de Perl para realizar su magia.

Por lo tanto, en conclusión, tengo la sensación de que Perl 6 hará que el axioma sea más fuerte que para Perl 5. (Y será aún más una pesadilla para los autores de marcadores de sintaxis :)) Por supuesto, esto es todo para aumentar la capacidad expresiva. poder del idioma, entonces estoy de acuerdo con la concesión.

Un corolario de lo anterior es que a diferencia de Perl 5, Perl 6 tiene una especificación formal, por lo que el axioma podría tener que cambiar a "Solo un intérprete que implementa la especificación Perl 6 puede analizar Perl 6", pero eso es un poco pedante.

Por la actualización:

No creo que lo anterior impida la idea de un compilador JIT para Perl 6, ya que, por definición, dicho compilador también debería contener un intérprete Perl 6. En lo que respecta a la compilación estática, PODRÍA ser posible, pero restringiría severamente el poder de tiempo de ejecución del lenguaje, ya que cualquier construcción que implique eval no funcionaría.

PPI es útil en Perl 5 land porque el intérprete de Perl no proporciona muchas interfaces ricas y fáciles de usar para su AST. En Perl 6, el nivel de introspección es MUY mayor, por lo que el intérprete mismo puede proporcionar todas las herramientas necesarias.


La última vez que miré, Perl 6 hereda Perl 5''s / character, que puede significar "principio de expresión regular" cuando se espera un término, o "dividir" cuando se espera un operador. Dado que, y prototipos, y Perl 6 está al menos en el mismo campo que Perl 5 para tokenización estática. La única forma de convertir un programa Perl 6 en tokens es tener un intérprete Perl 6 en ejecución en el compilador Perl 6. Tortugas todo el camino hacia abajo, una vez más.


No hay perl6, y hay muchos compiladores Perl 6. Perl 6 tiene una gramática, aunque está escrita en Perl 6 , por lo que siempre que puedas entender eso, te dice todo lo que necesitas saber.

Acabo de hacerle esta pregunta a Larry, ya que estoy sentado frente a él durante el almuerzo en el taller São Paulo Perl . Él dice que ahora es "Solo Perl 6 puede analizar Perl 6", con letras mayúsculas en ambos Perls, lo que significa algo diferente al enunciado original.

No necesita un programa específico para hacerlo, ya que el objetivo de Perl 6 es un estándar y muchas implementaciones. No hay "perl6", aunque Larry tuvo ese alias a su Rakudo para la charla de hoy, a pesar de que utilizó algunas implementaciones diferentes para los ejemplos.


Perl 6 es una especificación y cualquier programa que siga esa especificación es Perl 6, al igual que para la mayoría de los demás idiomas. Hay una serie de implementaciones de Perl 6 en las obras.