[Cascavel-pm] Perl "roda mais lenta" que outras linguagens?

Eden Cardim edencardim em gmail.com
Terça Março 9 20:18:46 PST 2010


>>>>> "Lucas" == Lucas Allan <lucas.allan em gmail.com> writes:

    Lucas> Bom, realmente linguagens compiladas (como C, C++ e etc)
    Lucas> rodam mais rapido.

Isso não é verdade. Pra começar, toda e qualquer linguagem, exceto a
linguagem específica da máquina onde o código roda é, necessariamente,
compilada. O que muda entre uma linguagem e outra é quando e como esse
processo acontece. No caso de Perl, tem várias formas de acontecer, você
pode pré-compilar algumas coisas, pode fazer JIT com outras e pode
utilizar o comportamento padrão que é compilar o bytecode a cada
execução. Perl roda sobre uma máquina virtual que consome uma
especificação de bytecode própria, essa é a principal diferença pra C, e
C++, que compilam diretamente pra linguagem de máquina. É a existência
da máquina virtual que faz a execução ser mais lenta em alguns
casos. Pros casos para a qual a máquina virtual foi otimizada, é pouco
provável que um desenvolvedor num projeto real, com prazos,
especificações inconsistentes, etc. consiga implementar algo em C que seja
significativamente mais rápido do que o que está na máquina virtual,
como por exemplo, as funções map e grep, além das expressões regulares.
Outra coisas tornam o tempo do build irrelevante, como por exemplo,
processos de vida longa. Se o processo executa uma vez com anos de
uptime, o tempo de compilação inicial é amortizado pelo tempo de vida do
processo e se você medir as iterações do processo depois de já iniciado,
vai ver que a diferença para outras linguagens é muito mais sutil do que
o que os benchmarks de esquina indicam.

    Lucas> Não adianta lhe enviar link de app web
    Lucas> feita perl pra voce comparar a velocidade pq isso é
    Lucas> imperceptivel, somente através de benchmark é possível
    Lucas> verificar a diferença ( que aliás, perl se mostrou mais
    Lucas> rapido que outras linguagens de script como, php, ruby,
    Lucas> python e etc...)

    Lucas> http://xodian.net/serendipity/index.php?/archives/
    Lucas> 27-Benchmark-PHP-vs.-Python-vs.-Perl-vs.-Ruby.html

Esse Benchmark não serve como referência porque o processo foi muito
simples e as diferenças sutis de como fazer o build e execução de cada
linguagem não foi considerado. Inclusive o autor menciona isso no
segundo parágrafo:
"Now, one cannot draw very many conclusions from my benchmarks here,
because the programs used don't really do anything useful, nor do they
simulate "real-world" conditions, or practical use-cases".

Já vi aberrações de todo tipo com benchmarks, o caso mais hilário foi o
de um cara (perdão por não ter um link aqui) que usou uma constante em C
(que compila diretamente para representação binária da constante em
questão) e no programa "equivalente" em perl ele usou uma variável
léxica. Obviamente, a variável léxica vai ser muito mais lenta, por ser
realocada e re-atribuída a cada iteração. Se ele soubesse a otimização
em perl, no caso uma subrotina imutável, que equivalesse corretamente à
constante em C, o teste teria sido muito menos discrepante.
Provavelmente ele nem sabia porque se declaram constantes em C e só
adotou a prática por convenção. É esse tipo de cara que coloca
informação na internet todo dia, precisa de muito cuidado pra saber
criticar o conteúdo que você consome e indica.

meus 0.02 BRL

-- 
   Eden Cardim       Need help with your Catalyst or DBIx::Class project?
  Code Monkey                    http://www.shadowcat.co.uk/catalyst/
 Shadowcat Systems Ltd.  Want a managed development or deployment platform?
http://edenc.vox.com/            http://www.shadowcat.co.uk/servers/



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