815338A Ohjelmointikielten periaatteet

Samankaltaiset tiedostot
Ohjelmointikielten kehityshistoriaa

812341A Olio-ohjelmointi, I Johdanto

1. Olio-ohjelmointi 1.1

812347A Olio-ohjelmointi, 2015 syksy 2. vsk. II Johdanto olio-ohjelmointiin

Johdanto Meta Kielten jaotteluja Historia. Aloitusluento. TIES542 Ohjelmointikielten periaatteet, kevät Antti-Juhani Kaijanaho

Olio-ohjelmointi Johdanto olio-ohjelmointiin

Johdatus ohjelmointiin

815338A Ohjelmointikielten periaatteet

815338A Ohjelmointikielten periaatteet

Ruby. Tampere University of Technology Department of Pervasive Computing TIE Principles of Programming Languages

Maarit Harsu. O h j e l m o i n t i k i e l e t Periaatteet, käsitteet, valintaperusteet

Varhaiset oliokielet Modula, CLU ja Smalltalk. T : Seminar on the History of Programming Languages Kari Koskinen Otaniemi 29.9.

TIE542 Ohjelmointikielten periaatteet, syksy Antti-Juhani Kaijanaho. 6. syyskuuta 2010

Common Lisp Object System

TIEA255 Tietotekniikan teemaseminaari ohjelmointikielet ja kehitysalustat. Antti-Juhani Kaijanaho. 16. helmikuuta 2011

Prolog kielenä Periaatteet Yhteenveto. Prolog. Toni ja Laura Fadjukoff. 9. joulukuuta 2010

Johdantoa ohjelmointikielten periaatteisiin

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Tietojenkäsittelyn historiaa

4. Lausekielinen ohjelmointi 4.1

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Soveltuvuustutkimus Lifebelt-ohjelman ideologian käytettävyydestä olioorientoituneeseen

.NET ajoympäristö. Juha Järvensivu 2007

PERL. TIE Principles of Programming Languages. Ryhmä 4: Joonas Lång & Jasmin Laitamäki

ELM GROUP 04. Teemu Laakso Henrik Talarmo

Sisällys. JAVA-OHJELMOINTI Osa 1: Ohjelmoinnin perusteita. Ohjelmoinnin kehityssuuntia. Ohjelmointi luvuilla. Ohjelmointi luvuilla

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

Ohjelmointikielien kehittyminen

OHJ-1010 Tietotekniikan perusteet 4 op Syksy 2012

Ohjelmoinnin peruskurssien laaja oppimäärä

.NET ja C# Virtuaalikone. Common Language Infrastructure (CLI) Periaate. Etuja. Haittoja. Mikä on CLI. CLI standardin merkitys (CLS, Ecma)

Tällä kurssilla tarkastellaan ohjelmointikieliä. Lienee tarpeen yrittää rajata, mitä

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

ADA. Ohjelmointikieli. Ryhmä 5 Henna Olli, Päivi Hietanen

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE Principles of Programming Languages CEYLON

TIETOKANNAT: MYSQL & POSTGRESQL Seminaarityö

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

815338A Ohjelmointikielten periaatteet

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmointikielten periaatteiden taustaa

1. Ohjelmoinnin peruskäsitteet ja -elementit

TIE Principles of Programming Languages. Seminaariesityksen essee. Ryhmä 18: Heidi Vulli, Joni Heikkilä

ELEC-C7110 Informaatioteknologian perusteet

Ohjelmointi Linuxissa. Sisällysluettelo. 1. Mitä tarvitaan sovellusten tuottamiseen? Tehnyt: Antti Martikainen ( )

The OWL-S are not what they seem

Koka. Ryhmä 11. Juuso Tapaninen, Akseli Karvinen. 1. Taustoja 2. Kielen filosofia ja paradigmat 3. Kielen syntaksia ja vertailua JavaScriptiin Lähteet

