Flávio S. GlockPublicado em 01/09/2010
Perl 6 é uma especificação de linguagem escrita e avaliada pela própria comunidade ao longo da última década. A medida que as pessoas envolvidas foram concordando com os principais aspectos dessa especificação, algumas implementações começaram a surgir, ajudando a comunidade a testar funcionalidades e verificar o que de fato era prático e o que deveria ser repensado.
Nos últimos meses, a atenção do mundo voltou-se para o Rakudo Star, uma implementação útil e usável do Perl 6. Mas o poderoso Rakudo está longe de ser o único compilador Perl 6 por aí...
No artigo de hoje, vamos chamar sua atenção para outra implementação muito interessante, o Perlito, também conhecido como MiniPerl6.
Ao contrário de implementações mais robustas - e mais lentas - como o Rakudo, o Perlito não implementa todos os detalhes do Perl 6. Pelo contrário, a ideia do projeto é oferecer apenas um "subconjunto útil" da linguagem, em um compilador pequeno e eficiente.
Como resultado, o Perlito gera programas relativamente rápidos, e pode ser utilizado como linguagem para bootstrapping, ou como uma implementação ideal para seus primeiros passos em Perl 6.
Outra característica marcante do Perlito é que seu programa em Perl 6 pode ser compilado para a linguagem de sua escolha, seja Perl 5, Python, Ruby, Lisp, Go, ou várias outras opções. De fato, um dos backends mais interessantes do Perlito é em JavaScript, e permite que você programe em Perl 6 diretamente de seu navegador web - até por smartphones!
Esta página carregou a versão para Javascript do Perlito. Para utilizá-la, clique no botão "Execute" abaixo de cada exemplo.
É possível editar os exemplos, experimente. Você certamente encontrará erros do compilador - este é um trabalho em desenvolvimento, e a implementação ainda tem alguns problemas.
Exemplo: interpolação de string, comando "say"
Exemplo: comando "for", estruturas de dados
Exemplo: gramática e objeto "Match"
A distribuição do Perlito no CPAN se chama "v6". Para instalar:
cpan install v6
Com v6.pm instalado, é possível executar scripts com o perl 5 que você tem no seu computador:
#!/usr/local/bin/perl
use v6-perlito;
"hello, world".say;
A distribuição "v6" inclui o script "perlito", que permite a execução interativa:
perlito
>
> my @v
> @v = 1..4
> say @v.perl
[1, 2, 3, 4]
> for @v { say "hello, $_" }
hello, 1
hello, 2
hello, 3
hello, 4
O compilador consiste de uma gramática, como a que vimos no exemplo acima, que descreve as diversas estruturas da linguagem Perl 6. O resultado da gramática é um objeto que contém a "árvore de sintaxe abstrata" (AST) do script. A árvore de sintaxe é então percorrida por um gerador de código, que escreve o programa executável.
Exemplo: clique no botão para ver a árvore de sintaxe
Exemplo: clique no botão para gerar a árvore de sintaxe deste script
A arquitetura do compilador Perlito é derivada do compilador "MiniPerl6", desenvolvido em 2006. O desenho abaixo mostra a relação entre os diversos componentes do MiniPerl6. O Perlito acrescenta a esta estrutura um parser de precedência.
O compilador Perlito é a ferramenta que traduz o seu script para um formato em que possa ser executado: Javascript, Perl5, Python, Ruby, Lisp, ou binário ".exe", "elf" ou ".class".
A versão completa do compilador está disponível no site github: http://github.com/fglock/Perlito
As versões estáveis estão disponíveis em http://github.com/fglock/Perlito/downloads
v6.pm "Perl6 em Perl5" disponível no CPAN: http://search.cpan.org/dist/v6
Perlito em Javascript: disponível em http://perlcabal.org/~fglock/perlito.js. Esta é a versão utilizada nos exemplos deste artigo.
Flávio S. Glock <fglock@gmail.com>