{"id":98,"date":"2008-07-29T14:45:35","date_gmt":"2008-07-29T12:45:35","guid":{"rendered":"http:\/\/www.kameli.net\/marq\/?p=98"},"modified":"2011-08-21T11:57:50","modified_gmt":"2011-08-21T09:57:50","slug":"kaantajista-ja-alustoista","status":"publish","type":"post","link":"http:\/\/www.kameli.net\/marq\/?p=98","title":{"rendered":"K\u00e4\u00e4nt\u00e4jist\u00e4 ja alustoista"},"content":{"rendered":"<p>Kev\u00e4\u00e4st\u00e4 l\u00e4htien olen j\u00e4lleen palaillut ohjelmoinnin \u00e4\u00e4relle ja erityisesti siirt\u00e4nyt ohjelmia uusille alustoille. Innostus l\u00e4hti GP2X:n hankinnasta ja sivutuotteena syntyi sitten porttauksia my\u00f6s Dreamcastille. Kes\u00e4n aluksi ostin eBayst\u00e4 &#8212; vuosien jahkailun j\u00e4lkeen &#8212; my\u00f6s GP32:n, joka oli jo vanha tuttu, kaverilta aikanaan lainassa. Aika hirve\u00e4 laite oikeastaan, mutta aikanaan avoimuutensa vuoksi vallankumouksellinen ja GP2X:n ja sit\u00e4 kautta my\u00f6s <a target=\"_blank\" href=\"http:\/\/www.openpandora.org\/\">Pandoran<\/a> henkinen esi-is\u00e4. Lis\u00e4v\u00e4ri\u00e4 laitekirjoon toivat viel\u00e4 laina-N800 (Maemo) ja viime viikolla hankkimani Sony PSP.<\/p>\n<p>Takavuosien konsolit ja tietokoneet olivat sik\u00e4li hitaita ja rajoittuneita laitteita, ett\u00e4 laitteistoa t\u00e4ytyi ohjelmoida suoraan konekielell\u00e4. T\u00e4t\u00e4 nyky\u00e4 puhelimissakin on jo 32-bittiset suorittimet, useampi sata megahertsi\u00e4 ja grafiikkakiihdytys. Pelk\u00e4n tehojen siunailun sijasta on kuitenkin hy\u00f6dyllisemp\u00e4\u00e4 mietti\u00e4, mihin t\u00e4m\u00e4 on johtanut. Kielet ovat vaihtuneet assemblerista C\/C++:aan ja viel\u00e4 korkeammallekin tasolle, kuten Javaan ja Pythoniin. Suorittimien monimutkaistumisen ja k\u00e4\u00e4nt\u00e4jien tehostumisen my\u00f6t\u00e4 k\u00e4sin optimointi on vaikeutunut ja my\u00f6s muuttunut suurelta osin tarpeettomaksi. Abstraktion m\u00e4\u00e4r\u00e4 on kasvanut, joten raudan erikoispiirteill\u00e4 on en\u00e4\u00e4 verrattain v\u00e4h\u00e4n merkityst\u00e4: ajurit ja rajapinnat piilottavat alleen tarpeettomat yksityiskohdat. Uudelleenk\u00e4ytett\u00e4vyys on parantunut, kun hyvin kirjoitettua koodia voi sin\u00e4lt\u00e4\u00e4n k\u00e4ytt\u00e4\u00e4 hyvinkin erilaisilla alustoilla.<!--more--><\/p>\n<p>Itse olen kiinnostunut reaaliaikaisesta grafiikasta, jossa C:n kaltaisille kielille on viel\u00e4 tarvetta tehokkuuden nimiss\u00e4. Itse C-standardi ei sis\u00e4ll\u00e4 mit\u00e4\u00e4n grafiikkaan liittyv\u00e4\u00e4, joten ruudunpiirto ym. on toteutettava kirjastoja k\u00e4ytt\u00e4m\u00e4ll\u00e4. T\u00e4ll\u00e4 hetkell\u00e4 universaalein n\u00e4ist\u00e4 on <a target=\"_blank\" href=\"http:\/\/www.libsdl.org\/\">SDL<\/a>, josta on versioita kymmenille eri alustoille. Kokemus on kuitenkin osoittanut, ett\u00e4 kun menn\u00e4\u00e4n Linux-Mac-Windows-valtavirran ulkopuolelle, toteutukset voivat olla hyvinkin rajoittuneita ja suorastaan virheellisi\u00e4. Tyypillisi\u00e4 rajoituksia ovat vaikkapa kiinte\u00e4 ruututila\/v\u00e4risyvyys, hitaus ja huonosti toimivat ajastimet. L\u00e4hes jokaisella yll\u00e4mainituista laitteista on ollut k\u00e4yt\u00e4nn\u00f6ss\u00e4 pakko tehd\u00e4 omia viritelmi\u00e4 suoraan alustan omia rajapintoja tai rautaa k\u00e4ytt\u00e4m\u00e4ll\u00e4.<\/p>\n<p>K\u00e4\u00e4nt\u00e4jien osalta ilmainen <a target=\"_blank\" href=\"http:\/\/gcc.gnu.org\/\">GCC<\/a> (GNU Compiler Collection) on hiljalleen vallannut yh\u00e4 suuremman jalansijan. Aiemmin oli viel\u00e4 tyypillist\u00e4, ett\u00e4 esim. sulautetuille laitteille oli omat kaupalliset k\u00e4\u00e4nt\u00e4j\u00e4ns\u00e4, mutta sittemmin GCC:st\u00e4 on tullut alustasta riippuen arkip\u00e4iv\u00e4inen tai jopa ainoa vaihtoehto ammattik\u00e4yt\u00f6ss\u00e4kin. Esimerkiksi Applen <a target=\"_blank\" href=\"http:\/\/developer.apple.com\/tools\/xcode\/\">Xcode <\/a>k\u00e4ytt\u00e4\u00e4 sisuksissaan GCC:t\u00e4. Harrastusprojekteissa, kuten vaikkapa noiden k\u00e4sikonsolien kanssa, tilanne on suorastaan yksipuolinen, sill\u00e4 jokaiselle mainituista laitteista ohjelmoidaan aivan samoja ty\u00f6kaluja k\u00e4ytt\u00e4en (gcc+make+binutils). Avainsana on <em>ristiink\u00e4\u00e4nt\u00f6<\/em>: kun k\u00e4\u00e4nt\u00e4j\u00e4\u00e4n lis\u00e4t\u00e4\u00e4n tuki uudelle alustalle, mahdollistaa se heti sille kehitt\u00e4misen l\u00e4hes miss\u00e4 hyv\u00e4ns\u00e4 eksoottisessa ymp\u00e4rist\u00f6ss\u00e4. Kaupallisesta kannattavuudesta kiinnostuneet yritykset eiv\u00e4t koskaan l\u00e4htisi samanlaiseen sirkukseen, mutta harrastajilla ei ole samanlaisia rajoitteita.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Kev\u00e4\u00e4st\u00e4 l\u00e4htien olen j\u00e4lleen palaillut ohjelmoinnin \u00e4\u00e4relle ja erityisesti siirt\u00e4nyt ohjelmia uusille alustoille. Innostus l\u00e4hti GP2X:n hankinnasta ja sivutuotteena syntyi sitten porttauksia my\u00f6s Dreamcastille. Kes\u00e4n aluksi ostin eBayst\u00e4 &#8212; vuosien jahkailun j\u00e4lkeen &#8212; my\u00f6s GP32:n, joka oli jo vanha tuttu, kaverilta aikanaan lainassa. Aika hirve\u00e4 laite oikeastaan, mutta aikanaan avoimuutensa vuoksi vallankumouksellinen ja GP2X:n ja [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[],"class_list":["post-98","post","type-post","status-publish","format-standard","hentry","category-softat"],"_links":{"self":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/98","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=98"}],"version-history":[{"count":1,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/98\/revisions"}],"predecessor-version":[{"id":825,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=\/wp\/v2\/posts\/98\/revisions\/825"}],"wp:attachment":[{"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=98"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=98"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.kameli.net\/marq\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=98"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}