20. lokakuu 2009, 15:45

Ohjelmointikielistä

Olen tätä asiaani pohtinut jo pidempäänkin, mutta tänään se sitten konkretisoitui keskusteluksi irkissä ja kirjoitan ajatuksiani auki tänne. Aiheena on siis hyvät tulkattavat kielet ja oikeastaan niiden puute.

Ensinnäkin ohjelmoijien suosikkivuodatukseen: PHP on yksi syntipesä. Se näyttää liian houkuttelevalta, helpolta. Ja sitten se osoittautuukin hankalaksi, ja vaatii kikkailua siellä, missä muut kielet ovat menneet hyvin suunniteltujen rakenteiden ansiosta ohitse. Toki, houkuttelevuus on mukava asia. PHP:ssä viehättää sen runsaus aika paljon, vaikka hyvin tiedänkin ne haittapuolet siinä: on vain jotenkin rentoa kirjoittaa lyhyt skripti käyttäen kaikkia saatavilla olevia herkkuja apunaan. GNU readline -tuki löytyy suoraan, jos komentorivi-interfacelle tekee ja merkkijonofunktioista löytyy joka sorttia. Tietokantoihin on helppo ottaa yhteys ja käsitellä niitä mielestäni. Mutta sitten hommat kaatuvatkin, kun jokin asia joudutaan tekemään esimerkiksi yhteensopivuuden nimissä uudestaan hieman toisella tavalla ja toisella nimellä. Nimiavaruuksia ei ole ja oliot ovat vielä aika raakileita mielestäni. Niiden kanssa olen kokeillut viritellä tässä viime viikonloppuna.

Kun jossain kunnollisessa kielessä (C++, Java) tehdään luokkia ja aliluokkia, niiden välillä on oltava polymorfismiä hyvin, koska muuten hommassa ei ole oikein mieltä. Voidaan kirjoittaa sitten näin:

Yliluokka foo = new Aliluokka();

Ja niin edespäin. Sanovat tietysti, että polymorfismin hyödyntäminen osoittaa huonoa suunnittelua, mutta tietysti on tilanteita, joissa sitä tarvitaan. C++:n tapauksessa voidaan kirjoittaa vaikka minkälaisille tapauksille kopiomuodostimia ja kaikenlaista hienoa kikkailua. Ei vain PHP:ssä. Syynä on ensisijaisesti heikko tyypitys, joka tuottaa lähes poikkeuksetta vain harmaita hiuksia. Vahva tyypitys ei tuota niin minkäänlaisia ongelmia, kunhan siihen on tottunut. Sitä vastoin, tulokset ovat kaikki vahvan tyypityksen puolella.

Meillä on liian vähän hyviä, vahvasti tyypitettyjä kieliä. Tai sitten ei ole: onhan meillä esimerkiksi python, joka on wikipedian mukaan vahvasti ja dynaamisesti tyypitetty. Ainakin puoliksi hyvin tehty. Mutta pythonissa on se ongelma, että se yrittää tehdä asiat liian toisella tavalla. Minulla olisi vain pari toivetta unelmien tulkattavaksi kieleksi:

  1. C:n tapainen syntaksi
  2. Ei mitään dollarimerkkejä muuttujanimissä. Eikö kukaan ole huomannut, että ne ovat rumia kuin synnit yhteensä?
  3. Vahva tyypitys
  4. Hyvät (lue: toimivat) olio-ominaisuudet

Unelmatilanne olisi minusta, jos joku saisi viriteltyä C++:sta ajonaikaisen version vaikka vain pienien kompromissien avulla. Tai Javastakin voisi paremman puutteessa kelvata aidosti tulkattava versio. Siitähän voisi sitten nopeasti tehdä sen käännettävän mallin, jos hyvin kävisi.

PHP:hen löytyi yksi ruma kikka: serialisoidaan olio merkkijonoksi, tehdään pieni str_replace ja palautetaan merkkijono (jossa on nyt uusi luokkanimi) olioksi. Se saa nyt kelvata minun viritelmääni. PHP on kiva kieli nopeaan virittelyyn ja ehkäpä juuri tilapäisiin ohjelmapalasiin. Niihin olen toki paljon käytellyt ihan tavallista bashia, mutta bashissa se vasta ruma syntaksi onkin, eikä olioista tietoakaan. Olen nyt tainnut päättää tutustua Pythonin mukavaan maailmaan kunnolla. Ja toinen esitelty valinta voisi olla Ruby. Molemmat kivoja, mutta se C-kielisyys puuttuu. Lua on varasijalla ja siinä on sentään se kunnossa. On tämä vaikeata. PHP on oikeastaan myös siksi hieno, että sille löytyy Sunin Java-toteutusten tapaan hyvät, kattavat ja selkeät dokumentaatiot aivan kädenulottuvilta. Ei oikein tohdi hypätä johonkin hyvin harvinaiseen kieleen käsiksi, koska siellä ei ole välttämättä riittävästi standardikirjastoja, hyvää dokumentaatiota tai muuten vain yhteisön tukea.

Tulipas epäselvä vuodatus.

Tageja:

---
---

---

Aiheen vierestä