Máquina virtual Parrot - Parrot virtual machine

Máquina virtual Parrot
Logotipo da Parrot Foundation
Último lançamento
8.1.0 / 16 de fevereiro de 2016 ; 5 anos atrás (2016-02-16)
Repositório
Escrito em C
Sistema operacional Plataforma cruzada
Sucessor MoarVM (para Raku)
Modelo Máquina virtual
Licença Licença Artística 2.0
Local na rede Internet parrot .org Edite isso no Wikidata

O Parrot era uma máquina virtual de processo baseada em registro projetada para executar linguagens dinâmicas com eficiência. É possível compilar a linguagem assembly do Parrot e a representação intermediária do Parrot (PIR, uma linguagem intermediária) para o bytecode do Parrot e executá-lo. O Parrot é um software gratuito e de código aberto.

O Parrot foi iniciado pela comunidade Perl e é desenvolvido com a ajuda das comunidades de código aberto e software livre . Como resultado, ele está focado na compatibilidade de licença com Perl ( Artistic License 2.0 ), compatibilidade de plataforma em uma ampla gama de sistemas, compatibilidade de arquitetura de processador na maioria dos processadores modernos, velocidade de execução, tamanho pequeno (cerca de 700k dependendo da plataforma) e a flexibilidade para lidar com as diversas demandas feitas pelo Raku e outras linguagens dinâmicas modernas .

A versão 1.0, com uma interface de programação de aplicativo (API) estável para desenvolvimento, foi lançada em 17 de março de 2009. A última versão é a versão 8.1.0 "Periquito Andino". O Parrot foi oficialmente descontinuado em agosto de 2021, depois de ser suplantado pelo MoarVM em seu uso principal (Raku) e nunca se tornar um VM mainstream para qualquer um dos outros idiomas suportados.

História

O nome Parrot veio de uma piada de 1º de abril que anunciava uma linguagem hipotética, chamada Parrot , que unificaria Python e Perl . O nome foi posteriormente adotado por este projeto (inicialmente uma parte do esforço de desenvolvimento Raku), que visa oferecer suporte a Raku, Python e outras linguagens de programação. Várias linguagens estão sendo portadas para rodar na máquina virtual Parrot.

A Parrot Foundation foi dissolvida em 2014. A Fundação foi criada em 2008 para deter os direitos autorais e marcas registradas do projeto Parrot, para ajudar a impulsionar o desenvolvimento de implementações de linguagem e a base de código principal, para fornecer uma base para o crescimento da comunidade Parrot e para alcançar para outras comunidades linguísticas.

línguas

O objetivo da máquina virtual Parrot é hospedar linguagens clientes e permitir a interoperabilidade entre elas. Existem vários obstáculos para atingir esse objetivo, em particular a dificuldade de mapear conceitos de alto nível, dados e estruturas de dados entre linguagens.

Linguagens estáticas e dinâmicas

As propriedades diferentes de linguagens com tipagem estática e dinâmica motivaram o design do Parrot. As máquinas virtuais populares atuais, como a máquina virtual Java e o Common Language Runtime , para a plataforma .NET, foram projetadas para linguagens tipadas estaticamente, enquanto as linguagens visadas pelo Parrot são tipadas dinamicamente.

Máquinas virtuais como a máquina virtual Java e a máquina virtual Perl 5 atual também são baseadas em pilha . Os desenvolvedores do Parrot veem a inclusão de registradores do Parrot como uma vantagem, pois, portanto, ele se assemelha mais a um design de hardware, permitindo que a vasta literatura sobre otimização de compiladores seja usada na geração de bytecode para a máquina virtual Parrot que pode rodar em velocidades mais próximas do código de máquina . Outras máquinas virtuais baseadas em registro inspiraram partes do design de Parrot, incluindo LLVM , Lua VM e Inferno's Dis .

Conceitos funcionais

O Parrot tem um suporte avançado para vários recursos de programação funcional, incluindo encerramentos e continuações , os quais podem ser particularmente difíceis de implementar de forma correta e portátil, especialmente em conjunto com tratamento de exceções e threading . A maior vantagem é a extensibilidade dinâmica de objetos com métodos, o que permite contêineres polimórficos (PMCs) e opcodes associados . A implementação de soluções para esses problemas no nível da máquina virtual elimina a necessidade de resolver esses problemas nas linguagens de cliente individuais.

