O programa Paulino Kenji Sato <[EMAIL PROTECTED]> executou uma opera��o
ilegal no m�dulo Re: (linux-br) Transformar .pl em binario ou algo do tipo
em Thu, 17 May 2001 19:04:28 -0300 (EST):
> ruim disso eo tamanho final do arquivo.
>
> 79 May 17 18:59 teste.pl
> 159203 May 17 18:59 teste.plc
O interessante � que mesmo seguindo um processo parecido com a compilacao
em bytecode de Java (lembro-me de ter lido alguma documentacao da Sun que
dizia q a criacao de um interpretador de codigo Java em texto puro
diminuiria a performance em 200%), esse processo acaba sendo mais lento do
que a execucao em texto plano. Segundo o livro do camelo, de Larry Wall,
p�g. 474, cap�tulo 18 da edicao em portugues, vc tem 4 fases distintas
possiveis no ciclo de execucao de um programa Perl:
|--Geracao de codigo --- Reconstrucao da arvore de an�lise --|
| |
Compilacao -------------------------------------------------> Execucao
Apesar de ser considerada por muitos como uma linguagem interpretada, todo
programa Perl � compilado antes de sua execucao. S� que nao � gerado
c�digo nativo de arquitetura durante este processo, mas AFAIK um processo
semelhante aa geracao de p-code do gcc. Mas, segundo Wall, todos os
programas sao interpretados, a diferenca eh o nivel em q isso ocorre :).
Trecho do livro:
"1 - Fase de compilacao
Durante a fase 1, a fase de compila��o, o compilador Perl converte seu
programa em uma estrutura de dados chamada �rvore de an�lise. Junto com as
tecnicas de analise padrao, Perl emprega uma muito mais poderosa: ele usa
blocos BEGIN para orientar a compilacao futura. Blocos BEGIN sao entregues
ao interpretador para serem executados assim q sao analisados, o q
efetivamente os executa na ordem FIFO (First In, First Out). Isso inclui
quaisquer declaracoes use e no; estas sao na realidade apenas blocos BEGIN
disfarcados. Quaisquer blocos CHECK, INIT e END sao programados pelo
compilador para execucao adiada. (...)
2 - Fase de gera��o de c�digo (opcional)
Blocos CHECK sao instalados por geradores de c�digo, de modo que essa
fase opcional ocorre quando vc usa explicitamente um dos geradores de
c�digo. Esses convertem o programa compilado (mas ainda nao executado) em
c�digo fonte C, ou em bytecodes Perl serializados (uma sequencia de
valores expressando as instrucoes internas da Perl. (...)
3 - Fase de reconstrucao da arvore de analise (opcional)
Para reanimar o programa, sua �rvore de an�lise precisa ser reconstru�da.
Essa fase s� existe se houve gera��o de c�digo e voc� escolheu gerar
bytecode. a partir dessa sequencia de bytecodes antes que o programa possa
ser executado. Perl nao executa diretamente atrav�s de bytecodes: isso
seria lento.
4 - Fase de execucao
... o interpretador apanha a �rvore de an�lise, que apanhou diretamente
do compilador ou indiretamente, da gera��o de c�digo e da reconstru��o da
�rvore de an�lise subsequente) e a executa. (...)"
Independente do seu c�digo estar em texto puro ou n�o, vc ter� q criar sua
�rvore de an�lise da mesma forma. Mas quando o c�digo est� na forma de
bytecode, n�o � feito o parsing l�xico (segundo explicado na p�gina 541 do
mesmo livro), pois o interpretador assume que j� foi executado esse passo
durante a geracao de codigo (q vem depois da fase de compilacao). Maaaas
como jah foi dito, a arvore de analise tem q ser reconstruida da mesma
forma, e como o arquivo em bytecode eh maior, e por consequencia requer
mais memoria para ser analisado, a execucao ser� bem mais lenta do que o
codigo em texto puro, independente do mesmo passar pelo analisador de
sintaxe a cada execucao. Sem falar que o interpretador Perl, no caso do
bytecode, tem que chamar um modulo em separado para a decodificacao do
bytecode:
thiago@ktb:~/code/perl$ cat teste.pl
#!/usr/bin/perl
print "oi\n";
thiago@ktb:~/code/perl$ cat teste.plc | head -n 3
#!/usr/bin/perl
use ByteLoader 0.03;
thiago@ktb:~/code/perl$ wc -l teste.pl teste.plc
3 teste.pl
1731 teste.plc
1734 total
Por isso, eh interessante esperar pelo Perl 6 que ter� um compilador para
codigo nativo totalmente funcional, em aplicacoes que necessitem de
performance E precisem ser redistribuidas sem codigo fonte.
� interessante tamb�m ler os dois textos 'Apocalypse' de Larry Wall, em q
ele explana mais detalhes das novidades em sintaxe, OO, geracao de codigo
e o processo de desenvolvimento do Perl 6:
http://www.perl.com/pub/2001/04/02/wall.html
http://www.perl.com/pub/2001/05/03/wall.html
There's more than one way to do it. (tm)
--
Thiago Pimentel
Preview Tecnologia
Save the whales, feed the poor, free the malloc's.
Assinantes em 17/05/2001: 2292
Mensagens recebidas desde 07/01/1999: 113914
Historico e [des]cadastramento: http://linux-br.conectiva.com.br
Assuntos administrativos e problemas com a lista:
mailto:[EMAIL PROTECTED]