Joonas Jaskarin ensimmäinen C-ohjelma
-------------------------------------
Tomi Jaskari
Joonas Jaskari ryntäsi ATK-luokkaan heiluttaen riemuissaan korppua, jonka
hän oli juuri vastaanottanut postitse. Korpulla oli C-kielinen ohjelma, joka
oli suunniteltu laskemaan planeettojen asemat tulevan syksyn tähtitaivaalla.
Ohjelma oli peräisin eräältä yliopistoystävältä, joka teki tähtitieteen oh-
jelmia UNIXilla, Helsingin yliopistossa.
Pistetäänpä planetaario käyntiin, vaikka heti, ellei teillä ole mitään
tärkeämpää kesken!
Koska Joonas oli riemastuttava kaveri eikä Amigoista ollut pulaa, päättivät
Joonas ja hänen kaverinsa kopioda 'planeetat' ohjelman umpilevylle. Tätä
varten he loivat jokaiselle koneelle uuden hakemiston 'simulaatiot', johon
ohjelman voisi sijoittaa myöhempää käyttöä varten. Joonaskin istuutui innok-
kaana käyttämään ohjelmaa...
Mutta miten ohjelma toimisi, syventyi Joonas miettimään hetkeksi, joka oli
normaali aikayksikkö, jonka hän omisti ajattelemiseen.
Komennot, kuten 'makedir' ja 'type' ovat oikeastaan ohjelmia ja niitähän
käytetään kirjoittamalla niiden nimet. Ehkäpä riittää, että kirjoitan pla-
neetat.
Niinpä Joonas ryhtyi tuumasta toimeen ja kirjoitti shell-ikkunaan komennon
planeetat.
planeetat: file is not executable
planeetat failed returncode 10
Joonas oli hieman kummissaan ollen jo huutamaisillaan apua paikalle, mutta
päätti viime hetkellä vaieta ja kokeilla itsepäisesti vielä jotain...
Höh - eikö tuo toimikaan? Pitäisiköhän kirjoittaa C-komennot itse.
Joonas otti satunnaisen rivin ohjelmasta ja kirjoitti sen. Shell vastasi:
#include: Unknown command
Juuri kun Joonas mietti mitä seuraavaksi yrittäisi, niin opettaja saapui
paikalle ja ehdotti ohjelman kääntämistä, että tietokonekin ymmärtäisi sen.
Kääntämistä varten ohjelma uudelleennimettiin planeetat.c nimellä ja opetta-
ja selitti ettei Amiga suoraan ymmärrä C-kieltä vaan ohjelmat tarvitsee
kääntää suoritettavaksi koodiksi.
Tuotahan täytyy heti itse kokeilla.
Seuraavaksi hän kirjoitti 'cc planeetat.c' ja hetken cc käänsi ohjelmaa ja
tuotti lopulta ajovalmiin koodin nimeltään planeetat. Nyt sitten käyttämään
sitä. Kaikki mitä Joonaksen piti kirjoittaa oli komento 'planeetat' ja oh-
jelma avasi oman ikkunansa. Hänen alkuperäinen ideansa ei ollut ollut kovin-
kaan väärä, sitä oli vain tullut sovellettua väärään tiedostoon.
Vähitellen ohjelman tultua tutummaksi Joonas keksi muutoksia, joita hän ha-
lusi kokeilla. Ohjelmassa oli monta alakohtaa funktioina ja oli tavallaan
häpeällistä aina kääntää koko ohjelma kun muutoksia oli tehty vain yhteen
ainoaan funktioon. Käännökset veivät turhaa aikaa. Tällä kertaa kaverit neu-
voivat kuinka yksi iso tiedosto pilkotaan editorilla ja jokainen funktio
talletetaan omaan tiedostoonsa. Nyt, kun hän käski cc:tä kääntämään joukon
tiedostoja, ei tuloksena ollut ainoastaan käännetty pääohjelma vaan myös jo-
kainen funktio tuli käännettyä omaan objektitiedostoonsa. Tästä lähtien kun
Joonas teki muutoksia vain yhteen funktioon, riitti cc:lle sen uudel-
leenkääntäminen ja linkkamineen muihin valmiisiin ohjelman osasiin. Tällais-
ta helpoutta ja tukea saatuaan Joonas ei voinut välttää mainetta ja rikkauk-
sia ohjelmointityöstään.
Ohjelmointikielet, kääntäjät ja tulkit
Olipa kerran, ei niin kauan sitten eikä kovinkaan kaukana, suuri ja mahtava
tietokone, jonka hallitsemiseksi oli opeteltava pääteloitsut ja tuhannet ki-
kat ja jonka käyttäminen vaati suurta taitoa. Nykyään tietokoneiden hallit-
seminen ja käyttö on yhä helpompaa. Ihmisistä ei ole tullut viisaampia, ei
myöskään tietokoneista. (Tietokoneista on kyllä tullut nopeampia, halvempia,
pienempiä, tehokkaampia ja ne kykenevät tallettamaan aikaisempaa enemmän in-
formaatiota muistiinsa, joten ei niillä suinkaan heikosti mene.) Käytön hel-
pottuminen on niiden ihmisten ansiota, jotka ovat kirjoittaneet nokkelia oh-
jelmia tavallisen ihmisen käytettäväksi, ohjelmia jotka helpottavat tietoko-
neen käyttöä suuresti tekemällä asioista inhimillisempiä. Erityisesti ohjel-
mointikielten, kääntäjien ja tulkkien sekä käyttöjärjestelmien kehittyminen
tekee ohjelmoinnista paljon helpompaa. Mutta mitä kätkeytyy noihin sanoihin?
Selvittääksemme asiaa, tarkastelemme kuinka tietokonetta käytetään.
Tietokoneet ovat laitteita, jotka seuraavat saamiaan käskyjä. Jos kokoat
joukon käskyjä tietyn asian suorittamiseksi, kutsutaan tätä käskyjoukkoa oh-
jelmaksi. Niinpä, saadaksesi tietokoneen toimimaan puolestasi, täytyy sinun
antaa sille oikeita käskyjä. Tämä ei niinkään helppoa, koska tietokone it-
sessään ymmärtää vain hyvin rajallista käskyjoukkoa, jota kutsutaan sen
käskykannaksi (instruction set). Lisäksi se ei ymmärrä näitä käskyjä niminä
vaan lukukoodeina (binary code), jossa on vain nollia ja ykkösiä. Alkukan-
taisin tapa tietokoneen ohjelmoimiseksi on syöttää näitä binäärikoodisia
käskyjä peräkkäin sille. Tätä kutsutaan konekieliseksi työskentelyksi ja se
on hyvin työlästä ja tarkkaa; varmastikaan se ei kiehdo suuren yleisön mie-
likuvitusta. Sitäpaitsi jokaisella tietokonemerkillä tuppaa noin ylipäätänsä
ottaen olemaan omansa eli konekieliä on useita. Eli uuden tietokoneen myötä
käyttäjät joutuisivat aina opettelemaan uuden kielen ja uudistamaan ohjel-
mansa. Omaa laiskutaan käyttäjät ajautuivat kehittämään yleistä kieltä, jota
jokainen tietokone ymmärtäisi.
Sepä onkin vasta mielenkiintoinen ongelma. Kuinka voidaankaan kehittää oh-
jelmia toimivaksi kaikilla eri tyyppisillä koneilla kun jokainen ymmärtää
vain omaa alkukantaista käskykantaansa? Yksi tapa on toteuttaa asia kaksi-
vaiheisesti. Ensimmäinen askel on luoda yleismaailmallisempi kieli, jota ih-
miset voivat helpommin ymmärtää ja jopa rakastaa. Tämä yleismaailmallinen
kieli on tietenkin tietokoneen kannalta käsittämätön. Toinen vaihe onkin
kirjoittaa käännösohjelma, joka kääntää uuden kielen koneen osaamalle kone-
kielelle. Tätä onjelma kutsutaan kääntäjäksi (compiler). Jokaisella tietoko-
netyypillä on sitten oma kääntäjänsä, joka on kirjoitettu sen omalla kone-
kielellä. Kääntäjä auttaa tietokonetta ymmärtämään yleiskieltä.
Mikä yleismaailmallinen kieli kehittyikään tämän strategian pohjalta? Tähän
mennessä useita satoja ohjelmointikieliä on kehitetty ylläolevan kaksivai-
heisen suunnitelman mukaisesti, mutta yksikään niistä ei ole saavuttanut
yleismaailmallisen kielen asemaa, paitsi ehkä luojansa mielestä. Useita kie-
liä on kuitenkin saavuttanut laajan käyttäjistön, mukana sellaisia rohkeita
ja kauniita kuten FORTRAN, COBOL, BASIC, Pascal, APL, PL/M, LISP, Logo ja C.
Amigan mukana tuli aikaisemmin AmigaBasic, nyttemin ARexx on se kieli, joka
on otettu mukaan käyttöjärjestelmäohjelmistoon. Lähes kaikki muutkin kielet
ovat asennettavissa käyttöösi.
Jos todella haluat ohjelmoida Amigaasi assemblerilla tai C-kielellä suosit-
telen ensimmäiseksi ostokseksi The AmigaDOS Manual -kirjaa, jossa on luetel-
tu mitä tarvitset ja kerrotaan miten objektitiedostot kootaan linkkerillä
ajettavaksi ohjelmaksi asti.
© Tomi Jaskari 18. - 24. elokuuta 1994; alkuosa artikkelista on erittäin va-
paamielinen käännös seuraavan teoksen 9. luvun alusta:
Lähdeteos: The Waite Group's UNIX® Primer Plus second edition, ©1990

Kuva: Ohjelmointikielten sukupuu