Kääntäjistä ja alustoista

July 29th, 2008

Keväästä lähtien olen jälleen palaillut ohjelmoinnin äärelle ja erityisesti siirtänyt ohjelmia uusille alustoille. Innostus lähti GP2X:n hankinnasta ja sivutuotteena syntyi sitten porttauksia myös Dreamcastille. Kesän aluksi ostin eBaystä — vuosien jahkailun jälkeen — myös GP32:n, joka oli jo vanha tuttu, kaverilta aikanaan lainassa. Aika hirveä laite oikeastaan, mutta aikanaan avoimuutensa vuoksi vallankumouksellinen ja GP2X:n ja sitä kautta myös Pandoran henkinen esi-isä. Lisäväriä laitekirjoon toivat vielä laina-N800 (Maemo) ja viime viikolla hankkimani Sony PSP.

Takavuosien konsolit ja tietokoneet olivat sikäli hitaita ja rajoittuneita laitteita, että laitteistoa täytyi ohjelmoida suoraan konekielellä. Tätä nykyä puhelimissakin on jo 32-bittiset suorittimet, useampi sata megahertsiä ja grafiikkakiihdytys. Pelkän tehojen siunailun sijasta on kuitenkin hyödyllisempää miettiä, mihin tämä on johtanut. Kielet ovat vaihtuneet assemblerista C/C++:aan ja vielä korkeammallekin tasolle, kuten Javaan ja Pythoniin. Suorittimien monimutkaistumisen ja kääntäjien tehostumisen myötä käsin optimointi on vaikeutunut ja myös muuttunut suurelta osin tarpeettomaksi. Abstraktion määrä on kasvanut, joten raudan erikoispiirteillä on enää verrattain vähän merkitystä: ajurit ja rajapinnat piilottavat alleen tarpeettomat yksityiskohdat. Uudelleenkäytettävyys on parantunut, kun hyvin kirjoitettua koodia voi sinältään käyttää hyvinkin erilaisilla alustoilla.

Itse olen kiinnostunut reaaliaikaisesta grafiikasta, jossa C:n kaltaisille kielille on vielä tarvetta tehokkuuden nimissä. Itse C-standardi ei sisällä mitään grafiikkaan liittyvää, joten ruudunpiirto ym. on toteutettava kirjastoja käyttämällä. Tällä hetkellä universaalein näistä on SDL, josta on versioita kymmenille eri alustoille. Kokemus on kuitenkin osoittanut, että kun mennään Linux-Mac-Windows-valtavirran ulkopuolelle, toteutukset voivat olla hyvinkin rajoittuneita ja suorastaan virheellisiä. Tyypillisiä rajoituksia ovat vaikkapa kiinteä ruututila/värisyvyys, hitaus ja huonosti toimivat ajastimet. Lähes jokaisella yllämainituista laitteista on ollut käytännössä pakko tehdä omia viritelmiä suoraan alustan omia rajapintoja tai rautaa käyttämällä.

Kääntäjien osalta ilmainen GCC (GNU Compiler Collection) on hiljalleen vallannut yhä suuremman jalansijan. Aiemmin oli vielä tyypillistä, että esim. sulautetuille laitteille oli omat kaupalliset kääntäjänsä, mutta sittemmin GCC:stä on tullut alustasta riippuen arkipäiväinen tai jopa ainoa vaihtoehto ammattikäytössäkin. Esimerkiksi Applen Xcode käyttää sisuksissaan GCC:tä. Harrastusprojekteissa, kuten vaikkapa noiden käsikonsolien kanssa, tilanne on suorastaan yksipuolinen, sillä jokaiselle mainituista laitteista ohjelmoidaan aivan samoja työkaluja käyttäen (gcc+make+binutils). Avainsana on ristiinkääntö: kun kääntäjään lisätään tuki uudelle alustalle, mahdollistaa se heti sille kehittämisen lähes missä hyvänsä eksoottisessa ympäristössä. Kaupallisesta kannattavuudesta kiinnostuneet yritykset eivät koskaan lähtisi samanlaiseen sirkukseen, mutta harrastajilla ei ole samanlaisia rajoitteita.

Filed under: softat

Kommentin kirjoitus

You must be logged in to post a comment.

RSS feed for comments on this post.


Kommenttien virta

Aiheet