Pode Ruby, PHP, Perl ou criar um arquivo de pré-compilado para o código como Python?

votos
19

Para Python, ele pode criar uma versão file.pyc pré-compilados para que o programa pode ser executado sem interpretado novamente. Pode Ruby, PHP, Perl e fazer o mesmo na linha de comando?

Publicado 19/05/2009 em 18:54
fonte usuário
Em outras línguas...                            


11 respostas

votos
30

Não há nenhuma especificação de bytecode portátil para Ruby, e assim também nenhuma maneira padrão para carregar arquivos bytecode pré-compilados. No entanto, quase todas as implementações Ruby usam algum tipo de formato bytecode ou intcode, e vários deles pode despejar e recarregar arquivos bytecode.

YARV sempre compila para bytecode antes de executar o código, no entanto, que geralmente é feito somente na memória. Há maneiras de despejar o bytecode para o disco. No momento, não há nenhuma maneira de lê-lo de volta em , no entanto. Isto irá mudar no futuro: o trabalho está em andamento em um verificador de bytecode para YARV, e uma vez que é feito, bytecode pode seguramente ser carregado para o VM, sem medo de corrupção. Além disso, os desenvolvedores do JRuby indicaram que eles estão dispostos a implementar um emulador YARV VM dentro JRuby , uma vez que o formato YARV bytecode e verificador são estabilizadas, de modo que você pode carregar YARV bytecode em JRuby. (Note-se que esta versão é obsoleta .)

Rubinius também sempre compila para bytecode, e tem um formato para arquivos compilados ( .rbcarquivos, análogas à JVM .classarquivos) e não há conversa sobre um formato de arquivo de bytecode ( .rbaarquivos, análogo ao JVM .jararquivos). Há uma chance de que Rubinius pode implementar um emulador YARV, se a implantação de aplicativos como YARV bytecode nunca se torna popular. Além disso, os desenvolvedores do JRuby indicaram que eles estão dispostos a implementar um emulador bytecode Rubinius dentro JRuby , se Rubinius bytecode torna-se uma maneira popular de implantação de aplicações Ruby. (Note-se que esta versão é obsoleta .)

XRuby é um compilador puro, ele compila Rubi sourcecode direto para JVM bytecode ( .classarquivos). Você pode implantar esses .classarquivos como qualquer outro aplicativo Java.

JRuby começou como um intérprete, mas tem tanto um compilador JIT e um compilador AOT ( jrubyc) que pode compilar o Ruby sourcecode a JVM bytecode ( .classarquivos). Além disso, o trabalho está em andamento para criar um novo compilador que pode compilar o código Ruby (anotada-type) para JVM bytecode que realmente se parece com uma classe Java e pode ser usado a partir do código Java sem barreiras.

Ruby.NET é um compilador puro que compila Rubi código fonte para bytecode CIL (PE .dllou .exearquivos). Você pode implantar estes apenas como qualquer outro aplicativo CLI.

IronRuby também compila para bytecode CIL, mas normalmente faz isso em memória. No entanto, você pode passar interruptores de linha de comando a ele , para que ele despeja a .dlle .exearquivos para o disco. Uma vez que você tem aqueles, eles podem ser implantados normalmente.

BlueRuby automaticamente pré-analisa rubi sourcecode em BRIL (BlueRuby Intermediário Language), que é basicamente uma ParseTree serializados. (Veja Azul Ruby - A VM Ruby no SAP ABAP . (PDF) para mais detalhes)

Eu acho (mas eu não sou definitivamente certeza) de que há uma maneira de obter o cardeal para despejar Parrot arquivos bytecode. (Na verdade, o cardeal única compila ao passado, e depois Parrot assume, por isso seria trabalho de Parrot para despejar e arquivos de carga de bytecode).

Respondeu 19/05/2009 em 22:40
fonte usuário

votos
13

Perl 5 podem despejar os bytecodes para o disco, mas é buggy e desagradável. Perl 6 tem um método muito limpo de criar executáveis bytecode que papagaio podem ser executados.

Compilação just-in-time do Perl é rápido o suficiente para que isso não importa, na maioria das circunstâncias. Um lugar onde ela faz questão está em um ambiente CGI que é o que mod_perl é para.

Respondeu 19/05/2009 em 19:03
fonte usuário

votos
11

Para passas histéricas, Perl 5 procura por .pmcarquivos à frente de .pmarquivos na busca de módulo. Estes arquivos podem conter bytecode, embora Perl não escrever bytecode por padrão (ao contrário de Python).

Module :: Compilar (ou: o que é esta coisa PMC) entra em mais alguma profundidade sobre esta característica obscura. Eles não são freqüentemente usados, mas ...

As pessoas inteligentes que escreveram Module :: Compilar tirar proveito desta, para pré-compilar o código Perl em ... bem, ainda é Perl, mas é pré-processado.

Entre outras vantagens, este acelera o tempo de carga e de depuração torna mais fácil quando se utiliza filtros de código (código Perl modificar o código fonte Perl antes de ser carregado pelo intérprete).

Respondeu 19/05/2009 em 20:01
fonte usuário

votos
6

Não para PHP, embora a maioria das configurações do PHP incorporar uma Cache Bytecode que irá armazenar em cache o bytecode compilado para que da próxima vez que o script é executado, a versão compilada é executado. Isso acelera a execução consideravelmente.

Não há nenhuma maneira que eu estou ciente de começar realmente no bytecode, através da linha de comando.

Respondeu 19/05/2009 em 19:00
fonte usuário

votos
5

Para Perl você pode tentar usar B :: Bytecode e perlcc . No entanto, ambos estes são altamente experimental. E Perl 6 está saindo em breve (teoricamente) e estará em Parrot e vai usar um bytecode diferente e então tudo isso vai ser um pouco discutível então.

Respondeu 19/05/2009 em 19:03
fonte usuário

votos
3

aqui estão alguns exemplos de palavras mágicas para a linha de comando

perl -MO=Bytecode,-H,-o"Module.pm"c "Module.pm"
Respondeu 20/05/2009 em 09:17
fonte usuário

votos
2

De acordo com a terceira edição da programação Perl , é possível aproximar este em alguns aspectos experimentais.

Respondeu 19/05/2009 em 19:04
fonte usuário

votos
1

Alguém já pensou em usar bytecode do LLVM, em vez de um ainda-mais-custom-bytecode?

Respondeu 04/06/2009 em 09:02
fonte usuário

votos
1

Para o PHP, o Projeto Phalanger compila para baixo para montagens .Net. Eu não tenho certeza se isso é o que você estava procurando embora.

Respondeu 19/05/2009 em 19:42
fonte usuário

votos
1

Se você usar o Zend Guard em seus scripts PHP, é essencialmente pré-compila os scripts para byte-code, que podem então ser executados pelo motor de PHP se a extensão Zend Optimizer é carregado.

Então, sim, Zend Guard / Optimizer permite scripts PHP pré-compilados para serem usados.

Respondeu 19/05/2009 em 19:27
fonte usuário

votos
0

Ruby 1.8 na verdade não usar bytecode em tudo (mesmo internamente), então não há nenhuma etapa de pré-compilação.

Respondeu 19/05/2009 em 19:05
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more