[SP-pm] Compilação

Luis Motta Campos luismottacampos em yahoo.co.uk
Sexta Novembro 16 04:46:45 PST 2007


Blabos de Blebe wrote:
> Boa tarde a todos,

Boas.

> Ultimamente andam me rodeando assuntos como interoperabilidade, 
> máquina virtual, compilação, etc.

Diz para o pessoal de Java que voce tem mais o que fazer. Eles
eventualmente se cansam e vao brincar noutro canto. ;)

> Eu ainda to lendo 'O Livro' de perl e estou no começo, então 
> possivelmente minha dúvida será respondida no decorrer das páginas. 
> De qualquer forma eu sei que é uma pergunta meio idiota, mas lá vai:

Existem dois tipos de perguntas idiotas:

1. A que nunca foi perguntada;
2. A que foi perguntada muitas vezes pela mesma pessoa, e parece que ela
nunca aprende a resposta.

Contanto que voce faca perguntas "idiotas" do tipo (1), eu nao vejo
problemas em responder ;)

> 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".

Claramente, o pessoal do Java estah te enchendo o saco. Diz para eles
que esta coisa de "compilar para um e rodar em todos" nao existe. Basta
olhar a lista de plataformas suportadas pelo java e pelo perl (que voce
pode perguntar para o google onde estao).

> 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.

"Custos Extras" por causa do tempo de compilacao de um sistema eh
realmente uma coisa absurda.

Acho que vale aa pena relembrar por que a gente comecou a implementar
compiladores: eles sao melhores e mais rapidos do que a gente para
escrever codigo de maquina, e a gente pode fazer com que uma instrucao
simples de escrever (para um humano) gere uma quantidade potencialmente
muito grande de instrucoes em codigo de maquina.

Usamos compiladores para economizar trabalho.

Se o teu programa exige 20 horas de compilacao, pensa no trabalho que
voce teria para escrever codigo de maquina equivalente, de outra forma.

Nao faz sentido falar em "muito tempo compilando" mesmo o meu sistema
operacional (que eh a coisa maior e mais feia que eu conheco em termos
de software) nao leva "muito tempo para compilar" o bastante para deixar
um gestor preocupado.

Voce gasta mais tempo tomando cha do que compilando programas, na media,
nao importa que linguagem voce usa.

> Perl é portável sem essa papagaiada toda.

Errado. Perl eh moderadamente portavel, e usa uma boa parte desta
papagaiada sem voce ver. A gente compila codigo perl em bytecodes (nao,
nao aquelas porcarias de java, bytecode mesmo!) antes da execucao. E
usamos uma maquina virtual leve, que eh capaz de interpretar os
bytecodes e traduzir cada instrucao para o codigo de maquina
correspondente, em tempo de execucao.

> 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?

Desculpe, mas eu nao consigo imaginar um sistema que leve "dias" para
compilar. Mesmo um sistema que leve uns poucos minutos jah eh muita
coisa. A nao ser, claro, que o teu hardware seja de papelao. Neste caso,
compre mais silicio e nao chateia ;)

Fora isso, nao interessa quanto tempo leva para compilar o programa, mas
sim qual eh a experiencia do usuario quando o sistema estiver rodando.
Se ele achar que o sistema "eh rapido", e as tarefas saem dentro de um
tempo considerado aceitavel pelo usuario (isso eh subjetivo!), entao teu
sistema eh bom.

> 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.

Como voce pode ver, a resposta para a tua pergunta nao tem nada a ver
com perl, mas sim com a experiencia subjetiva do teu usuario. Se ele
achar que o sistema estah rapido, bom. Se nao, procure otimizar. A
compilacao, assim como o tempo de secagem do concreto(*), eh irrelevante
para o efeito final.

Putamplexos!
-- 
Luis Motta Campos (a.k.a. Monsieur Champs) is a software engineer,
Perl fanatic evangelist, and amateur {cook, photographer}


(*) Concreto leva 28 dias para secar completamente, em media. Mas a
gente espera, normalmente, por que o predio pode ser usado durante cerca
de 20-30 anos depois disso. O que sao 28 dias comparados com 30 anos?


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