next up previous contents index
Next: Yksinkertainen Java-ohjelma Up: Tietokoneohjelmista Previous: Tietokoneohjelmista   Sisältö   Hakemisto

Konekieli ja lausekieli

Tietokoneen ymmärtämät käskyt ovat itse asiassa hyvin yksinkertaisia, kuten "Laske kaksi lukua yhteen", "Hyppää ohjelmassa kohtaan X". Tietokoneen tehokkuus ja monikäyttöisyys perustuu vain siihen, että tietokone pystyy suorittamaan näitä käskyjä todella nopeasti.

Kaiken lisäksi käskyt pitää esittää tietokoneelle bittijonoina eli erilaisina ykkösten ja nollien yhdistelminä. Kaikkein ensimmäisiä maailmassa rakennettuja tietokoneita ohjelmoitiinkin niin, että koneessa olevien kytkimien avulla koneelle annettiin ykkösten ja nollien jonoja, jotka muodostivat käskyjä. Tällainen ohjelmointi oli luonnollisesti hyvin hidasta ja virhealtista. Jos yksikin kytkin oli väärässä asennossa, koko ohjelman suoritus meni sekaisin.

Ohjelmoinnin helpottamiseksi kehitettiin symbolinen konekieli, Assembler. Siinä käskyjä ei esitetä enää bittijonoina, vaan jokaista käskyä varten on sovittu määrätty sana, esimerkiksi yhteenlaskukäsky on yleensä add ja vähennyslaskukäsky sub. Lisäksi käskyt sisältävät tiedon siitä, missä ne luvut, joille operaatio tehdään, ovat. Tietokone ei suoraan ymmärrä symbolisen konekielen käskyjä, vaan jotta symbolisella konekielellä kirjoitettu tietokoneohjelma voitaisiin suorittaa, pitää ensin muuttaa symbolisen konekielen käskyt tietokoneen ymmärtämiksi bittijonoiksi. Tätä muunnosta ei tarvitsee kuitenkaan suorittaa käsin, vaan voidaan kirjoittaa tietokoneohjelma, joka suorittaa muunnoksen. Jokaista symbolisen konekielen käskyä vastaa suoraan yksi määrätty bittijono, joten muunnoksen suorittaminen on hyvin suoraviivaista.

Symbolisenkin konekielen ongelmana on kuitenkin se, että ohjelmoija joutuu sitä käyttäessään ajattelemaan asioita huomattavasti yksityiskohtaisemmin kuin mikä on tarkoituksenmukaista. Ohjelmoijan pitää esimerkiksi koko ajan olla selvillä siitä, missä kohdassa tietokoneen muistissa käsiteltävät luvut täsmällisesti sijaitsevat. Jos haluataan laskea kaksi lukua yhteen, vaatii tämä usein monta konekielen käskyä, kun käsiteltäviä lukuja on ensin siirrettävä tietokoneen sisällä sopiviin paikkoihin. Näiden yksityiskohtien ajatteleminen tekee ohjelmoinnin työlääksi ja lisää myös virhemahdollisuuksia. Lisäksi jokaiselle prosessorityypille on oma konekieli. Yhdelle tietokoneelle symbolisella konekielellä kirjoitettu ohjelma ei toimi toisentyyppisessä tietokoneessa.

Symbolisen konekielen ongelmien ratkaisemiseksi ruvettiin vähitellen kehittämään lausekieliä. Lausekielisissä ohjelmissa monta peräkkäistä konekielen käskyä on korvattu yhdellä lausekielen käskyllä. Käskyt on suunniteltu niin, että ne vastaisivat sellaisia loogisia kokonaisuuksia, joita ohjelmoija ajattelee. Java on yksi lausekieli. Muita (vanhempia) lausekieliä ovat esimerkiksi Cobol, Fortran, Pascal, C ja C++.

Tietokone ei kuitenkaan ymmärrä lausekielistä ohjelmaa sellaisenaan, vaan lausekielinen ohjelma on muutettava konekieliseksi, jotta se voitaisiin suorittaa. Tähän tarkoitukseen käytetään jälleen toista ohjelmaa. Tarkoitukseen käytettävät ohjelmat voidaan jakaa kahteen luokkaan, kääntäjiin ja tulkkeihin.

Kääntäjä ottaa koko lausekielisen ohjelman, muuttaa sen konekielelle ja tallentaa konekielisen ohjelman tiedostoon. Tämän jälkeen konekielinen ohjelma voidaan ajaa mielivaltaisen monta kertaa ilman, että ohjelmaa tarvitsee kääntää uudelleen.

Tulkki käy läpi lausekielistä ohjelmaa käsky kerrallaan, muuttaa käskyn konekielelle ja suorittaa konekielisen käskyn/käskyt. Tämän jälkeen tulkki siirtyy lausekielisen ohjelman seuraavaan käskyyn. Konekielisiä käskyjä ei tallenneta minnekään, vaan jos ohjelma halutaan suorittaa uudelleen, pitää se myös tulkita kokonaan uudelleen.

Java-kieltä käytettäessä käytetään sekä kääntäjää että tulkkia. Java-kielinen ohjelma käännetään ensin välikielelle, jonka nimi on Bytecode. Bytecode-kieli on sama kaikille tietokonetyypeille. Välikielinen ohjelma tallennetaan tiedostoon. Kun ohjelma suoritetaan, välikielinen ohjelma tulkitaan käytettävän tietokoneen konekielelle.

Lausekielten etu symboliseen konekieleen verrattuna on se, että ohjelmointi niillä on nopeampaa ja vähemmän virhealtista. Lisäksi ohjelmointi ei enää riipu siitä tietokoneesta, jolla ohjelma aiotaan suorittaa. Lausekielellä kirjoitettu ohjelma voidaan ajaa millä tietokoneella tahansa, kunhan tälle tietokoneelle on olemassa kääntäjä tai tulkki, joka muuttaa kyseisellä lausekielellä kirjoitetun ohjelman konekieliseksi.


next up previous contents index
Next: Yksinkertainen Java-ohjelma Up: Tietokoneohjelmista Previous: Tietokoneohjelmista   Sisältö   Hakemisto
Kerttu Pollari-Malmi 2003-01-27