Joonas Jaskarin ensimmäinen C-ohjelma


                   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


HTML Conversion by AG2HTML.pl V2.94618b & witbrock@cs.cmu.edu