tiistai 27. tammikuuta 2009

Demo 2 - kommentit

Toisen demokerran tehtävät löytyvät osoitteesta http://users.jyu.fi/~antkaij/opetus/okp/2009/demot/2.html . Tämänkertaiset tehtävät eivät olleet yhtä työläitä kuin ensimmäisen.

Ensimmäinen tehtävä oli lähinnä käsitteiden kertaamista eikä sinänsä tarjonnut yllätyksiä.

Toisen tehtävän Duff's devicesta olen kuullut joskus aiemminkin. Kuitenkin on aika selvää, että moisia häkkyröitä ei toivottavasti ole enää tänä päivänä tarpeen käyttää (ainakaan sovellustason ohjelmoijan :) ).

Kolmanteen tehtävään ongin selville mitä muistinhallintatekniikoita Lua, Python ja Ruby käyttävät. Python luottaa viittausten laskentaan (reference counting) ja erityiseen muistinsiivoajaan, joka huolehtii syklisistä tapauksista, joita viittausten määrää laskemalla ei havaita. Ruby käyttää merkkaa ja lakaise (mark and sweep) metodia kenties hieman yllättäen. Lua käytti kyseistä tapaa aiemmin mutta on sittemmin siirtynyt käyttämään inkrementaalista järjestelmää. Kyseinen järjestelmä on esimerkiksi latenssin (esim. pelikäyttö) kannalta parempi kuin edeltäjänsä.

Neljättä tehtävää en merkinnyt tehdyksi, mutta luin Dijkstran artikkelin ja vilkaisin Knuthin pakettia. Sinänsä "Go to considered harmful" oli hieman laimea esitys, mutta tämä johtui sen saamasta hypetyksestä. Sinänsä artikkeli sisälsi kuitenkin ihan asiallista tekstiä. Kokonaisuutena tuntui, että molemmat artikkelit olivat ajalta jolloin ohjelmoijat, tai ainakin osa heistä, oli vielä henkisesti kiinni "goto" maailmassa ja muutos parempaan oli paraikaa tapahtumassa.

Mielestäni goto sinänsä on aivan liian matalan tason työkalu korkean tason kieliin. Voikin olla parempi, että sen käyttö onkin sallittua vain sopivan matalan tason kielissä, joissa sen käyttö on hyvin perusteltua esimerkiksi optimointisyin. Goto on yksinkertaisesti liian voimakas sellaisenaan. En väitä etteikö gotoa voisi käyttää "oikein", mutta sen käyttäminen väärin saattaa olla houkuttelevaa. Tämä lienee eräs syy siihen, miksi esim. C++ -kieltä pidetään hankalana. Kieli sinänsä on erittäin pätevä työkalu, oikeissa käsissä. Sama pätee gotoon.

Tällä kertaa en tehnyt bonustehtävää. Kenties ensi kerralla. :)

1 kommentti:

  1. Gotosta varmaan voisi vielä mainita sen verran, että sitä voi pitää kielentoteuttajan primitiivinä (tuollahan saa erilaiset luupit aikaan helposti).

    Tiettyjä tarkoituksia varten voisi olla mielenkiintoista kehittää epädeterministinen goto (vrt. vahtikomennot). Tällöin ohjelma voisi välillä testata eri algoritmeja (sama ongelma) ja tehdä jonkinmoista benchmarkingia ja sen perusteella paikallista optimointia. Toisaalta, jos tätä haluaisi tehdä ilman epädeterminististä gotoakin pärjäisi.

    VastaaPoista