Ferramentas de compilador

O Parrot fornece um conjunto de ferramentas de escrita de compilador que inclui o Parser Grammar Engine (PGE), um gerador de analisador híbrido que pode expressar um analisador descendente recursivo , bem como um analisador de precedência de operador , permitindo a transição livre entre os dois em uma única gramática . O PGE alimenta o Tree Grammar Engine (TGE) que transforma ainda mais a árvore de análise gerada pelo PGE para otimização e, finalmente, para geração de código.

Linguagens de cliente existentes

Muitas linguagens já possuem front-ends de compiladores projetados para o Parrot; no entanto, muitos deles ainda estão apenas parcialmente funcionais. Em julho de 2013, os idiomas mantidos ativamente são:

Os idiomas inativos, desde julho de 2013, são os seguintes:

As seguintes linguagens de programação esotéricas também foram implementadas:

Internos

Existem três formas de código de programa para o Parrot:

  • Bytecode é binário e é interpretado nativamente pelo Parrot. Bytecode geralmente é armazenado em arquivos com a extensão de nome de arquivo ".pbc".
  • Parrot assembly language (PASM) é a linguagem de baixo nível que compila para bytecode. O código PASM normalmente é armazenado em arquivos com a extensão de nome de arquivo ".pasm".
  • A representação intermediária do Parrot (PIR) é uma linguagem de nível ligeiramente superior ao PASM e também compila em bytecode. É o alvo principal das implementações de linguagem. O PIR gerencia de forma transparente as convenções de chamada entre rotinas do Parrot, fornece sintaxe aprimorada, alocação de registro e muito mais. O código PIR é normalmente armazenado em arquivos com a extensão de nome de arquivo ".pir".

Exemplos

Registros

O Parrot é baseado em registro como a maioria das CPUs de hardware e, ao contrário da maioria das máquinas virtuais, que são baseadas em pilha. O Parrot oferece quatro tipos de registros:

O Parrot fornece um número arbitrário de registros; este número é fixado em tempo de compilação por sub-rotina.

Operaçoes aritimeticas

Em PASM

    set I1, 4
    inc I1        # I1 is now 5
    add I1, 2     # I1 is now 7
    set N1, 42.0
    dec N1        # N1 is now 41.0
    sub N1, 2.0   # N1 is now 39.0
    print I1
    print ', '
    print N1
    print "\n"
    end

Em PIR

 .sub 'main' :main
    $I1 = 4
    inc $I1     # $I1 is now 5
    $I1 += 2    # $I1 is now 7
    $N1 = 42.0
    dec $N1     # $N1 is now 41.0
    $N1 -= 2.0  # $N1 now 39.0
    print $I1
    print ', '
    print $N1
    print "\n"
 .end

Desenvolvimento

Até o final de 2005, Dan Sugalski foi o designer-chefe e arquiteto-chefe da Parrot. Chip Salzenberg , um hacker de Perl, kernel do Linux e C ++ de longa data, assumiu o comando até meados de 2006, quando se tornou o desenvolvedor líder. Allison Randal , a principal desenvolvedora do Punie e arquiteta-chefe das ferramentas de compilação da Parrot, foi a arquiteta-chefe até meados de outubro de 2010, quando deixou o cargo e escolheu Christoph Otto como o novo arquiteto-chefe.

As discussões de desenvolvimento ocorrem principalmente no canal #parrot em irc.perl.org. Além disso, há reuniões semanais moderadas para Parrot e desenvolvedores de linguagem hospedadas em #parrotsketch na mesma rede. Muita discussão também ocorre na lista de discussão parrot-dev, hospedada por parrot.org.

As discussões de design existem na forma de Documentos de Design do Parrot, ou PDDs, no repositório do Parrot. O arquiteto-chefe ou outro designer designado produz esses documentos para explicar a filosofia de um recurso, bem como sua interface e notas de design. Os hackers do Parrot transformam esses documentos em testes executáveis ​​e, em seguida, em recursos existentes.

A equipe do Parrot lança uma nova versão estável do software na terceira terça-feira de cada mês. Os committers principais se revezam na produção de lançamentos em uma programação rotativa, onde nenhum committer é responsável por vários lançamentos consecutivos.

Veja também

Referências

links externos