Tuli tutun kanssa kinaa siitä, kumpi on tietyssä kumpaakin kiinnostavassa käytössä nopeampi, hänen suosikkinsa Perl vai minun suosikkini Python. Päätettiin kokeilla.
Rakensin 396 Mt tekstitiedoston. Sen jokaisella rivillä on satunnaisesti 1–80 merkkiä pelkkiä a-kirjaimia. Sitten tehtiin sekä Perlillä että Pythonilla skripti, joka muuttaa säännöllisiä lausekkeita käyttäen jokaisen a-kirjaimen jonoksi ”ööön”. Data luetaan vakiosyötevirrasta. Sitä ei kirjoiteta minnekään, koska tarkoitus oli mitoittaa vain sitä nopeutta, millä dataa luetaan ja muutetaan, ei esim. konsolin vieritysnopeutta.
Kolmiytimisellä pöytäkoneellani konsolitilassa (ei graafisia kilkkeitä takana käynnissä) tulokset olivat time-komennolla mitattuna:
Perl (versio 5.14.2): 2 min 45,29 s
Python (versio 3.2.3): 1 min 12,95 s
Pythonistina uskon kyllä vakaasti, että tuloksen pitikin mennä näin päin, mutta kaveri ei anna periksi enkä minäkään osannut kuvitella ihan noin suurta eroa – onhan Perlkin tunnettu nopeudestaan.
Osaisiko joku sanoa, mikä näissä koodeissa on vialla, ja millainen koe olisi rehellisempi?
Perl-koodi:
#!/usr/bin/perl
while (<>) {
s/a/ööön/g;
}
Python-koodi:
#!/usr/bin/env python
from sys import stdin
import re
m = re.compile('a')
for line in stdin:
m.sub('ööön', line)