C vaatii ohjelmoijalta tarkkuutta (Ohjelmointikielet kautta aikojen 8)

C-koodia tekstieditorissa ja käännettynä objdump-työkalun avulla tutkittuna.

Tämä julkaisu on kahdeksas osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Miltä tietokoneen suorittama koodi oikeasti näyttää?

Oheisessa kuvassa on vasemmalla C-kielellä kirjoitettu ohjelma ja oikealla sitä vastaava konekielinen koodinpätkä, tässä tapauksessa Linux-käyttöjärjestelmän C-kääntäjän tuottamana. Esimerkiksi Linuxin objdump-työkalulla saa kääntäjän tuottamasta binäärikoodista heksadesimaaleiksi tulkitun esityksen. Kukin heksadesimaalimerkki vastaa neljää binäärilukua. 2^4 = 16, eli yhdellä merkillä on 16 mahdollista arvoa, mistä nimi heksadesimaali. Kukin kahden merkin pari vastaa siis kahdeksaa binäärilukua eli yhtä tavua, joka on tietokoneissa yleensä käytetty yhden muistipaikan koko.

 

Kuvassa oikealla ensimmäisessä sarakkeessa on konekielisen komennon osoite, esimerkiksi 1155. Myös osoitteet esitetään heksadesimaalimuodossa. Kukin kahden merkin mittainen komennon osa vie yhden muistipaikan, joten tämän seitsemän merkkiparin mittaisen komennon jälkeen seuraavan komennon osoite on 115c. Osoitteen jälkeen toisessa sarakkeessa on itse komento kahden heksadesimaalimerkin pareina.

 

Kolmannessa sarakkeessa on sama komento ihmisen luettavassa muodossa. Luettavuus on suhteellista: esimerkiksi “movl” tarkoittaa “move long”, eli siirrä tai tallenna pitkä kokonaisluku. Neljännestä sarakkeesta löytyvät komennon parametrit, eli tässä tapauksessa tallennettava kokonaisluku ja tallennusosoite. Tämä konekielinen komento, joka alkaa muistipaikasta 1155, vastaa siis C-ohjelman riviä

int x = 0;

 

1970-luvulla alkunsa saanut C on esimerkki matalan tason ohjelmointikielestä, jonka avulla pääsee melko suoraan käsittelemään tietokoneen sisäisiä rakenteita. Suuri osa ohjelmakoodista onkin suoraviivaisesti yhdistettävissä konekielisiin komentoihin, kuten kuvan koodiesimerkissä.

C:n opiskelu on monelle ohjelmoijalle silmiä avaava kokemus, kun esimerkiksi tietokoneen muistin rajallisuus täytyy ottaa ohjelmoidessa huomioon. Osaavan ohjelmoijan käsissä C on yksi resurssitehokkaimmista ohjelmointikielistä, ja esimerkiksi käyttöjärjestelmien koodissa on usein paljon C:tä. C on edelleen yksi maailman käytetyimmistä ohjelmointikielistä.

C:n tarkkuus, yksityiskohtaisuus ja rajoitteet eivät kuitenkaan sovi kaikkiin tarkoituksiin, joten sen pohjalta on kehitetty useita muita kieliä, kuten C++ ja C#. Näissä kielissä yhdistyy C:stä perityt tehokkaat ominaisuudet, kuten matalan tason muistin käsittely, korkeamman tason rakenteisiin, kuten olio-ohjelmointiin. C++ on laajalti käytössä mm. peliohjelmoinnissa ja kilpaohjelmoinnissa. Myös Arduino-mikrokontrollereita ohjelmoidaan yleensä C:llä tai C++:lla.

Vaikka C on jo 50 vuotta vanha ohjelmointikieli, sitä kehitetään jatkuvasti. Todennäköisesti tänä tai ensi vuonna päästään päättämään C:n seuraavasta standardoidusta versiosta – edellinen versio on vuodelta 2017. C onkin tämän julkaisusarjan ensimmäinen kieli, jota myös edelleen laajasti opiskellaan, ja josta on tarjolla paljon eri tasoisille suunnattuja oppimateriaaleja. Alla listattuna joitakin niistä.

