Koko kooderin urallani kaksi asiaa on näyttänyt täysin mahdottomilta, mutta molemmat paljastuneet myöhemmin pelkiksi flopeiksi. Ensimmäinen näistä, tiedostojenkäsittely, vaikutti alkuun yliluonnollisen mystiseltä ja ylitsepääsemättömän hankalalta. Pienikin toive kavereilta hi-score-listojen tallennukseen pikkupeleissäni nosti kylmän hien pintaan ja sai ahdistumaan kuin teini-ikäisen tämän ensimmäisessä työhaastattelussa.
Myöhemmin tiedostojenkäpistely paljastui suureksi flopiksi ja kyse olikin vain kolmen API-kutsun käytöstä (useimmissa käyttämissäni ohjelmistoympäristöissä):
- open
- write/read
- (flush &) close
Just. Nyttemmin ottaa pannuun (siis viimeiset 6 vuotta) kun entiset YAT:in (Yet Another Tetris) hi-scoret eivät ole turvassa backupin, backupin, backupin, backupilla, jossakin zip-paketissa itse sorsan kanssa. Nykyään ei myöskään sen näköseen sorsaan koske edes metrisellä tikulla, eli toistaiseksi päivityksiä ei ole luvassa.
Toinen suuri mysteeri, Assembler-kielet, paljastui suureksi flopksi viime yönä, lukiessani tuoreinta kirjaani: "Inside the Machine" (J. Stokes, No Starch Press, 11/2006).

x86-koneiden ISA (Instruction Set Architecture), eli nk. konekieli, tai "äärimmäinen low-level-ohjelmointi", tuottaakin loppujen lopuksi koodia emulaattorille. Tai ainakin melkein.
Selvisi, että nykypäivän x86-ISA:n (ja sen laajennukset) toteuttavat hardwaret on näköjään harvoin ISA:n "näkösiä". Prosessoreissa on nimittäin Decode-niminen vaihe, jonka läpi "konekieleksi" käännetyt ohjelmat ajetaan, ja tämä puolestaan tuottaa sitä ihan aitoa, prosessorin syvimmän ytimen ymmärtävää konekieltä.
Selvisi myös, että x86-yht.sop. ytimissä on enemmän rekistereitä, kun ISA käyttäjälleen paljastaa. Stokesin kirjassa esimerkkinä käytetyssä virtuaalikoneessa näitä on nelinkertainen määrä (No Morjens!) ja niitä ohjataan erillisen rekisteritaulun kautta ALU:lle (Arithmetic Logic Unit).
Siis v*ttu kelatkaa, kenenkään meistä ei ois enää Pentiumin keksimisen jälkeen tarvinut välittää legacy-x86:sta ollenkaan. Jostain kumman syystä Intel kuitenkin päätti tehdä peliliikkeen, ja säilyttää (silloin tuotannollisesti varsin kalliin) tuen vanhan koodin ajoon.
Ja tässä asenteeni x86:n ASM:n yrsiyttä kohtaan muuttui, sekä jouduin nostamaan hattua mainosmiehille ja markkina-analyytikoille ehkä ensimmäistä kertaa elämässäni. Tuskin olisi tätäkään tekstiä Core 2 Duo:n voimalla kirjoitettu, mikäli insinöörit olisivat saaneet päättää, tuetaanko x86:tta, vai käytetäänkö se 30% piikiekon pinta-alasta vaikkapa isompaan välimuistiin (cache) tai laajempaan pipelineen.
Amen.
Ei kommentteja:
Lähetä kommentti