Pythonin käsittämätön tehokkuus komentorivisovelluksissa

Clojuren olen tuominnut Pythonia paremmaksi kieleksi, ja siitä ylöskirjoittamani mietteet näyttävät edelleen pitävän paikkansa. Miksi kuitenkin noita Python-ohjelmia tulee kirjoiteltua siitä huolimatta?!

Ohjelmat, joita kirjoitan omaksi ilokseni, ovat yleensä komentorivipohjaisia. Komentorivillä sovelluksen nopea käynnistyminen kuuluu käyttömukavuuteen, erityisesti silloin kun operaatio on muutenkin lyhytkestoinen. Clojure-sovelluksen käynnistyminen vie edelleen yli sekunnin, vaikka luvut taitaakin saada kymmenesosaan siitä huolellisella valmistelulla. Python-skripti käynnistyy riittävän nopeasti kaikkeen mielekkääseen operointiin. Ja tietojenkäsittely, mitä komentorivilläni tapahtuu, on yleensä luonteeltaan sellaista, että Pythonin hitaus ei näy missään: joko kovaa laskentaa ei ole, tai kutsun muita ohjelmia aliprosesseina.

Tietyllä tavalla Pythonissa on näppärä pyöritellä tarvittavia algoritmeja; muistuttaahan kielen syntaksi jo itsessään klassisten 70-luvun oppikirjojen pseudokoodinotaatiota. Clojure taipuu helposti samanlaiseen muotoon, mutta ennestään mielessä pyörivän algoritmin kääntäminen uudelle ajattelutavalle voi kuitenkin olla merkittävä mentaalinen rasite.

Python on muutenkin selkeä tapa kirjoittaa imperatiivista eräajosovellusta, ja pienten skriptien tapauksessa kielen ja ympäristön puutteetkin jäävät varjoon. Ehkä kuitenkin Pythonin ongelmat alitajuntaisesti estävät minua laajentamasta sovellusta alkuperäisen ominaisuusskoopin ulkopuolelle, koska se alkaisi herkästi tarkoittaa sitä, että nopeat hakkaukset pitäisi kirjoittaa paremmin. Clojuressa onkin pikemmin se ongelma, että kieli vääntää kirjoittajansa kättä aina valitsemaan Oikeaoppisen Tavan tehdä jokainen pienikin asia, joka 50-rivisessä pikavirityksessä voi vähän lannistaa. Tämä kuitenkin olisi eduksi, kun softaan tulee uusia ideoita toteutettavaksi.

Pitäisikö siis hyväksyä tilanne niin päin, että pikaiset skriptit tulee jatkossakin kirjoitettua Pythonilla ja sitten harkita uudelleenkirjoitusta Clojurelle "kakkosversion" häämötellessä. Tämä ei kuulosta realistiselta idealta omaan korvaani. Voiko päätöksenteossa olla mukana sitäkin tekijää, että Clojurella kirjoittamani komentorivisoftat ovat vähälukuisia ja siten sellainen alkukankeus vaivaisi.

Minun pitäisi pikemminkin aloittaa porttamaan pienimpiä python-skriptejäni Clojurelle ja samalla katsoa, mitä sieltä oppisi sitä kautta. Ja jos minulla olisi joitain "päivittäiskäytössä" pyöriviä Clojure-ohjelmia työkalulaukussani, käynnistymisnopeudellekin tulisi tehtyä ajan saatossa jotain. Näin tulisi myös hiottua peruskirjastoja, joilla argumentteja parsitaan, kuinka tiedostoja käsitellään, ja sitä rataa.

ClojureScript (joka kääntyy myös NodeJS-yhteensopivaksi JavaScriptiksi) olisi yksi vaihtoehto. En kyllä edelleenkään nauti näistä liittyvistä työkaluista, vaikka tätä nykyä onkin jo helppoa saada projekti tulille ja suoritettavaksi. Ihmeellisiä eroavaisuuksia löytyy valitettavan paljon.


Kommentit, kehitysehdotukset ja keskustelunavaukset ovat tervetulleita sähköpostitse.