Ohjelmointiputkan C-oppimateriaali: https://www.ohjelmointiputka.net/oppaat/opas.php?tunnus=cohj_1
Tie koodariksi -sivuston C++ -kurssi ohjelmoinnin perusteet osaavalle https://tie.koodariksi.fi/cpp/
FiTech-verkostoyliopiston kautta on usein tarjolla avoimia C-ohjelmoinnin yliopistokursseja: https://fitech.io/

 

Pascal – tehokas, mutta liiankin kompakti (Ohjelmointikielet kautta aikojen 7)

Turbo Pascal 7.0. -asennuslevykkeitä

Tämä julkaisu on seitsemäs osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Pascal-ohjelmointikielen kehitys alkoi 1960-luvun lopulla osana ALGOL-ohjelmointikielen uudistusprosessia. Vuonna 1970 Niklaus Wirth julkaisi projektinsa kuitenkin erillisenä ohjelmointikielenä, joka sai nimensä ranskalaiselta luonnontieteilijältä Blaise Pascalilta. Pascal-kielen tavoitteena oli olla tehokas ja kompakti, ja se saavuttikin suosiota 1960-70-luvuilla tietokoneiden levitessä oppilaitosten ja korporaatioiden ulkopuolelle pienempiin yrityksiin ja laajemmalle käyttäjäkunnalle.

Pascal oli 1980-luvulla myös suosittu ohjelmoinnin opetuskieli sekä kouluissa että yliopistoissa. Pascalin tavoitteena oli olla riittävän helppo kieli aloittamiseen, mutta kuitenkin opettaa alusta alkaen hyvää ohjelmointityyliä. Esimerkiksi seuraava Pascal-ohjelma tulostaa ruudulle kymmenen merkin levyisen ja korkuisen neliön risuaita-merkeillä:

var
    n, i, j: integer;
begin
    n := 10;
    for i := 1 to n do
    begin
        for j := 1 to n do write('#');
        writeln();
    end;
end.

Koodissa näkyy, että muuttujan asettamiseen käytetään merkintää := eikä =. Merkintä = on puolestaan varattu vertailemiseen. Esimerkiksi “n := 10” asettaa muuttujan n arvoksi 10, kun taas “n = 10” tutkii, onko muuttujan n arvo 10. Tämä eroaa nykyään yleisemmästä käytännöstä, jossa muuttuja asetetaan yhtäkuin-merkillä =, kun taas vertailu tapahtuu kahdella merkillä ==.

Pascal-kielen menestykseen vaikutti Borlandin edullinen ja tehokas Turbo Pascal -kääntäjä, jonka avulla oli helppoa opetella ohjelmointia DOS-ympäristössä. Myöhemmin Borland julkaisi Windows-ohjelmointia varten Pascaliin pohjautuneen Delphi-kääntäjän, josta tuli myös suosittu.

Vaikka Pascal oli hyvin suosittu kieli 1990-luvulle asti, nykyään se on lähes tuntematon eikä kovin moni taho käytä sitä. Pascalin kompaktius koitui jossain määrin sen tuhoksi: kieli ei suoraan sopinut erikoistuneempiin käyttötarkoituksiin, joten käyttäjät kehittivät eri suuntiin leviäviä laajennuksia kieleen. Seurauksena oli useita virallisempia ja epävirallisempia kieliversioita, ja Pascal-ohjelmoijan täytyi käytännössä osata useaa eri ohjelmointikieltä voidakseen ohjelmoida Pascalilla. Lopulta paremmin standardisoidut ohjelmointikielet kuten C ja Java ajoivat Pascalin ohi.

Kuvassa Turbo Pascal 7.0 -asennuslevykkeitä, lähde Wikimedia.

Logo – lasten oma ohjelmointikieli (Ohjelmointikielet kautta aikojen 6)

