Tämä sivu perustuu Arto Wiklan ohjelmointisivustoon Materiaalin copyright © Arto Wikla. Materiaalia saa vapaasti käyttää itseopiskeluun. Muu käyttö vaatii luvan.

Tietokone ja ohjelma

(Muutettu viimeksi 20.8.2010, sivu perustettu 20.8.2010.)

Tietokone on rakennettu "osaamaan" yksinkertaisia operaatioita, jotka käsittelevät tietokoneen komponenteissa olevia bittien jonoja. Tuollaista operaatiojoukkoa kutsutaan konekieleksi. Operaatiot itsekin esitetään tietokoneen muistissa bittijonoina.

Konekielinen ohjelmointi (yleensä ns. "assemblerilla") on hyvin kömpelöä ja virhealtista. Käytännössä nykyään lähes aina ohjelmoidaan ns. lausekielillä. Niitä käyttäen ohjelmoija välttyy koneen sisäisen rakenteen ajattelemiselta. Ohjelmista saadaan lausekielellä ohjelmoiden myös siirrettäviä: ne ovat käytettävissä kaikissa tietokoneissa, joille ko. lausekieli on toteutettu.

Lausekielten ajattelutapa on konekieltä paljon ihmisläheisempi: jo ensimmäiset lausekielet mahdollistivat matematiikasta tuttujen laskutoimitusten kirjoittamisen; voitiin kirjoittaa vaikkapa A+B*C sen sijaan, että olisi itse kerrottu, mistä koneen osasta minne bittijonoja siirrellään ja minkä bittijonojen välillä käynnistetään peruslaskutoimituksia. Sittemmin lausekieliin on kehitelty monenlaisia ajatusten järjestämisen välineitä: nimettyjä aliohjelmia ja aliohjelmakirjastoja, lohkorakennetta, olioita ja luokkia, ...

Jotta tietokone saataisiin suorittamaan lausekielellä laadittuja ohjelmia, lausekieliset ohjelmat on tavalla tai toisella kuitenkin muokattava konekielisiksi - tietokonehan ei muuta "osaa" kuin vain konemaisesti suorittaa muistissaan olevaa konekielisten operaatioiden jonoa. Tuollaista muokkaamista kieleltä toiselle kutsutaan kääntämiseksi.

Lausekielisen ohjelman kääntäminen konekielelle on aika työlästä ja mekaanistakin puuhaa, joten se sopii mainiosti tietokoneelle: ohjelmaa, jonka syöttötietoina on algoritmi lausekielisenä ja tulostietoina vastaava algoritmi vaikkapa konekielisenä, kutsutaan kääntäjäksi (compiler).

                                         syöttötiedot
                                      omalle algoritmille 
                        
                                             |
                                             V

   oma algoritmi       KÄÄNTÄJÄ          OMA ALGORITMI
   lausekielellä  --> KONEKIELELLÄ  -->  KONEKIELELLÄ

                                             |
                                             V

                                       oman algoritmin
                                        tulostiedot


Kääntäjä usein ohjelmoidaan itsekin lausekielellä. Miten se itse saadaan käännettyä konekieliseksi? Tietokonehan ei muunlaisia algoritmeja osaa suorittaa!

Ohjelmointikieli voidaan toteuttaa myös tulkin (interpreter) avulla. Tällöin konekielinen tulkkiohjelma suorittaa lausekielistä algoritmia "enemmän tai vähemmän sellaisenaan":

                                       syöttötiedot
                                    omalle algoritmille 
                        
                                           |
                                           V

              oma algoritmi              TULKKI
              lausekielellä  -->      KONEKIELELLÄ

                                           |
                                           V

                                      oman algoritmin
                                       tulostiedot


Lausekielisen ohjelman tulkkaaminen "enemmän tai vähemmän sellaisenaan" on joustavaa, mutta se saattaa olla hidasta monestakin syystä. Yksi mahdollisuus tehostaa tulkintaa on ns. välikielen käyttäminen. Välikieli voi olla käsitetasoltaan konekielen kaltaista, mutta todellisia konekieliä yksinkertaisempaa. Jos välikielen operaatiot esitetetään tietokoneen muistin tavuina (yleensä 8 bittiä), kieltä kutsutaan tavukoodiksi. Java on toteutettu juuri näin. Javan tavukoodin nimi on Bytecode.

                                                              syöttötiedot
                                                            omalle algoritmille 
                        
                                                                   |
                                                                   V

 oma algoritmi      VÄLIKIELIKÄÄNTÄJÄ       OMA ALGORITMI      VÄLIKIELITULKKI
 lausekielellä  --> KONEKIELELLÄ TAI   -->  VÄLIKIELELLÄ  -->  KONEKIELELLÄ
                    VÄLIKIELELLÄ
                                                                   |
                                                                   V

                                                             oman algoritmin
                                                              tulostiedot


Lausekieltä välikielelle kääntävä ohjelma voi tietenkin olla konekielinen, mutta se voi olla myös välikielellä ilmaistu! Miten kääntäjä tässä tapauksessa saadaan suoritettua tietokoneessa, joka tietenkin osaa vain omaa konekieltään?