1 Ohjelmointikielten varhaishistoria Esa-Matti Miettinen 14.4.2005.

Slides:



Advertisements
Samankaltaiset esitykset
Tuloksellinen Java-ohjelmointi Luku 3 Luokkien käyttäminen
Advertisements

CAN-VÄYLÄ AUTOISSA.
Tietokannat: MySQL ja PostgreSQL. Yleistä • Relaatiotietokantaohjelmisto, jolla voidaan luoda, ylläpitää ja muuttaa ja hallinnoida tietokantoja • Avoin.
JavaScript (c) Irja & Reino Aarinen, 2007
4. Lausekielinen ohjelmointi
Julkaisukielet ja - tekniikat tMyn1 Julkaisukielet ja -tekniikat •Verkko-ohjelmointi voidaan jakaa kahteen osaan: asiakaspuolen ja palvelinpuolen ohjelmointiin.
Goblin-kurssinhallintajärjestelmäTKK / Automaation tietotekniikan laboratorio Antti Tuomi, Raimo Nikkilä Goblin kurssinhallintajärjestelmä Raimo.
Nämä kalvot on lisensoitu Creative Commons Attribution-ShareAlike 1
2.8.3 Abstraktit tietotyypit
Rakenteinen ohjelmointi
1. Olio-ohjelmointi.
Ohjelma on kokoelma toimintaohjeita annetun tehtävän ______________________. Ohjelmassa on peräkkäisten toimintojen lisäksi yleensä valintaa ja _____________.
Sovellusohjelman suunnittelu & toteutus
C-ohjelmointi, kevät 2006 Taulukot Binääritiedostot Luento
OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT. LUOKKA JAVA ohjelma koostuu luokista LUOKKA sisältää metodeja molemmat sisältävät attribuutteja eli muuttujia.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
OLIO-OHJELMOINTI PERUSTEET PERUSTIETOTYYPIT
Toiston tekeminen Javalla  Mikä toistorakenne on?  while toistorakenne  do-while toistorakenne  for toistorakenne 1.
Ohjelmoinnin tekniikkaa Sisällys for -lause lyhemmin. Vaihtoehtoisia merkintöjä aritmeettisille lauseille. Useiden muuttujien esittely.
TAULUKKO YKSIULOTTEINEN TAULUKKO. TAULUKKO  Taulukon tarkoitus Ohjelmassa tarvitaan paljon samantyyppisiä samaan kohdealueeseen kuuluvia muuttujia Näitä.
Ohjelman perusrakenteet
TIETO JA TIETOKONEOHJELMA TIETOKONEOHJELMA KÄSITTELEE TIETOJA TIETOJA VOIDAAN KÄSITELLÄ OHJELMASSA VAIN SALLITUILLA MENETELMILLÄ.
Pseudokoodi Tietokoneohjelmien perusidea:
13. Hyvä ohjelmointitapa (osa 1)
© Jukka Harju, Jukka Juslin
1 Kertaus koetta varten oleellisista asioista Jukka Juslin.
Ohjelmointi.
GNU-ohjelmointityökalut Jussi Raunio TI09OHJ
ict1td002 - Copyright Raine Kauppinen 1 Alkuarvot ja tyyppimuunnokset (1/5)  Aiemmin olemme jo antaneet muuttujille alkuarvoja, esimerkiksi: int.
Visual Basic -ohjelmointi
String-vertailusta ja Scannerin käytöstä (1/2)
Tietokoneohjelman suoritus opintojakso Olioajattelu ja –ohjelmointi, osa I Hans Nieminen Syksy 2013.
Metodit – Arvotyyppi Ellei metodi palauta arvoa, sen arvotyyppi on void Tällöin ”return;”-lauseke ei ole metodissa pakollinen, vaikka sen käyttö on sallittua.
Algoritmi-harjoituksia…
Matematiikkaa tietokoneella mikko opettaa Sagen avulla matematiikkaa ja ohjelmointia
XNA peliohjelmointi. XNA Perustuu Microsoftin kehittämään.NET- arkkitehtuuriin ja C#-kieleen. XNA:lla tehdyt pelit toimivat Windows ja XBOX360-alustoilla.
1. viikkokooste ja olio-ohjelmointi
4. Attribuutit 4.1. Sisällys Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2.
@ Leena Lahtinen OHJELMAN OSITTAMINEN LUOKKA ATTRIBUUTIT METODIT.
Hyvä ohjelmointitapa (osa 2) Yleistä Lisää hyviä ohjelmointikäytäntöjä: − Jaa pitkä koodi osiin. − Käytä attribuutteja säästeliäästi.
Ohjelmointitaito (ict1td002, 12 op) Kevät 2008 Raine Kauppinen
@ Leena Lahtinen TIETOKONEOHJELMAN RAKENNE OHJELMALLA ON KAKSI OSAA:  MÄÄRITYSOSA TIETOJEN KUVAUKSIA VARTEN  SUORITUSOSA TIETOJEN KÄSITTELYÄ.
Toteutus. Ohjelmointikielen valinta Käytetään samaa kuin muutkin Työkalujen laatu Usein asiakas määrää Yleensä valittu jo ennen toteutusta Osaaminen vs.
Aakkosnumeerinen tieto Tarkoittaa kaikkea muuta tietoa paitsi laskentaan tarkoitettuja lukuja Muuttujan tietosisältö on siis tekstitietoa Muuttujan tietotyypiksi.
Visual Basic -ohjelmointi
Antti-Jussi Lakanen Nuorten peliohjelmointi 2009 / Jyväskylän yliopisto.
Tiedon vieminen funktiolle tMyn1 Tiedon vieminen funktiolle, parametrit Argumentin vieminen funktiolle voidaan toteuttaa kahdella menetelmällä: –Pass-by-Value.
Javascript 2: Ohjelmointikielen ominaisuudet Jaana Holvikivi Metropolia.
Ohjelmointi 1. toinen luento1 Taulukot n Kiinteät taulukot: alkioiden määrä tiedetään Dim intCount(12) As Integer 0 indeksit saavat arvoja 0-12 (Option.
15. Ohjelmoinnin tekniikkaa
2. Lukujonot -äärellinen tai ääretön 2.1. Lukujonon käsiteLuettelona: a 1, a 2, a 3,…,a n,…, jolloin a n on jonon n:s termi Lukujonon merkintätapoja Jono.
Ohjausrakenteet Määräävät ohjelmakoodin suoritusjärjestyksen Ehtolause if – else on muotoa if (lauseke) lause1 else lause2 Jos lauseke on tosi, niin suoritetaan.
Ohjelmassa tänään Ohjelmointimallit Pseudokieli Modulaarisuus.
Muuttujan osoite int a=1; 0xbfffea64 /* tulostetaan a:n osoite*/ printf(“%p\n”, &a); 0xbfffea68 /* tulostetaan a:n osoite + 1*/ printf(“%p\n”, &a+1); /*
.NET ohjelmointi C#-kielellä RäsSe, lokakuu 2004.
String-vertailusta ja Scannerin käytöstä (1/2)
1. Olio-ohjelmointi.
7. Hyvä ohjelmointitapa..
3. Luokat, oliot ja metodit Java-kielessä (Lausekielinen ohjelmointi I ja II –kursseilla opitun kertausta.)
Ohjelmien suunnittelu
2. Lukujonot 2.1. Lukujonon käsite -äärellinen tai ääretön Luettelona:
16. Ohjelmoinnin tekniikkaa
Toistorakenteet Toistorakenteissa on usein tarve esim. toistaa jotakin lausetta tai lohkoa n kertaa, toistaa jotakin lausetta tai lohkoa kunnes jokin muuttuja.
7. Hyvä ohjelmointitapa..
7. Näytölle tulostaminen
Kontrollirakenteet laajemmin
3. Attribuutit.
4. Luokan testaus ja käyttö olion kautta
1. Olio-ohjelmointi.
16. Ohjelmoinnin tekniikkaa
Esityksen transkriptio:

1 Ohjelmointikielten varhaishistoria Esa-Matti Miettinen

2 Johdanto Ohjelmoinnin historian voi katsoa lähteneen liikkeelle jo 1800-luvun puolivälistä Babbagen kehittäessä ensimmäisiä tietokoneen piirustuksia Tässä keskitytään korkean tason kielten syntyyn ja 1950-luvuilla Koko ajanjakson käsittelyn sijaan tarkastellaan muutamia tärkeitä merkkipaaluja

3 Ohjelmointi ja 1950-luvuilla Ohjelmia kirjoitettiin pääasiassa konekielillä Tietokoneet olivat hitaita, kalliita ja vaikeakäyttöisiä luvun alkupuolella alkoi olla tarjolla alkeellisia ja hitaita tulkattavia kieliä, joihin viitattiin termillä automaattinen koodaus Ohjelmointikielten kehittäjien yhteydet toisiinsa olivat huonot, ja keksintöjä tehtiin usein toisista tietämättä

4 Käsiteltäviä kieliä Plankalkül, ensimmäinen korkean tason ohjelmointikieli Short Code, ensimmäinen toteutettu korkean tason kieli Ensimmäiset kääntäjät Fortran, korkean tason kielten läpimurron aloittanut kieli

5 Ensimmäinen korkean tason ohjelmointikieli Milloin oikein tehtiin ensimmäinen oikea korkean tason kieli? Miltä sen koodi mahtoi näyttää?

6 Plankalkül Konrad Zuse suunnitteli korkean tason ohjelmointikielen jo 1940-luvun puolivälissä Zuse kehitti myös ensimmäisiä tietokoneita, joista tosin melkein kaikki tuhoutuivat liittoutuneiden pommituksissa Plankalkül julkaistiin vasta vuonna 1972 ja toteutettiin vuonna 2000, joten sen vaikutus toteutettuihin kieliin jäi pieneksi Konrad Zuse ( )

7 Plankalkülin ominaisuuksia Rakenteiset tietotyypit For-lausetta muistuttava toistolause Indeksointi Monipuoliset listojen käsittelyoperaatiot Invarianttien tarkistus

8 Esimerkkialgoritmi Käytetään kielen piirteiden havainnollistamiseen Knuthin ja Pardon TPK-algoritmia Algoritmi ei tee mitään oikeasti hyödyllistä, mutta esittelee kielen ominaisuuksia hyvin Algoritmi saa syötteenään joukon lukuja, ja tulostaa (tai palauttaa) erään funktion arvot syöteluvuilla käänteisessä järjestyksessä. Jos funktion arvo syötteellä on yli 400, tulostetaankin "liian iso"

9 TPK-algoritmi Javalla

10...ja sama Plankalkülilla Määritellään kokonaislukutyyppinen muuttuja. Määritellään proseduurin 1 syötteiden ja palautusarvon tyyppi. Lasketaan funktion arvo annetulla parametrilla. Määritellään proseduurin 2 syötteiden ja paluuarvon tyyppi. Tästä alkaa W2-silmukka, jota toistetaan 11 kertaa. Silmukan alussa (R1(V)) kutsutaan proseduuria 1 parametrina taulukko V. Jos funktion arvo syötteellä V i on suurempi kuin 400, tallennetaan i ja ääretön. Jos funktion arvo syötteellä V i on <= 400, tallennetaan i ja funktion arvo.

11 Plankalkülin tyypeistä Ainoa perustyyppi on yksi bitti Muut tyypit rakennetaan yhdistelemällä muita tyyppejä Näin voidaan luoda esimerkiksi listoja, parilistoja, taulukoita, henkilötunnuksia... Taulukoista saattoi esimerkiksi tehdä vaihtuvanpituisia Periaatteessa kaikkia tyyppejä voitiin yhdistellä vapaasti Valmiiksi määriteltyinä ovat esimerkiksi kokonaisluvut, liukuluvut ja kompleksiluvut

12 Ensimmäinen toteutettu kieli Millainen oli ensimmäinen korkean tason kieli, joka todella toteutettiin?

13 Short Code Myös Eniacia rakentamassa olleen John Mauchlyn suunnittelema Short Code on luultavasti ensimmäinen toteutettu korkean tason kieli William Schmitt teki ensimmäisen toteutuksen Binacilla vuonna 1949 Schmitt ja Albert Tonik kehittivät Univac-toteutuksen loppuvuodesta 1950 John W. Mauchly ( )

14 Short Code (jatkoa) Osasyy kielen tuntemattomuuteen lienee, että tuolloin ohjelmoijan vaivannäköä ei arvostettu aivan samalla tavalla Miksi tietokoneen laskenta-aikaa pitäisi tuhlata johonkin sellaiseen, jonka ohjelmoija voi itsekin tehdä? Short Code-tulkkaus saattoi myös olla jopa viisikymmentä kertaa hitaampaa kuin konekielisten käskyjen suoritus

15 TPK Short Codella 03: Jos y <= 400, siirry kohtaan 1

16 Ensimmäiset kääntäjät Useimmat nykyiset kielet käännetään ennen suoritusta. Milloin näin tehtiin ensimmäisen kerran?

17 Kääntäjät (jatkoa) Ensimmäisen kääntäjän tittelistä on useita kilpailijoita Esiin nostetaan usein Hopperin A-0, A-1 ja A-2, Glennien Autocode ja Laningin ja Zierlerin kieli Voittaja riippuu näkökulmasta

18 Hopperin varhaiset "kääntäjät" Ohjelmointikielten kehitykseen suuresti vaikuttanut Grace Murray Hopper työskenteli vuodesta 1949 Univac- tietokoneita valmistaneessa Eckert-Mauchly Computer Corporationissa EMC:ssä hänen ryhmänsä kehitti varsinkin aluksi lähinnä makrojen käsittelijöitä muistuttavia ohjelmia Grace Murray Hopper (1906 – 1992)

19 Hopperin varhaiset "kääntäjät" (jatkoa) Myöhemmin lähestyttiin jo uutta kieltä ja kääntäjiä sanan nykyisessä merkityksessä Vanha Mark I-tietokone suoritti kolme yhteenlaskua sekunnissa. Univac laski jo lähteestä riippuen tuhansia tai kymmeniä tuhansia laskutoimitusta sekunnissa, joten sen työllistämiseksi ohjelmia piti saada tuotettua nopeammin.

20 Hopperin varhaiset "kääntäjät" (jatkoa) Merriam-Websterin määritelmä sanalle compile: "to bring together from several sources into a single volume or list " Lokakuun 1951 ja toukokuun 1952 välillä valmistunut A-0 oli sanakirjamääritelmän mukainen "compiler", eli kokosi ohjelman liittämällä konekielisen ohjelman merkittyihin kohtiin eräänlaisen makron

21 Hopperin varhaiset "kääntäjät" (jatkoa) Tammikuussa 1953 valmistunut A-1 ja lokakuussa toteutettu A-2 olivat parannettuja versiota "kääntäjästä" Niiden koodia saattoi joutua täydentämään koneen omalla konekielellä Vuonna 1955 A-2 oli jo kehittynyt niin pitkälle, ettei koneen omaa kieltä tarvinnut käyttää lainkaan

22 TPK A-2:lla (vuoden 1953 versio)

23 Hopperin ryhmän myöhempiä tuotoksia Hopperin ryhmä kehitti vuonna 1956 Math- Matic-nimellä (aluksi AT-3) tunnetuksi tulleen lausekielen Math-Matic-kielen kääntäjä tuotti hidasta koodia jo muutenkin hitaalle Univac-tietokoneelle, joten kieli ei noussut kovin merkittävään asemaan Vuonna 1955 toteutettu Flow-Matic-kieli perustui vahvasti englannin kielen käyttöön, ja oli suunniteltu erityisesti liiketoiminnallisten ohjelmien tuottamiseen Flow-Matic (aluksi B-0) vaikutti suuresti Cobol- kielen kehitykseen

24 Autocode Alick Glennie kehitti Royal Armaments Research Establishmentissä työskennellessään Autocode- kielen ja sille kääntäjän vuoden 1950 lopulla Glennie ei koskaan julkaissut kieltä, eikä siitä tullut kovin suosittu Alick Glennie

25 Autocode (jatkoa) Kieli ei ollut kovin alustariippumaton, eikä ratkaissut ongelmia, joita sen kanssa tekemisissä olleet ohjelmoijat pitivät työnsä kannalta vaikeimpina Autocode oli kuitenkin luultavasti ensimmäinen täysiverinen kieli, jolle oli toteutettu sanan nykyistä merkitystä vastaava kääntäjä

26 TPK Autocodella

27 Laning ja Zierler Laning ja Zierler kehittivät noin vuonna 1953 Autocodea korkeammalla abstraktiotasolla toimivan kielen Whirlwind-tietokoneelle Ohjelmia suoritettiin tulkkaamalla kääntäjän tuottamaa välimuotokieltä Kieli oli lähes täysin alustariippumaton, ja suhteellisen helppokäyttöinen

28 TPK-algoritmi Laningin ja Zierlerin kielellä a i =v j CP 1: Jos edellisen lauseen arvo < 0, siirry kohtaan 1. Tällä saadaan aikaan silmukka. Tähän tulevat syötteet F 11 laskee itseisarvon, F 1 neliöjuuren SP 4: Ehdoton hyppykäsky kohtaan 4

29 Korkean tason kielten läpimurto Ihan hyvä. Mutta milloin joku sai kaiken tämän oikein toimimaan? Milloin korkean tason kieliä alettiin käyttämään laajemmassa mitassa?

30 Fortran 1950-luvun lopulla kehitetty Fortran aloitti korkean tason kielten voittokulun Tulkeilla ja kääntäjillä saavutettiin yleensä vain murto-osa taitavan ohjelmoijan kehittämien ohjelmien suorituskyvystä Yleisesti ei uskottu, että voitaisiin kehittää helppokäyttöinen korkean tason kieli, jolla voitaisiin tuottaa tehokkaita konekieliohjelmia John Backus ( )

31 Fortranin tehtävä Fortranin-projektin ensisijaisena tavoitteena oli tuottaa tehokas, ihmisohjelmoijan suorituskykyyn verrannollinen kääntäjä 704 osasi käsitellä liukulukuja, joten liukulukukäsittelyn hitaus ei enää kätkenyt kielten tehottomuutta

32 Fortranin kehitys Aiemmin muun muassa Speedcodingia kehittänyt John Backus ehdotti uuden ohjelmointikielen tuottamista 704-tietokoneelle IBM:llä loppuvuonna 1953 Kehitykseen vaikuttivat myös mm. Harlan Herrick, Irving Ziller ja Ron Nutt Kielen alkuperäinen määrittely oli valmis marraskuussa 1954

33 Otteita vuoden 1954 väliraportista "...FORTRAN should virtually eliminate coding and debuggin..." "...an automatically coded problem... will be executed in about the same time that would be required had [it] been laborously hand coded" "...after an hour course in FORTRAN notation, the average programmer can fully understand... a procedure stated in FORTRAN language..." "... each such [IBM] calculator should have a system similar to FORTRAN..."

34 Fortranin valmistuminen Vuonna 1955 kääntäjän uskottiin valmistuvan puolen vuoden kuluessa Todellisuudessa Fortran julkaistiin bugisena huhtikuussa 1957 Fortran levisi kuitenkin nopeasti Huhtikuussa 1958 tehdyn tutkimuksen mukaan yli puolet 26:n 704-tietokoneen käyttäjistä käytti kieltä suurimmassa osassa ohjelmiaan, ja saman vuoden syksyllä yli puolet 66:n koneen konekielikäskyistä tuotettiin Fortranilla

35 TPK-algoritmi Fortranilla

36 Yhteenveto Ohjelmoinnin alkuaikoina ohjelmointi tarkoitti useimmiten hankalaa koodausta konekielillä Korkean tason kielten kehitykselle antoi alkusysäyksen yritys saada käyttöön konekielistä puuttuvia ominaisuuksia ja helpottaa ohjelmointia Tietokoneiden kehitys vauhditti myös ohjelmointikielten kehitystä tekemällä ohjelmoijasta pullonkaulan Tiedonkulun ongelmat johtivat useiden keksintöjen tekemiseen uudelleen

37 Yhteenveto (jatkoa) Ensimmäinen korkean tason ohjelmointikieli Plankalkül sisälsi monia edistyksellisiä piirteitä, kuten erittäin kehittyneen tyyppijärjestelmän. Kielestä ei kuitenkaan tullut aikanaan tunnettua. Ensimmäinen toteutettu korkean tason kieli oli luultavasti Short Code. Se kärsi osin saman kohtalon. Ensimmäisen kääntäjän tittelistä kilpailevat ainakin Hopperin varhaiset "kääntäjät", Glennien Autocode ja Laningin ja Zierlerin kieli

38 Yhteenveto (jatkoa) Vasta Fortran tarjosi mahdollisuuden helpohkon ohjelmoinnin ja tehokkaiden ohjelmien välillä, ja aloitti siten korkean tason ohjelmointikielten läpimurron

39 Aikajana Lorenz-salaus murtuu 1941 Plankalkül n Short Code luvun alussa TKK:lla rakennetaan analogiatietokonetta Univac 1951 A Autocode 1952 Laningin ja Zierlerin kieli 1952 A ESKOa rakennetaan Tekoäly-nimitys keksitään Darthmoutissa 1956 Fortran n Nasa perustetaan 1958 Relaatiomalli 1969 Ensimmäinen tietokonevirus 1970-luvun alussa

40 Kuvien lähteet ( ) John Backus: and.ac.uk/~history/PictDisplay/Backus.htmhttp://www-groups.dcs.st- and.ac.uk/~history/PictDisplay/Backus.htm Alick Glennie: showperson.prx?PeopleID=185http://hopl.murdoch.edu.au/ showperson.prx Grace Hopper: and.ac.uk/~history/PictDisplay/Hopper.htmlhttp://www-groups.dcs.st- and.ac.uk/~history/PictDisplay/Hopper.html John Mauchly: etsi2.ugr.es/alumnos/mlii/Mauchly.htmhttp://www- etsi2.ugr.es/alumnos/mlii/Mauchly.htm Konrad Zuse: and.ac.uk/~history/PictDisplay/Zuse.html