[Rio-pm] Fwd: [SP-pm] Compilação

Marco A P D'Andrade mdacwb em gmail.com
Domingo Novembro 18 19:05:12 PST 2007


Só pra não ficar de fora ...

Me corrijam se eu estiver errado, mas a diferenca entre use e require é o
fato da primeira forçar a verificação no tempo de compilação, ou ... carga
do script.

Se preparar um sistema realmente grande, vc deverá tomar varios cuidados
para não acabar com alto desastroso em mãos, dentre eles, um fracionamento
coerente de módulos e forma de chamada.

Se vc tiver um sistema extenso, e utilizar a chamada padrão, com use, todo o
codigo será validado. Claro... vc provavelmente nem vai perceber, pois
digamos que um sistema muito extenso vai ter o que, 50 ou 100 mil linhas ?
Mas se for um projeto web, ao entrar em produção, com carga elevada, isso
pesa.

Mas... em web para um projeto grande, não será utilizado CGI, será mod_perl,
ou fastcgi.

Bem...  voltando ao ponto use vs require.

O use equivale a "BEGIN { require modulo; import modulo }", e não pode ser
utilizado de forma condicional:

#x
if ( $modo == 1 ) {
   use Modulo1;
 } else {
   use ModuloX;
}

Enquanto que o require permite esta opção.

#x
if ( $modo == 1 ) {
   require Modulo1;
 } else {
   require ModuloX;
}

# Modulo1.pm
package Modulo1;
print "Begin Modulo1\n";
1;

# ModuloX.pm
package Modulo1;
print "Begin ModuloX\n";
X;


Crie os arquivos e faça o teste ;)

http://perldoc.perl.org/functions/require.html
http://perldoc.perl.org/functions/use.html

PS: Conhecimento estraído de leitura de discussões na Cascavel-PM. Como
diria meu chefe... soluções em busca de problemas ;)


Sds,
Marco Antonio