Logo-koodi, joka piirtää spiraalin sekä kuva koodin suorituksen tuloksesta.

Tämä julkaisu on kuudes osa syksyllä 2022 alkaneesta julkaisusarjasta, joka käsittelee erilaisia ohjelmointikieliä historian saatossa. Tervetuloa mukaan matkalle ohjelmointikielten maailmaan!

Logo on opetuskäyttöön tarkoitettu ohjelmointikieli, jonka ensimmäinen versio kehitettiin vuonna 1967. Keskeinen henkilö Logon kehityksessä oli MIT:n professori Seymour Papert, joka oli kiinnostunut uuden teknologian käyttämisestä opetuksessa. Tavoitteena oli luoda ohjelmointikieli, joka kehittäisi lasten ajattelua konkreettisen tekemisen kautta. Nimi Logo tulee kreikan kielen sanasta “logos”, joka tarkoittaa sanaa tai ajatusta

Logo tunnetaan erityisesti kilpikonnagrafiikasta, jossa ruudulla liikkuu kilpikonna. Tavallisia komentoja ovat kilpikonnan liikuttaminen eteenpäin sekä kilpikonnan suunnan muuttaminen. Liikkuessaan kilpikonna piirtää viivaa, minkä avulla voidaan piirtää kuvioita ruudulle. Yllättävää kyllä, Logon ensimmäisissä versioissa ei kuitenkaan ollut graafisia ominaisuuksia, vaan kieli oli alun perin tarkoitettu tekstin ja symbolien käsittelyyn.

Logossa on funktionaalisen ohjelmoinnin piirteitä ja siinä on vaikutteita Lisp-kielestä. Tyypillinen tapa ohjelmoida Logolla on määritellä lyhyitä komentoja, jotka liikuttavat kilpikonnaa tietyllä tavalla. Komennoissa voi olla parametreja, jotka vaikuttavat niiden suoritukseen. Yhdistämällä tällaisia komentoja toisiinsa voidaan luoda ohjelmia, jotka tuottavat monimutkaisia kuvioita.

Logo saavutti suunnilleen nykyisen muotonsa 1960-luvun lopussa, kun kieleen lisättiin grafiikkaominaisuudet. Kuitenkin kieli vietti vuosikausia hiljaiseloa ja vain harvat tiesivät Logosta ennen 1980-lukua, jolloin kieli alkoi saavuttaa suosiota. Tähän vaikutti Papertin vuonna 1980 ilmestynyt kuuluisa kirja “Mindstorms: Children, Computers, And Powerful Ideas”, joka käsitteli Logon taustalla olevia ideoita.

Kun Logo alkoi yleistyä 1980-luvulla, siitä tuli haastaja Basic-kielelle, jolla oli valta-asema ohjelmoinnin opettamisessa. Logosta annettiin kuva Basicia kehittyneempänä kielenä, joka kehittäisi paremmin lasten ajattelua. Erityisesti Logon sanottiin soveltuvan Basicia paremmin luovaan ohjelmointiin. Logon vahvuutena oli funktionaalisen ohjelmoinnin tyylinen ajattelu, jossa ongelman ratkaisun pystyi rakentamaan pienistä paloista.

Nykyään Logoa ei käytetä paljoakaan, vaan Scratch on pitkälti korvannut sen ohjelmoinnin alkeiden opetuksessa. Scratchissa on vaikutteita Logosta, mutta kieli on nykyaikaisempi ja se tarjoaa enemmän mahdollisuuksia ohjelmoijalle. Siinä missä Logolla voi lähinnä piirtää kuvioita kilpikonnan avulla, Scratchilla voi tuottaa pelejä, joissa on liikkuvia kuvia ja vuorovaikutteisuutta.

Logo on käännetty myös suomeksi. Voit testata logolla ohjelmointia täällä (https://fergusq.github.io/jslogo/?lang=fi#).

Kuvassa esimerkki spiraalin piirtävästä Logo-koodista Linkki-tiedeluokan historiikin sivulta 41.