815338A Ohjelmointikielten periaatteet 2015-2016 II Ohjelmointikielten kehityshistoriaa
Sisältö 1. Ohjelmointikielten sukupolvet 2. Pääohjelmointikielten kehitys 815338A Ohjelmointikielten periaatteet, Kielten historiaa 2
II.1 Ohjelmointikielten sukupolvet Yleisesti erotetaan viisi sukupolvea Jakoperusteet epäselvät: vain 1. ja 2. sukupolvi lähes kaikissa jaotteluissa sama Ensimmäinen sukupolvi: Puhtaat konekielet Binäärimuotoisia konekielisiä komentoja Ohjelmointi äärimmäisen hankalaa ja virhealtista Toinen sukupolvi: Symboliset konekielet (assembler languages) 1950-luvun alkupuolella Yhtä konekielistä käskyä vastasi tekstisymboli Käännettiin konekieleksi ohjelmallisesti 815338A Ohjelmointikielten periaatteet, Kielten historiaa 3
II.1 Ohjelmointikielten sukupolvet (2) Kolmas sukupolvi: nykyiset korkean tason kielet Yleensä myös oliokielet lasketaan 3. sukupolveen Tarvitaan kääntäjä tai tulkki Neljäs sukupolvi: verkkoympäristöjen kielet ja tietokantojen kyselykielet Yleensä tehokkaita kirjoitettaessa lyhyitä ja yksinkertaisia ohjelmia Syntaksi lähempänä luonnollista kieltä Viides sukupolvi: Tekoälykielet Pääasiassa vielä kehitteillä Jotkut laskevat Prologin mukaan 815338A Ohjelmointikielten periaatteet, Kielten historiaa 4
II.2 Pääohjelmointikielten kehitys II.2.1 Ohjelmointikielten esihistoriaa *x++=*y++ Charles Babbage (1830- ja 1840-luvuilla) ohjelmoitava laskukone (Analytical Engine) Ohjelmoijana kreivitär Ada Lovelace Ensimmäinen suunniteltu ohjelmointikieli: Plankalkül Konrad Zuse suunnitteli 1936 1945 elektronisia laskukoneita Sodan jälkeen Zuse suunnitteli ohjelmointikieltä laskutoimitusten suorittamiseen -> Plankalkül käsikirjoituksessa 1945, julkaistiin vasta 1972 Jäi implementoimatta 815338A Ohjelmointikielten periaatteet, Kielten historiaa 5
II.2.1 Ohjelmointikielten esihistoriaa (2) Ensimmäiset nykymielessä ohjelmoitavat koneet John von Neumannin ideoimana 1940- luvun loppupuolella ENIAC, Philadelphian yliopistossa 1945 18000 elektroniputkesta koostuva ohjelmoitava laskin von Neumannin ideat 1945: 1. Loogisena perustana Turingin kone 2. Konekieliset ohjelmat talletettiin muistiin ja keskusyksikkö suoritti 3. Datalla ja ohjelmalla sama esitysmuoto -> voidaan tuottaa automaattisesti ohjelmia 815338A Ohjelmointikielten periaatteet, Kielten historiaa 6
II.2.2 1950-luku. Ensimmäiset ohjelmointikielet Ensimmäinen korkean tason kieli FORTRAN (FORmula TRANslator) John Backuksen työryhmä IBM:llä 1954-1957 Osoitti korkean tason ohjelmointikielet mahdolliseksi käytännössä -> Merkitys kielten kehityksessä suuri Käytetään edelleen (muunneltuna) Alkuperäisen FORTRANin ominaisuuksia: Tulostuksen ja syötön muotoilu, Looginen IF -lause, Toistorakenne laskurimuuttujan suhteen Tietotyypin määrittely puuttui Kääntäjä erittäin tehokas (vei suuren osan suunnitteluajasta) 815338A Ohjelmointikielten periaatteet, Kielten historiaa 7
II.2.2 1950-luku. Ensimmäiset ohjelmointikielet (2) Cobol (COmmon Business Oriented Language) Yleisin kieli maailmassa (koodirivien perusteella) Kaupallisiin sovelluksiin Ei juuri vaikutusta kielten kehitykseen LISP - Ensimmäinen funktionaalinen kieli John McCarthy ja Marvin Minsky: 1958 alkaen tekoälyprojekti -> LISP (LISt Processing language) Tietorakenteet atomeja ja listoja Suuri merkitys myöhempiin kieliin, esim. roskien keruu ensimmäisenä 815338A Ohjelmointikielten periaatteet, Kielten historiaa 8
II.2.2 1950-luku. Ensimmäiset ohjelmointikielet (3) ALGOL60 Vaikuttanut suuresti kielten kehitykseen ALGOL58 FOTRANin yleistys ALGOL58:aan lisättiin 1.Lohkorakenne -> ohjelmoijien käyttöön näkyvyysalue 2.Uudistettu parametrien välitys aliohjelmille 3.Aliohjelmien rekursiivisuus 4.Pinodynaamisten taulukoiden käyttö Standardi algoritmien esitysmuoto 1990-luvulle ACM:n virallinen muoto Euroopassa melko yleinen, USA:ssa harvinainen 815338A Ohjelmointikielten periaatteet, Kielten historiaa 9
II.2.3 1960-luku. Räjähdysmäinen kehitys Kehitettiin satoja uusia kieliä Esimerkiksi: AESOP, BASEBALL, COGO, DEACON, EOL, FLAP, GRAF, HAL/S, ICES, JOSS, KLS, LOLITA, MADCAP, NELIAC, OPS, PAT, QUIKTRAN, RECOL, STRESS, TREET, UNICODE, VITAL, WATFOR ja XPOP 815338A Ohjelmointikielten periaatteet, Kielten historiaa 10
II.2.3.1 1960-luku. PL/I Yritys kehittää yleiskieli (IBM 1964) Ensimmäisenä formaalisti määritelty semantiikka Uusia piirteitä, joita ei muissa kielissä, mm. 1.Mahdollisuus rinnakkaisiin toimintoihin 2.Poikkeusten käsittely 3.Osoitintietotyyppi Kielestä tuli erittäin laaja ja vaikeasti hallittava Käytettiin 1960- ja 1970-luvuilla varsin laajasti Vielä käytössä IBM-ympäristössä 815338A Ohjelmointikielten periaatteet, Kielten historiaa 11
II.2.3.2 1960-luku. BASIC Beginner s All-purpose Symbolic Instruction Code Ollut yleisimpiä mikrotietokoneiden kieliä Kehitettiin Dartmouth Collegessa 1963 1964 työkaluksi humanististen alojen opiskelijoille -> Kielestä tehtiin varsin yksinkertainen Ei lohkorakennetta -> ohjelmat hankalasti strukturoitavia Ensimmäinen yleisesti käytetty menetelmä hoitaa etäpääteyhteys keskustietokoneeseen Useita versioita 815338A Ohjelmointikielten periaatteet, Kielten historiaa 12
II.2.3.3 1960-luku. Simula Ensimmäinen oliokieli, tarkoitettu simulointiin Ensimmäinen versio: 1962 norjalaiset Kristen Nygaard ja Ole-Johan Dahl Tunnetuin versio Simula 67 Vaikutteita ALGOL60:stä Ensimmäinen kieli rinnakkaiseen ohjelmointiin -> Tarve olioille -> Luokkakäsite Periytyminen toteutettu Roskien keruu Ei kovin yleisesti käytössä, oliomallin hyödyllisyyttä ei tunnistettu 815338A Ohjelmointikielten periaatteet, Kielten historiaa 13
II.2.4. 1970-luku. Rakenteinen ohjelmointi Vastareaktio 1960-luvun sekamelskalle *x++=*y++ Avainsanoja yksinkertaisuus, johdonmukaisuus ja rakenteellisuus -> rakenteinen ohjelmointi (structured programming) Useat 1970-luvun kielet suunniteltiin nimenomaan rakenteiseen ohjelmointiin 815338A Ohjelmointikielten periaatteet, Kielten historiaa 14
II.2.4.1 1970-luku. Pascal Niklaus Wirth 1971: suunnitteluperiaatteena yksinkertaisuus Tarkoituksena osoittaa, että yksinkertainenkin kieli voi olla ilmaisuvoimainen Tietotyyppijärjestelmä: muutama alkeistietotyyppi ja mahdollisuus määritellä uusia, rakenteisia tietotyyppejä Yleisin ohjelmoinnin opetuskieli 1975 1995 Ei merkittävää suosiota ohjelmistokehityksessä Pascalin murteita käytetty Vaikutusta uudempiin kieliin 815338A Ohjelmointikielten periaatteet, Kielten historiaa 15
II.2.4.2 1970-luku. C Dennis Ritchie, Bell Labs n. 1972 Kehitetty järjestelmäohjelmointiin UNIX kirjoitettiin uudestaan C:llä Suosio ainakin osittain tästä syystä Joustava ja tehokkaasti käännettävä Erittäin suosittu -> suuri vaikutus muihin kieliin 815338A Ohjelmointikielten periaatteet, Kielten historiaa 16
II.2.4.3 1970-luku. Prolog Ensimmäinen logiikkakieli 1970-luvun alkupuolella tekoälytutkimuksen piiristä Perusrakenteen suunnittelivat Colmerauer, Roussel ja Kowalski Ensimmäinen Prolog-tulkki implementoitiin Marseillessa vuonna 1972 Käyttää predikaattikalkyyliä esitystapanaan Sovelluskohteet enimmäkseen tekoälysovelluksissa 815338A Ohjelmointikielten periaatteet, Kielten historiaa 17
II.2.4.3 1970-luku. Smalltalk Ensimmäinen moderni oliokieli Alku Alan Kayn ideoista ja kehitystyöstä Xeroxin Palo Alton tutkimuskeskuksessa Vaikutteita LISPistä ja Simulasta Kaikki asiat olioita, oliot kommunikoivat keskenään lähettämällä ja vastaanottamalla viestejä Luokkien perusluokkana Object luokka Myös täydellinen ohjelmointiympäristö Ikkunoihin pohjautuva käyttöliittymä Smalltalkin peruja 815338A Ohjelmointikielten periaatteet, Kielten historiaa 18
II.2.5 1980-luku. Olio-ohjelmointi yleistyy II.2.5.1 C++ 1985 Bjarne Stroustrup Bellin laboratoriossa C with classes Vaikutteita Simula 67:stä ja Smalltalkista Ennen Javaa yleisimmin käytetty oliokieli Pohjautui yleisesti käytettyyn C-kieleen Saatavissa tehokkaita ja edullisia kääntäjiä Peri C-kielen turvattomia piirteitä Laaja ja monimutkainen Suosio silti pysynyt suurena 815338A Ohjelmointikielten periaatteet, Kielten historiaa 19
II.2.5.2 1980-luku. Ada Ensimmäinen vakiintunut versio 1983 1995 versio jossa oliotuki Suunnittelu ohjelmointikielten historian laajin ja kallein suunnitteluprojekti Perustui eri vaihtoehtojen kilpailuttamiseen Syntaksi perustuu Pascaliin Pakkaukset, joiden avulla voidaan kapseloida datatyyppejä ja aliohjelmia Monipuolinen poikkeusten käsittely Geneerinen ohjelmointi Rinnakkainen ohjelmointi 815338A Ohjelmointikielten periaatteet, Kielten historiaa 20
II.2.5.2 1980-luku. Muita kieliä Eiffel Puhdas olio-ohjelmointikieli, suunnitellut ranskalainen Bertrand Meyer Suppeampi ja yksinkertaisempi kuin C++ Skriptikieliä kehittyi, mm. Perl Suunnittelija Larry Wall 1987 Sopii hyvin CGI-ohjelmointiin joten yleistyi WWW:n myötä 815338A Ohjelmointikielten periaatteet, Kielten historiaa 21
II.2.6 1990-luku. WWW-ohjelmointi II.2.6.1 Java Alunperin sulautettujen järjestelmien ohjelmointikieleksi Tunnetuksi 1990-luvun puolivälissä Internetin käytön yleistyessä Pääsuunnittelija James Gosling Pääkriteerinä luotettavuus Alunperin harkitut C ja C++ hylättiin ja päätettiin kehittää kokonaan uusi kieli Syntaksi ja monet ominaisuudet C++:an kaltaiset Ei erityisen omaperäinen Suosio tekee merkittäväksi 815338A Ohjelmointikielten periaatteet, Kielten historiaa 22
II.2.6.1 1990-luku. Java (2) Vertailu: Java vs. C++. Java suunniteltu yksinkertaisemmaksi ja luotettavammaksi: 1. Osoittimista tietotyyppinä luovuttu 2. Moniperintä jätetty pois 3. Operaattorien ylikuormitus jätetty pois 4. Lisätty tuki rinnakkaiselle ohjelmoinnille 5. Lisätty automaattinen roskien keruu 815338A Ohjelmointikielten periaatteet, Kielten historiaa 23
II.2.6.2 1990-luku. Muita oliokieliä Objective-C Kehitetty 1980-luvun puolivälissä (Brad Cox & Tom Love) Alkujaan C-kielen kevyt oliolaajennus Tunnetuksi 1990-luvulla MAC OS X:n natiivina kielenä Delphi Borland (1995) sisältää visuaalisen kehitysympäristön ja ohjelmointikielen Kielenä Pascaliin pohjautuva oliokieli 815338A Ohjelmointikielten periaatteet, Kielten historiaa 24
II.2.6.3 1990-luku. Haskell Ensimmäinen versio 1990 Puhtaasti funktionaalinen kieli Perusrakenne lista Käyttää laiskaa laskentaa Käytössä myös kaupallisissa sovelluksissa 815338A Ohjelmointikielten periaatteet, Kielten historiaa 25
II.2.6.4 1990-luku. Skriptikielet WWW-ohjelmointi edesauttoi kehitystä PHP Rasmus Lerdorff vuonna 1994 Palvelinpuolen skriptikieli JavaScript Brendan Eich Netscapella (aluksi Mocha) Ajetaan tyypillisesti selaimessa 815338A Ohjelmointikielten periaatteet, Kielten historiaa 26
II.2.6.4 1990-luku. Skriptikielet (2) Python Guido van Rossum 1990 Tukee monia ohjelmointiparadigmoja Ruby Yukihiro Matsumoto 1995 Puhdas oliokieli 815338A Ohjelmointikielten periaatteet, Kielten historiaa 27
II 2.7 2000-luku C# Microsoftin.NET-alustan kieli Pohjautuu Javaan ja C++:aan, vaikutteita Delphistä D Oliosuuntautunut yleiskieli käytännön ohjelmointiin Suunniteltu C++:n korvaajaksi 815338A Ohjelmointikielten periaatteet, Kielten historiaa 28