Em 18/11/07, Blabos de Blebe <blabos em gmail.com> escreveu:
>
> Era isso que eu queria saber fernando.
>
> vlw
>
> Obriagado a todos que responderam
>
>
>
>
>
> On Nov 18, 2007 5:49 PM, Fernando Oliveira <fernandocorrea em gmail.com>
> wrote:
> >
> >
> > Isso depende...
> >
> > se nos seus módulos vc chama outros módulos através de "use", ele vai
> ser
> > carregado logo no inicio do carregamento do programa, como se estivesse
> > dentro do bloco BEGIN... agora, se vc usar um "require" os modulos serão
> > carregados sob demanda...
> >
> > Fiz um pequeno teste cara comprovar isso:
> >
> > fernando em ubuntu:~$ for i in teste.pm teste2.pm teste3.pm teste4.pm; do
> echo
> > "#$i"; cat $i; echo; done
> > #teste.pm
> > package teste;
> > print "teste$/";
> > use teste2;
> >
> > #teste2.pm
> > package teste2;
> > print "teste2$/";
> > use teste3;
> >
> > #teste3.pm
> > package teste3;
> > print "teste3$/";
> > use teste4;
> >
> > #teste4.pm
> > package teste4;
> > print "teste4$/";
> >
> > fernando em ubuntu:~$ perl -Mteste -e ''
> > teste4
> > teste3
> >  teste2
> > teste
> > fernando em ubuntu:~$ perl -i -pe 's/use/require/g;'
> > teste*.pmfernando em ubuntu:~$ for i in teste.pm teste2.pm teste3.pm
> teste4.pm;
> > do echo "#$i"; cat $i; echo; done
> > #teste.pm
> > package teste;
> > print "teste$/";
> > require teste2;
> >
> > #teste2.pm
> > package teste2;
> > print "teste2$/";
> > require teste3;
> >
> > #teste3.pm
> > package teste3;
> > print "teste3$/";
> > require teste4;
> >
> > #teste4.pm
> > package teste4;
> > print "teste4$/";
> >
> > fernando em ubuntu:~$ perl -Mteste -e ''
> > teste
> > teste2
> > teste3
> > teste4
> > fernando em ubuntu:~$
> >
> > isso prova q qdo se usa o "use", ele carrega o módulo mesmo antes do
> > print... por isso a ordem é "invertida" agora, qdo uso o require, ele
> faz
> > "na" ordem, primeiro o print e depois o carregamento do modulo...
> >
> > espero q tenha podido sanar algumas dúvidas...
> >
> > Em 18/11/07, Blabos de Blebe < blabos em gmail.com> escreveu:
> > > Na mosca, Fernando.
> > > Era exatamente nisso que eu queria chegar. Perdoem-me pela falta de
> > clareza.
> > >
> > > Num projeto gigante, mas bem feito em perl, separado em módulos, etc
> > > cada módulo seria compilado de acordo com a demanda, mesmo depois de
> subir
> > > o script principal, ou seria compilado tudo de uma vez, pra depois
> > > subir o sistema?
> > >
> > >
> > > Obrigado
> > >
> > >
> > > On Nov 17, 2007 11:29 AM, Fernando Oliveira <fernandocorrea em gmail.com>
> > wrote:
> > > > Eu acho q a pergunta dele foi a seguinte:
> > > >
> > > > se existem programas q levam dias p/ compilar, um equivalente a um
> > desses
> > > > programas em uma linguagem q compila o código em tempo real, levaria
> > dias p/
> > > > rodar? e teria q se esperar dias toda vez q se quisesse rodar esse
> > programa?
> > > >
> > > > foi isso q vc quis perguntar locão (wesley)?
> > > >
> > > > Em 17/11/07, Frederico Recsky < frederico em gmail.com> escreveu:
> > > >
> > > > > Olá
> > > > >
> > > > > On Nov 15, 2007 3:32 PM, Blabos de Blebe < blabos em gmail.com>
> wrote:
> > > > > > Boa tarde a todos,
> > > > > >
> > > > > > Ultimamente andam me rodeando assuntos como interoperabilidade,
> > > > > > máquina virtual, compilação, etc.
> > > > > >
> > > > > > Cenário:
> > > > > >
> > > > > > Tem uma pessoal aí que diz que pra ser portável tem que ter
> máquina
> > > > > > virtual, "porque vc compila pra um e
> > > > > > roda em todos". Outros dizem que para ser portável, basta ser
> > > > > > compilável em qualquer plataforma. Os
> > > > > > adeptos das máquinas virtuais respondem que grandes sistemas
> demoram
> > > > > > muito pra compilar, gerando
> > > > > > custos extras, etc.
> > > > >
> > > > > "Maquina virtual, compila em um e roda em todas" é um puta engano.
> No
> > > > > caso do java você roda em todos que a sun quer com ressalvas em
> > > > > algumas. Alias, não existe almoço gratis.
> > > > >
> > > > > > A pergunta é: Dado um sistema que demore dias pra compilar numa
> > > > > > linguagem qualquer. Dado que
> > > > > > esse sistema tenha sido re-escrito em "Elegante Perl". Como Perl
> se
> > > > > > comporta ao levantar um
> > > > > > sistema gigante? Ou seja, quais as dificuldades que Perl poderia
> > > > > > enfrentar nesse cenário ou em
> > > > > > algum semelhante?
> > > > >
> > > > > Demorar dias para compilar não quer dizer nada. Quando voce muda
> > > > > somente um pedaço do codigo fonte, voce não compila tudo
> novamente,
> > > > > pois já inventaram o linker e etc.. Normalmente na entrega final
> se
> > > > > faz um grande build. Porém existem n formas de se distribuir
> grandes
> > > > > programas compilados e suas atualizações sem recompilar tudo.
> Patches
> > > > > de binarios por exemplo.
> > > > >
> > > > > Olha, dos sistemas de dias para compilar, eu vi servidores e
> sistemas
> > > > > operacionais e suites office/graficas.  O corel draw deve levar
> dias
> > > > > para compilar por exemplo. Porém normalmente você trabalha com
> pedaços
> > > > > de um sistema. Você não vai fazer um oracle nem compilar seu
> proprio
> > > > > oracle para entregar para o cliente, você faz um aplicativo
> > > > > (relativamente pequeno) que usa o oracle existente e entrega tudo.
> > > > >
> > > > > >
> > > > > > Eu tenho lá minhas especulações sobre o que aconteceria, mas já
> que
> > > > > > não tenho como testar,
> > > > > > gostaria das opiniões dos grandes mestres.
> > > > >
> > > > > Just for fun eu gerei um script perl de somente 20 megas, e ele ta
> > > > > "abrindo" no meu micro faz uns 40 minutos:
> > > > >
> > > > > ps aux |grep gigante.pl
> > > > > ibm       8840 92.2  7.2 153616 150460 pts/1   R+   22:21  42:58
> perl
> > > > gigante.pl
> > > > >
> > > > > Obviamente um script monolitico de 20mb não é "Elegante Perl" :)
> ;)
> > > > >
> > > > > --
> > > > > ____________________________
> > > > > Frederico Recsky
> > > > > Linux User: #253572
> > > > > http://www.fred.eti.br
> > > > > http://www.perl.org.br
> > > > > _______________________________________________
> > > > > SaoPaulo-pm mailing list
> > > > > SaoPaulo-pm em pm.org
> > > > > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > []'s Fernando
> > > > _______________________________________________
> > > > Rio-pm mailing list
> > > > Rio-pm em pm.org
> > > > http://mail.pm.org/mailman/listinfo/rio-pm
> > > >
> > > _______________________________________________
> > > SaoPaulo-pm mailing list
> > > SaoPaulo-pm em pm.org
> > > http://mail.pm.org/mailman/listinfo/saopaulo-pm
> > >
> >
> >
> >
> > --
> > []'s Fernando
> >
> > --
> > []'s Fernando
> > _______________________________________________
> > Rio-pm mailing list
> > Rio-pm em pm.org
> > http://mail.pm.org/mailman/listinfo/rio-pm
> >
> _______________________________________________
> Rio-pm mailing list
> Rio-pm em pm.org
> http://mail.pm.org/mailman/listinfo/rio-pm
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: http://mail.pm.org/pipermail/rio-pm/attachments/20071119/faa67f0a/attachment-0001.html 


Mais detalhes sobre a lista de discussão Rio-pm