venerdì 28 gennaio 2011

Bufala sugli interpreti (2)

Questa e' la seconda puntata sugli interpreti. Qui la prima.
Ci siamo lasciati con un po' di teoria, quindi ora passiamo ad un piccolo test.
Ho scelto di scrivere uno stesso script con diversi linguaggi di programmazione. Ho scelto C, C++, Perl, PHP, Python.

script C (hello.c)

#include <stdio.h>
main() {
  int j,i;
  j=10000000;
  while (j>0) {
    printf ("Hello world! $j\n");
    j = j-1;
  }
}
compilato tramite gcc hello.c -o hello_c.o

script C++ (hello.cpp)

#include <iostream>
int main() {
  int j,i;
  j=10000000;
  while (j>0) {
    std::cout << "Hello world! " << j << std::endl;
    j = j-1;
  }
  return 0;
}
compilato tramite g++ hello.cpp -o hello_cpp.o

script Perl (hello.pl)

$j=10_000_000;
while ($j>0) {
    print "Hello world! $j\n";
    $j -= 1;
}

script PHP (hello.php)

<?php
$j=10000000;
while ($j>0) {
    print "Hello world! $j\n";
    $j -= 1;
}
?>

script Python (hello.py - no bytecode)
j=10000000
while j>0:
    print 'Hello world! ', j;
    j = j-1;
script Python (hello.pyc - bytecode)
import py_compile
py_compile.compile("hello.py")
Produce il byte code dello script precedente.

Tempi di esecuzione
Di seguito sono riassunti i tempi di esecuzione:
C -> time ./hello_c.o > /dev/null
real 0m0.818s
C++ -> time ./hello_cpp.o > /dev/null
real 0m5.885s
Perl -> time perl hello.pl > /dev/null
real 0m4.311s
PHP -> time php hello.php > /dev/null
real 0m10.390s
Python (no bc) -> time python hello.py > /dev/null
real 0m13.282s
Python (bc) -> time python hello.pyc > /dev/null
real 0m13.533s
Note:
Ovviamente questo e' soltanto un benchmark grossolano. Consiglio di non ritenerlo esaustivo, solo indicativo.

Nessun commento:

Posta un commento