Ohjelmistojen varhaisesta kehityksestä Tommi Kärkkäinen (Ceruzzi ss )

815338A Ohjelmointikielten periaatteet

ITKA203 Käyttöjärjestelmät, kesä Kesäkurssi Opettaja: Paavo Nieminen

815338A Ohjelmointikielten periaatteet

D-OHJELMOINTIKIELI. AA-kerho, 33. Antti Uusimäki. Arto Savolainen

WWW-ohjelmoinnin kokonaisuus. WWW-OHJELMOINTI 1 Merkkauskielet. Merkkauskielten idea. Merkkauskielet (markup languages) Merkkauskielten merkitys

JOHDATUS OHJELMOINTIIN

Ohjelmointikielen määritteleminen (tai edes tyhjentävä luonnehtiminen) on todella vaikeaa. Voisi yrittää vaikka näin:

4. Lausekielinen ohjelmointi 4.1

C++ Kuva 1-1. C- ja C++ kielien perustana olevat kielet.

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

Teollisuusautomaation standardit Osio 9

Tietojenkäsittelytieteen esittely Tietojenkäsittelytieteen historiaa Teemu Kerola. Tietokone. Kutomakone. Laskennan perusidea

Kuisma Joentakanen PYGAME-PELIOHJELMOINTI

Ohjelmoinnin peruskurssien laaja oppimäärä

Rinnakkaisuus. parallel tietokoneissa rinnakkaisia laskentayksiköitä concurrent asioita tapahtuu yhtaikaa. TTY Ohjelmistotekniikka

Linux. 00 Keskeiset piirteet. Unix ja Linux Helsingin ammattikorkeakoulu Stadia Vesa Ollikainen (muokannut M.Mäki-Uuro) Kysymyksiä

JS-kehitys - yleiskuvaus. TIEA255 - Juho Vepsäläinen

Laiteläheinen C-kieli, yleistä

Lisää pysähtymisaiheisia ongelmia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Ohjelmointikielten periaatteet. Antti-Juhani Kaijanaho

Ohjelmointikielten periaatteet. Antti-Juhani Kaijanaho

C-ohjelmoinnin peruskurssi. Pasi Sarolahti

TIEA341 Funktio-ohjelmointi 1, kevät 2008

Käyttöjärjestelmien historia. Joni Herttuainen Henri Jantunen Markus Maijanen Timo Saksholm Johanna Tjäder Eetu Turunen

Clojure, funktionaalinen Lisp murre

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

TIE Ohjelmistojen suunnittelu. Luento 8..9: moniperintä

Pythonin alkeet Syksy 2010 Pythonin perusteet: Ohjelmointi, skriptaus ja Python

Luento 1 Tietokonejärjestelmän rakenne

11/20: Konepelti auki

Käännös, linkitys ja lataus

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Haskell ohjelmointikielen tyyppijärjestelmä

Kertausluento luennoista 1-3 1

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

Ohjelmoinnin peruskurssien laaja oppimäärä

OHJELMOINTIKIELTEN PERIAATTEET ANTTI-JUHANI KAIJANAHO

Tähtitieteen käytännön menetelmiä Kevät 2009

OHJELMOINTIA MONIPUOLISESTI MATEMATIIKAN OPETUKSESSA LUMA-PÄIVÄT, TAMPERE

TERO LAHTINEN FUNKTIONAALISTEN JA OLIO-IMPERATIIVISTEN OHJELMISTOKOMPONENTTIEN YHDISTÄMINEN. Diplomityö

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Suomalaiset ohjelmointikielet

Olio-ohjelmoinnin toteuttaminen Fortran 90 -kielellä

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi

Tietokoneen toiminta, Kevät Copyright Teemu Kerola Järjestelmän eri tasot Laitteiston nopeus

815338A Ohjelmointikielten periaatteet Harjoitus 4 vastaukset

Johdanto. 1. Mikä on ohjelmointikieli?

Transkriptio:

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