Varhaiset oliokielet Modula, CLU ja Smalltalk T-106.5800: Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.2009
Luennon sisältö Modula CLU (CLUster programming language) Smalltalk Pohdintaa
Modula perhe ETH (Die Eidgenössische Technische Hochschule )/Xerox PARC (Palo Alto Research Center) Niklaus Wirth Ideat 1970-luvulla, implementaatio (Modula 2) 1980 Vaikuttanut voimakkaasti oliokielien kehittymiseen
Ohjelmointikielten tilanne 1970-luvulla Yleisimmät kielet Fortran (yliopistomaailma), Cobol (yritysmaailma), PS/I (laajenemassa), MESA (PARC) ja Pascal Kielissä useita puutteita: datatyypit (Fortran, Cobol), komponenttien riippumattomuuden puutteet (Pascal), epäyhtenäinen toteutus (PS/I) Laajojen ohjelmistojen hallinta hankalaa
Modulan 2:n erityispiirteitä Pascal-tyylinen syntaksi Yksi päätarkoituksista opetuskäyttö (kuten myös Pascalissa) Ensimmäinen toteutus Lilith järjestelmään Joitakin pienimuotoisia korjauksia Pascaliin (mm. proseduurien parametrit ja elserakenne) Moduulirakenne
Modula-kielen rajoitteita Muistinhallinta (ei roskien keräämistä, ei huomioitu moniajoa) Ei keskeytysten hallintaa Ei varsinainen oliokieli (ei perintää, ) Ei rinnakkaisuutta Liian kevytkenkäisesti toteutetut alimman tason operaatiot, mm. tyypinvaihto (N. Wirthin mukaan)
Modulan moduulirakenne Moduulien määrittelytiedot erotetaan toteutuksesta (vrt. C:n header-tiedostot) Moduulien vuorovaikutus määritellään vahvan tyypityksen periaatteella Yllämainittujen seurauksena tyyppitarkastukset tehdään jo käännosvaiheessa (eikä esimerkiksi linkityksessä) Moduulien näkyvyys mahdollistaa hierarkisen moduulirakenteen Moduulit voidaan tulkita myös abstraktiksi tietotyypiksi
Moduulirakenne, esimerkki Objektien näkyvyys, export-komento: DEFINITION MODULE M1; EXPORT QUALIFIED a, b, c, P;... Objektien näkyvyys, import-komento: MODULE M2; IMPORT M1; #Menetelmä 1 IMPORT M1.c; # Menetelmä 2 Objekteihin viittaaminen: M1.a:=2; c:=6
Oliokielten kehityspolku Algol (1958) Pascal (1970) Modula (modula-2, 1980) Oberon (1986) Oliokielet
CLU Barbara Liskov, MIT, 1974 1975 Alun perin tarkoituksena oli tutkia konseptitasolla abstrakteja tietotyyppejä Nimi sanan cluster alkuosasta Ensimmäinen kieli, joka toteutti datan abstraktoinnin ohjelmointikielen tasolla Syntaksi Algolista, semantiikka Lisp:stä Myös muilla kielillä vaikutusta (Simula, PL/I, Pascal, SETL, jne.)
CLU:n lähtökohdat Haluttu toiminnallisuus ja toteutus ovat eri asioita Ohjelman osien riippumattomuus: Toteutuksen määritykset (specification) Toteutuksen kapsulointi (encapsulation) Monet, mahdollisesti tärkeät, osat jätettiin kehityksen ulkopuolelle: rinnakkaisuus, kontrollirakenteet Yksinkertaisuus, ilmaisuvoimaisuus, yhdenmukaisuus, turvallisuus ja tehokkuus
CLU ja olio-ohjelmointi Ohjelman kokonaisuuden erottaminen toisistaan hyvin samantyyppinen kuin ajatustapa nykyisessä olio-ohjelmoinnissa Datatyypit ja niitä käsittelevät funktiot sijoitetaan samaan kokonaisuuteen Ohjelmoijan vapautta rajoitetaan, jotta kokonaisuus saadaan paremmin hallintaan Painotus on enemmän ohjelmarakenteiden erottelussa kuin toiminnallisessa erottelussa (operaatiot kuuluvat tyyppimäärittelyyn, eivätkä olioon itseensä) tai semanttisessa ajattelutavassa Käyttämättömät oliot poistetaan roskankeräyksellä Ei perintää eikä oliohierarkiaa, oliot eivät voi sisältää olioita (CLUssa klustereita)
CLU, luokan määrittely complex_number = cluster is add, subtract, multiply,... rep = record [ real_part: real, imag_part: real ] add = proc... end add; subtract = proc... end subtract; multiply = proc... end multiply;... end complex_number;
Smalltalk Kehitys 1970-luvulla, PARC:ssa Alan Kay, Dan Ingalls, Adele Goldberg, Ted Kaeuhler, Scott Wallace ja muut Ensimmäinen versio 1971 syntyi ideasta totetuttaa viestinvälitykseen perustuva kieli yhdellä koodisivulla Lukuisia hyvin erilaisia versioita 1970-luvun kuluessa Enimmäinen julkaistu versio 1980 (Smalltalk-80) Erilaisia toteutuksia (mm.apple, Visual Works, Object Works, IBM), mutta ei koskaan levinnyt laajemmin
Smalltalkin ominaispiirteitä Kaikki elementit ajatellaan olioina ( everything is an object ) Myös perustietotyypit (int, boolean ) Poikkeus: olioiden sisäiset muuttujat Tässä mielessä puhtaampi oliokieli, verrattuna esimerkiksi Javaan ja C++:aan Olioiden toiminta perustuu viestien vastaanottoon, käsittelyyn ja lähettämiseen Minimalistinen syntaksi (ainoat varatut pseudomuuttujat : true, false, nil, self, super ja thiscontext ) Bytecode ja virtuaalikone Perintä (Smalltalk-76)
Smalltalkin paradigma 1. Kaikki muodostuu olioista 2. Oliot vuorovaikuttavat lähettämällä viestejä 3. Olioilla on oma muistiavaruus 4. Olio on luokan ilmentymä 5. Luokka sisältää olioiden jaetun käyttäytymisen 6. Oliot on järjestetty yksijuuriseksi puuksi perintähierarkiaan (Smalltalk 76 )
Smalltalkin viestinvälitys, esimerkki Viestinvälitys (postfix): 442 factorial 2 raisedto: 4 3 + 4 Objekteihin viittaaminen (ennen Smalltalk-80 julkaisua): grow >> (SELF undraw. size <- size + :. SELF draw) Smalltalk-80: Grow: amount method to change size of a box self undraw. size <- size + amount. self draw
Smalltalk-kielen vaikutukset ohjelmointikielten kehitykseen 1. Syntaksi ja semantiikka 2. Prototyyppi viestinvälitys-malliin (message passing) 3. Graaffisen käyttöliittymän kehitys (ikkunointijärjestelmä) 4. Pohja integroitujen kehitysympäristöjen (IDE=Integrated Developing Enviroment) kehittämiseen
Pohdintaa Ideat ovat syntyneet 60-luvulla, ensimmäiset toteutukset 70-luvulla ja tuotantokäyttö 80-luvulta lähtien Paradigmojen kehitys liittynyt kiinteästi mahdollisuuksiin (muisti, laskentateho, yms.) ja toisaalta tarpeisiin (ohjelmistojen monimutkaistuminen, graafiset käyttöliittymät yms.) Toteuttaminen on eri asia kuin teoria ( running code wins -IETF) Toteutukset ovat aina jossain määrin kompromisseja
Lähdekirjallisuutta Modula Niklaus Wirth, 2007: Modula-2 and Oberon, teoksessa: History of programming languages III, pp. 3-1 10, URL:http://www.inf.ethz.ch/personal/wirth/Articles/Modula-Oberon-June.pdf, käyty 20.9.2009 Wikipedia yhteisö: Modula-2, URL:http://en.wikipedia.org/wiki/Modula-2, käyty 20.9.2009 Smalltalk Allan C. Kay, 1996: The early history of Smalltalk, teoksessa: History of programming languages II, pp. 511 598, URL:http://gagne.homedns.org/~tgagne/contrib/EarlyHistoryST.html, käyty 20.9.2009 Wikipedia yhteisö: Smalltalk, URL:http://en.wikipedia.org/wiki/Smalltalk, käyty 20.9.2009 CLU Barbara Liskov, 1996: A History of CLU, teoksessa: History of programming languages II, pp.471 510, URL:http://www.lcs.mit.edu/publications/pubs/pdf/MIT-LCS-TR-561.pdf, käyty 20.9.2009 Wikipedia yhteisö, CLU (programming language), URL:http://en.wikipedia.org/wiki/CLU_%28programming_language%29, käyty 20.9.2009