TIE542 periaatteet, syksy 2010 Antti-Juhani Kaijanaho TIETOTEKNIIKAN LAITOS 6. syyskuuta 2010
Sisällys Esia
Oppimistavoitteet arvolauseelle 1 Kurssin suorittanut opiskelija kykenee vertailemaan ohjelmointikieliä toisiinsa; selostamaan käsky-, funktio-, olio- ja logiikkakielten pääperiaatteet; toistamaan ohjelmointikielten n pääkohdat; ja lukemaan keskeisiä ohjelmointikielten kuvaamisessa käytössä olevia formalismeja.
Oppimistavoitteet arvolauseille 4 5 Kurssin erinomaisin arvolausein suorittanut opiskelija kykenee lisäksi arvioimaan ohjelmointikieliä tieteellisesti ja kriittisesti; analysoimaan käsky-, funktio-, olio- tai logiikkakielen periaatteita; ja käyttämään jotakin formalismia ohjelmointikielen kuvaamiseen.
Lähiopetus luennot (suomeksi) 6.9. 9.11. (18 luentokertaa) ma klo 12 ja ti klo 10 saatan joutua perumaan 1 2 luentoa kurssin aikana käräjäoikeuden lautamiehen tehtävän vuoksi aikataulu sisältää varauksen 2 korvaavalle luentokerralle demot 14.9. 9.11. klo 12 (9 kertaa) tarkista sali aina Korpista! lähiopetus 36 h + 18 h = 54 h (eli 41 %)
Kotitehtävät luentojen kertaus ja demojen teko 54 h (eli 6 h/vko) osaamisnäytön (tentti tai essee) valmistelu 25 h kotitehtävät yhteensä 79 h (59 %)
Suoritustavat essee deadline 23.11.2010 n. 10 sivua rajoitetusti vapaasta aiheesta tarkoituksena harjoitella kurssin ensimmäistä oppimistavoitetta samalla osoitetaan kurssin tietosisällön hallinta tarkemmat ohjeet kurssin nettisivuilla tentti 19.11.2010 3.12.2010 11.2.2011
Sisällys Esia Esia
Esillisia ohjelmointivälineitä Välineitä, joilla ohjelmoitavia koneita ohjelmoitiin ennen yleiskäyttöisten tietokoneiden käyttöönottoa: Jacquardin kangaspuiden ohjelmakortit (1801) Babbagen analyyttisen koneen ohjelmakortit (1837) Ada Augustan, Lovelacen kreivittären, huomautukset (1942 3) automaattipianoiden rullat (1883) Esia Formaaleja kieliä, joilla esitettiin algoritmeja ennen yleiskäyttöisten tietokoneiden käyttöönottoa: lambda-laskento (1936) Turingin kone (1936)
Plankalkül Konrad Zusen Saksassa 1943 5 kehittämä kieli ei saanut juurikaan huomiota ennen 1970-lukua kirjoitustapa on erikoinen muuten yllättävän moderni kieli Tarkemmin: F. L. Bauer & H. Wössner: The Plankalkül of Konrad Zuse: A Forerunner of Today s Programming Languages. Communications of the ACM, 15 (7), 1972. Esia
Konekielet 1940-luvulta alkaen alun perin: kieli, jota tietokoneen laitteisto käyttää toimintaohjeiden saamiseksi koostuu tavallisesti tavujonoista (käskyistä) kukin tavujono koodaa yhden primitiivisen käskyn, kuten yhteenlaskun tai hypyn ohjelmointi on erittäin työlästä ja virhealtista Esia
Assembly eli symbolinen konekieli 1940-luvulta alkaen (käsin käännettynä), 1951 (koneellisesti käännettynä) konekielen symbolinen esitystapa kukin konekielen käsky esitetään yhtenä rivinä hyppyjen kohteille ja muistipaikoille voidaan antaa nimet käännettävä joko käsin tai automaattisesti konekielelle joka koneella omansa Esia
Makroassembly alkaen 1955 assembly, jossa ohjelmoija voi määritellä makroja nimettyjä, parametrisoituja käskyjonoja makron nimi käskyn paikalla korvataan ko. käskyjonon kopiolla Esia
Sisällys Esia Esia
Fortran 1 2 3 4 C PROGRAM FOR FINDING THE LARGEST VALUE C 1 ATTAINED BY A SET OF NUMBERS DIMENSION A(999) FREQUENCY 30(2,1,10), 5(100) READ 1, N, (A(I), I = 1,N) 1 FORMAT (I3/(12F6.2)) BIGA = A(1) 5 DO 20 I= 2,N 30 IF (BIGA-A(I)) 10,20,20 10 BIGA = A(I) 20 CONTINUE PRINT 2, N, BIGA 2 FORMAT (22H1THE LARGEST OF THESE I3, 1 12H NUMBERS IS F7.2) STOP 77777 1. (columns 1 5) statement number (C for comment) 2. (column 6) continuation 3. (columns 7 72) Fortran statement 4. (columns 73 80) identification Esia Lähde: Fortran automatic coding system for the IBM 704 programmer s reference manual, 1956.
Fortran kehitetty 1954 1956 julkaistu 1956, 1958 (FORTRAN II) osoitti että ohjelmallisesti käännettävät ohjelmointikielet ovat käyttökelpoisia kontribuutioita: symboliset muuttujat aritmeettiset lausekkeet taulukot, joiden koko on tiedossa käännösaikana silmukat ja ehtorakenteet erilliset (ei-rekursiiviset) aliohjelmat edelleen käytössä merkittävästi muuttuneena Esia
FLOW-MATIC 0) INPUT INVENTORY FILE=A PRICE FILE=B, OUTPUT PRICED-INV FILE=C UNPRICED-INV FILE=D, HSP D. 1) COMPARE PRODUCT-NO(A) WITH PRODUCT-NO(B) IF GREATER GO TO OPERATION 10; IF EQUAL GO TO OPERATION 5; OTHERWISE GO TO OPERATION 2. 2) TRANSFER A TO D. 3) WRITE ITEM D. 4) JUMP TO OPERATION 8. Esia 5) TRANSFER A TO C. 6) MOVE UNIT-PRICE(B) TO UNIT-PRICE(C). 7) WRITE ITEM C. 8) READ ITEM A; IF END OF DATA GO TO OPERATION 14. 9) JUMP TO OPERATION 1. 10) READ ITEM B; IF END OF DATA GO TO OPERATION 12. 11) JUMP TO OPERATION 1. 12) SET OPERATION 9 TO GO TO OPERATION 2. 13) JUMP TO OPERATION 2. 14) TEST PRODUCT-NO(B) AGAINST ZZZZZZZZZZZZ; IF EQUAL GO TO OPERATION 16; OTHERWISE GO TO OPERATION 15. 15) REWIND B. 16) CLOSE-OUT FILES C, D. 17) STOP. (END)
FLOW-MATIC kehitystyö 1950 1957 teollisessa käytössä viimeistään vuonna 1958 ensimmäinen kaupalliseen laskentaan käytetty kieli ensimmäinen kieli, jossa mahdollista kuvata tietueiden rakenne erillään ohjelman toiminnallisesta kuvauksesta ei nykyään käytössä perillinen COBOL (1960 ) Esia
Algol procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k); value n, m; array a; integer n, m, i, k; real y; comment The absolute greatest element of the matrix a, of size n by m is transferred to y, and the subscripts of this element to i and k; begin integer p, q; y := 0; i := k := 1; for p:=1 step 1 until n do for q:=1 step 1 until m do if abs(a[p, q]) > y then begin y := abs(a[p, q]); i := p; k := q end end Absmax Esia Lähde: Naur (ed.), Backus, et al.: Revised report on the algorithmic language Algol 60. CACM, 6 (1), 1963
Algol kehitetty 1957 1960 julkaistu 1958 (Algol 58), 1960 (Algol 60), 1963 (Algol 60 revised) myös Algol 68, mutta se kaatui omaan monimutkaisuuteensa tarkoituksena luoda maailmanlaajuisesti käytössä oleva kieli algoritmien kuvaamiseen kontribuutioita: sisäkkäiset lohkot rekursiiviset aliohjelmat arvo- ja nimivälitys eksplisiittiset tyyppimäärittelyt taulukot, joiden koko on tiedossa vasta ajon aikana ei nykyään käytössä perillisiä: C, Pascal, C++, C#, Java,... Esia
LISP apply [f;args] = eval [cons [f; appq [args]]; NIL] appq [m] = [ null [m] T ] NIL; cons [list [QUOTE; car[m]]; appq[cdr [m]]] Esia eval [e;a] = [ atom [e] assoc [e;a] eq [car [e]; QUOTE] cadr [e]; eq [car [e]; ATOM] atom [eval [cadr [e]; a]]; eq [car [e]; EQ] [eval [cadr [e]; a] = eval [caddr [e]; a]] eq [car [e]; COND] evcon [cdr [e]; a] eq [car [e]; CAR] car [eval [cadr [e]; a]] eq [car [e]; CDR] cdr [eval [cadr [e]; a]] eq [car [e]; CONS] cons [eval [cadr [e]; a]] atom [car [e]] eval [cons [assoc [car [e]; a]; evlis [cdr [e],a ]]; a]; eq [caar [e]; LABEL] eval [cons [caddar [e]; cdr [e]]; cons [list [cadar [e]; car [e]; a]]]; eq [caar [e]; LAMBDA] eval [caddar [e]; append [pair [cadar [e]; evlis [cdr [e]; a]; a]]] ] evcon [e;a] = [ eval [caar [e]; a] eval [cadar [e]; a] T evcon [cdr [e]; a] ] evlis [m;a] = [ null[m] NIL; T cons [eval [car [m]; a]; evlis [cdr [m]; a]]] ] John McCarthy: Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I. Communications of the ACM 3 (4), 1960.
LISP kehitetty 1956 1960 julkistus 1960 John McCarthyn tekoälytutkimusta varten kehittämä kieli kontribuutioita: rekursiiviset aliohjelmat ohjelma on dataa eval-funktio muistinsiivous (roskienkeruu) edelleen käytössä merkittävästi muuttuneena perillisiä: Scheme, ML, Haskell, F# Esia
SIMULA class point (x,y); real x, y; begin ref (point) procedure plus (P); ref (point) P; plus :- new point (x+p.x, y.p.y); end point; Esia point class polar; begin real r, v; ref (polar) procedure plus (P); ref (point) P; plus :- new polar (x+p.x, y+p.y); r := sqrt (x 2+y 2); v := arctg (x,y); end polar; Ole-Johan Dahl & Bjørn Myhrhaug & Kristen Nygaard: Common Base Language. Authorized by SIMULA Standards Group as the Common Base from May 19th 1970. Norwegian Computing Center S-22, 1970. Page 23.
SIMULA 1961 1967 julkaisut 1964 (SIMULA I) ja 1967 (SIMULA 67) Kristen Nygaard ja Ole-Johan Dahl kehittivät Simulan diskreettien simulaatioiden ohjelmointia varten pohjakielenä Algol 60 kontribuutioita (SIMULA 67): luokat perintä virtuaalimetodit perillisiä kaikki oliokielet, mutta erityisesti C++ Esia
In the spring of 1967 a new employee at the NCC in a very shocked voice told the switchboard operator: "Two men are fighting violently in front of the blackboard in the upstairs corridor. What shall we do?" The operator came out of her office, listened for a few seconds and then said: "Relax, it s only Dahl and Nygaard discussing SIMULA". The story is true. Esia Kristen Nygaard & Ole-Johan Dahl: The development of the SIMULA languages. In History of Progamming Languages, Academic Press, 1981, p. 476.
PROLOG $ cat foo.pl suoralinja(mattilanniemi,keskusta,5). suoralinja(keltinmaki,keskusta,27). suoralinja(kortepohja,keskusta,18). suoralinja(keskusta,x,y) :- suoralinja(x,keskusta,y). Esia paasee(x,y,[z]) :- suoralinja(x,y,z). paasee(x,y,[z1 Z2]) :- suoralinja(x,z,z1), paasee(z,y,z2). $ gprolog --entry-goal [foo] GNU Prolog 1.3.0 By Daniel Diaz Copyright (C) 1999-2007 Daniel Diaz compiling foo.pl for byte code... foo.pl compiled, 8 lines read - 1362 bytes written, 29 ms?- paasee(kortepohja,mattilanniemi,x). X = [18,5]? yes?-
PROLOG kehitys 1971 1973 käytössä 1973 alkaen kieli luonnollisen kielen käsittelyyn taustalla formaali logiikka ja Robinsonin resoluutioperiaate (1965) lähtökohtana ei ollut mikään olemassa ollut ohjelmointikieli kontribuutio: ohjelmointikieli voi olla radikaalisti erilainen edelleen käytössä Esia
Smalltalk linecount "Answer the number of lines represented by the receiver, where every cr adds one line. 5/10/96 sw" Esia cr count cr := Character cr. count := 1 min: self size.. 1 to: self size do: [:i (self at: i) = cr iftrue: [count := count + 1]]. ^ count Squeak v. 4.0, String-luokan metodi linecount
Smalltalk kehitys 1971 1980 julkaisu 1980 keskeisimmät edeltäjät LISP ja SIMULA ensimmäinen paradimaattinen oliokieli (yhtenä) tarkoituksena kieli, jolla lapsetkin voivat ohjelmoida edelleen käytössä Esia
Sisällys Esia Esia
C, C++, Java, C# edeltäjiä: CPL (1963), BCPL (1966), B (1969) muilla kuin C:llä lisäksi SIMULA kehitys alkanut: C 1971, C++ 1979, Java 1991, C# 199x julkaisut: C 1978, C++ 1982, Java 1996, C# 2000 Esia
BASIC kehitettiin 1964 suunniteltu opiskelijoiden (muut kuin luonnontieteet) käyttöön pohjana FORTRAN ja ALGOL, mutta yksinkertaistaen merkittävästi muuttunut nykyversioissa (Visual Basic ym.) Esia
Perl kehitys alkoi 1986 1 julkaisu 1987 alun perin tekstuaalisessa muodossa esitetyn datan raportointiin taustalla C, awk, sed Esia 1 Andrew Leonard: The Joy of Perl. Salon (technology feature) 13.10.1998 http://www.salon.com/21st/feature/1998/10/cov_13feature2.html
Python kehitys alkoi 1989 2 julkaistu 1991 alkuaan Amoeba-käyttöjärjestelmän apuohjelmaohjelmointiin taustalla ABC ja sen kautta ALGOL 68 Esia 2 Guido van Rossum: Personal History - part 1, CWI. The History of Python 20.1.2009. http://python-history.blogspot.com/2009/01/personal-history-part-1-cwi.html
Ruby kehitys alkoi 1993 3 julkaisu 1995 tarkoituksena olla Pythonia ja Perliä parempi olioskriptikieli Esia 3 Bruce Stewart: An Interview with the Creator of Ruby. O Reilly Linux devcenter 29.11.2001. http://linuxdevcenter.com/pub/a/linux/2001/11/29/ruby.html
PHP kehitys alkaa 1995 (PHP/FI), 1997 (PHP 3.0) julkaisu 1995 (PHP/FI), 1998 (PHP 3.0) alkujaan WWW-sivunrakennuskieli, joka kasvanut orgaanisesti Esia
O Caml, Haskell, F# taustalla LISP, ISWIM (1966), SASL (1972), ML (1973), FP (1977) innokkaat: O Caml (1996), F# (2002) taustalla lisäksi Standard ML eli SML (1990) laiska: Haskell (1987 1990) taustalla lisäksi Orwell (1984), Miranda (1985) funktiokieliä Esia
Sisällys Esia Esia
Konrad Zuse (1910-1995) saksalainen rakensi varhaisia tietokoneita: Z1 (1936), Z2 (1939), Z3 (1941), Z4 (1942 1950) suunnitteli Plankalkül-kielen sotien jälkeen toimi tietokonealan yrittäjänä Esia
John Backus (1924 2007) amerikkalainen johti IBM:n FORTRAN-projektia, oli FORTRANin pääsuunnittelija osallistui ALGOL-kehitystyöhön loi kielioppien BNF-notaation (Backus Naur Form) piti Turing-palkinnon vastaanottopuheenaan palopuheen perinteistä ohjelmointityyliä vastaan ja esitteli FP-kielen Esia
Grace Hopper (1906 1992) FLOW-MATICin pääkehittäjä sanotaan luoneen sanan bug tietokonemerkityksen myöhemmin Yhdysvaltain ensimmäinen kenraalikuntaan ylennetty nainen (commodore / lippueamiraali) vastoin yleistä luuloa Hopper ei osallistunut COBOLin määrittelyyn Esia
Peter Naur (1928 ) tanskalainen osallistui ALGOLin kehitykseen oli ALGOL 60 -kielen alkuperäisen määrittelydokumentin toimittaja popularisoi Backusin luoman BNF-notaation Esia
John McCarthy (1927 ) Esia amerikkalainen popularisoi termin artificial intelligence loi LISP-kielen
Niklaus Wirth (1934 ) sveitsiläinen osallistui ALGOL 68:n kehitykseen ja jätti kielestä eriävän mielipiteen kehitti kielet Euler (1966) ALGOL W (1968) Pascal (1970) Modula (1977) Modula 2 (1979) Oberon (1986) Oberon 2 (1991) Esia
Ole-Johan Dahl (1931 2002) Esia norjalainen kehitti SIMULAn yhdessä Kristen Nygaardin kanssa
Kristen Nygaard (1926 2002) Esia norjalainen kehitti SIMULAn yhdsessä Ole-Johan Dahlin kanssa osallistui myös BETAn kehitykseen
Alan Kay (1940 ) amerikkalainen johti henkilökohtaisen tietokoneen tutkimusprojektia Xeroxin Paolo Alton tutkimuskeskuksessa (PARC) loi Smalltalk-kielen loi object orientation -termin Esia