Moi,
Olen aivan alkutaipaleella ohjelmoinnissa, edelliset kokemukset lukiosta Turbo Pascalilla 90-luvulla. Nyt aloin aikani kuluksi testata Pythonia Mac-ympäristössä. Tätä on varmaan moni jo ihmetellyt, mutta itselleni tuli yllättäen vastaan: Miksi Python ajaa simppelitkin ohjelmat niin hitaasti? Nykykoneissa on potkua vaikka mihin, mistä syystä tää tahmeus ihmetyttää.
Ainakin osittain se on hidas, koska kyseessä on scripti-kieli eikä käännettävä.
Ecaroh kirjoitti:
Miksi Python ajaa simppelitkin ohjelmat niin hitaasti?
Kokeilin ajaa simppelin Python Hello word ohjelman
print("Hello, World!")
Siinä kesti 11 millisekuntia:
# time python test.py Hello, World! real 0m0.011s
Itse en ole myöskään yleisesti huomannut että Python ohjelmat olisi jotenkin ihan poikkeuksellisen hitaita. Tietenkin se on tyypillisesti hitaampi kuin vastaava käännetty ohjelma, kuten peran jo kommentoikin.
Vastaavasti jos kääntää gcc:llä vastaavan ohjelman niin kääntämiseen menee jopa enemmän aikaa:
# time gcc test.c real 0m0.038s
Mutta sen jälkeen käännetyn ohjelman ajamiseen menee 1 ms.
En siis ole varsinaisesti varma että ymmärsinkö kysymyksesi oikein. Jos tarkoitat esim, että simppelin Hello World tyylisen ohjelman ajaminen kestää vaikka 30 sekuntia, niin sanoisin että ympäristössäsi on jotain vialla.
Vauhtia Pythoniin voi saada myös käyttämällä vaikkapa PyPyä, joka on keskimäärin 4.4 kertaa nopeampi tulkki kuin python.org:sta saatavilla oleva CPython (näin he itse väittävät). PyPyn tukema Python-versio ei kuitenkaan ole aivan viimeisin.
Melko hyvä trolli taas. AP tulee sanomaan, että kun kieli on niin hidas, ja sen jälkeen npc:t toistelevat kilpaa, että eihän nyt niin hidas ole, kun kestää vain millisekunteja polkaista komentotulkki käyntiin. (Mikä lie itse helloworldin osuus siinäkin suoritusajassa...)
AP voisi tulla takaisin kertomaan aluksi, että millaisesta sovelluksesta oli kyse, kun se on mukamas niin hidas. Luultavasti vain koodasit sen väärin, ei siinä sen ihmeempää.
Tavalliset sovellukset eivät edes ole niin monimutkaisia, että eri kielten välisen suorituseron voisi mitenkään huomata ihmisenä. Synteettisten suorituskykytestien tuijottaminen taasen on tyhmää.
Kuten kirjoitin, olen aivan uuden äärellä tässä ja ihmettelen varmaan jotain sellaista, mikä ei suurelle osaa täällä ole ihmetyksen aihe...
Omat Python-ohjelmani ovat olleet aivan simppeleitä muutaman rivin kokeiluja (ks. esim.) ja "hitaudella" tarkoitan sitä, että silmilläni näen tulosteiden rullaavan alas rivi kerrallaan, kun olisin olettanut tämän olevan (ihmissilmin havaittuna) yhtäaikainen. Ja tosiaan kyseessä on Mac / IDLE -ympäristö.
x = int(input("anna luku x : ")) y = int(input("anna toinen luku y : ")) print ("x + y =", x+y) print ("x * y =", x*y) print ("x / y =", x/y) print ("x potenssiin y =", x**y)
Mikään kohta ohjelmassasi ei liity konkreettisesti tekstin piirtämiseen ja rullaamiseen, vaan siitä on vastuussa se ohjelma, jolle ruutu kuuluu – tässä tapauksessa siis ilmeisesti IDLE-kehitysympäristö. Näkemäsi hitaus johtuu siis IDLE-kehitysympäristöstä eikä Pythonista.
Voit hyvin käynnistää ohjelman myös suoraan komentorivillä (Terminal vai mikä onkaan Macissa), jolloin tekstin näyttämisestä vastaa se komentorivi-ikkuna ja saat ehkä eri käsityksen nopeudesta.
Tai toisesta näkökulmasta: Voisit laittaa ohjelmaasi vaikka kuinka paljon monimutkaisempia laskuja, ja ohjelman kulku ruudulla pysyisi silti yhtä nopeana. Tästä myös näkisit, että näkyvä hitaus johtuu jostain muusta kuin itse Python-ohjelmasta.
Kiitos vastauksesta!
Tein ehdottamiasi vertailuja ja todellakin tämä IDLE-ympäristö on syypää tuohon hidasteluun... Esim. Python Launcherilla ajettuna sama tulee niin kuin sen oletin tulevan eli ilman havaittavaa viivettä. Mikäköhän sen IDLEn tekee niin hitaaksi...?
Ecaroh kirjoitti:
Mikäköhän sen IDLEn tekee niin hitaaksi...?
Ilmeisesti IDLEssä on huonosti toteutettu tekstin tulostus. Toisaalta tavallaan alkeita opetellessa voi olla jopa hyvä, että ohjelmoija ehtii nähdä, miten ohjelma etenee...
Aihe on jo aika vanha, joten et voi enää vastata siihen.