Title: Ohjelmointikielten varhaishistoria
1Ohjelmointikieltenvarhaishistoria
- Esa-Matti Miettinen
- 14.4.2005
2Johdanto
- 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
1940- ja 1950-luvuilla - Koko ajanjakson käsittelyn sijaan tarkastellaan
muutamia tärkeitä merkkipaaluja
3Ohjelmointi 1940- ja 1950-luvuilla
- Ohjelmia kirjoitettiin pääasiassa konekielillä
- Tietokoneet olivat hitaita, kalliita ja
vaikeakäyttöisiä. - 1950-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ä
4Kä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
5Ensimmäinen korkean tason ohjelmointikieli
- Milloin oikein tehtiin ensimmäinen oikea korkean
tason kieli? - Miltä sen koodi mahtoi näyttää?
6Plankalkü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 (1910-1995)
7Plankalkülin ominaisuuksia
- Rakenteiset tietotyypit
- For-lausetta muistuttava toistolause
- Indeksointi
- Monipuoliset listojen käsittelyoperaatiot
- Invarianttien tarkistus
8Esimerkkialgoritmi
- 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"
9TPK-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ä Vi on suurempi kuin
400, tallennetaan i ja ääretön.
Jos funktion arvo syötteellä Vi on lt 400,
tallennetaan i ja funktion arvo.
11Plankalkü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
12Ensimmäinen toteutettu kieli
- Millainen oli ensimmäinen korkean tason kieli,
joka todella toteutettiin?
13Short 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 (1907-1980)
14Short 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
15TPK Short Codella
03 Jos y lt 400, siirry kohtaan 1
16Ensimmäiset kääntäjät
- Useimmat nykyiset kielet käännetään ennen
suoritusta. Milloin näin tehtiin ensimmäisen
kerran?
17Kää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
18Hopperin varhaiset "kääntäjät"
- Ohjelmointikielten kehitykseen suuresti
vaikuttanut Grace Murray Hopper työskenteli
vuodesta 1949 Univac-tietokoneita valmistaneessa
Eckert-Mauchly Computer Corporationissa - EMCssä hänen ryhmänsä kehitti varsinkin aluksi
lähinnä makrojen käsittelijöitä muistuttavia
ohjelmia
Grace Murray Hopper (1906 1992)
19Hopperin 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.
20Hopperin varhaiset "kääntäjät" (jatkoa)
- Merriam-Websterin määritelmä sanalle compile "to
bring together from several sources into a single
volume or list ltcompiled the best short stories
ever written into one fat bookgt " - 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
21Hopperin 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
22TPK A-2lla(vuoden 1953 versio)
23Hopperin 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
24Autocode
- 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
25Autocode (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ä
26TPK Autocodella
27Laning 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
28TPK-algoritmi Laningin ja Zierlerin kielellä
Tähän tulevat syötteet
SP 4 Ehdoton hyppykäsky kohtaan 4
aivj
CP 1 Jos edellisen lauseen arvo lt 0, siirry
kohtaan 1. Tällä saadaan aikaan silmukka.
F11 laskee itseisarvon, F1 neliöjuuren
29Korkean 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?
30Fortran
- 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 (1911-1988)
31Fortranin 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
32Fortranin kehitys
- Aiemmin muun muassa Speedcodingia kehittänyt John
Backus ehdotti uuden ohjelmointikielen
tuottamista 704-tietokoneelle IBMllä loppuvuonna
1953 - Kehitykseen vaikuttivat myös mm. Harlan Herrick,
Irving Ziller ja Ron Nutt - Kielen alkuperäinen määrittely oli valmis
marraskuussa 1954
33Otteita 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..."
34Fortranin 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 26n 704-tietokoneen käyttäjistä käytti
kieltä suurimmassa osassa ohjelmiaan, ja saman
vuoden syksyllä yli puolet 66n koneen
konekielikäskyistä tuotettiin Fortranilla
35TPK-algoritmi Fortranilla
36Yhteenveto
- 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
37Yhteenveto (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
38Yhteenveto (jatkoa)
- Vasta Fortran tarjosi mahdollisuuden helpohkon
ohjelmoinnin ja tehokkaiden ohjelmien välillä, ja
aloitti siten korkean tason ohjelmointikielten
läpimurron
39Aikajana
- Lorenz-salaus murtuu 1941
- Plankalkül n. 1945
- Short Code 1949-1950
- 1950-luvun alussa TKKlla rakennetaan
analogiatietokonetta - Univac 1951
- A-0 1951-1952
- Autocode 1952
- Laningin ja Zierlerin kieli 1952
- A-2 1953
- ESKOa rakennetaan 1954-1960
- Tekoäly-nimitys keksitään Darthmoutissa 1956
- Fortran n. 1957
- Nasa perustetaan 1958
- Relaatiomalli 1969
- Ensimmäinen tietokonevirus 1970-luvun alussa
40Kuvien lähteet(13.4.2005)
- John Backus http//www-groups.dcs.st-and.ac.uk/h
istory/PictDisplay/Backus.htm - Alick Glennie http//hopl.murdoch.edu.au/
showperson.prx?PeopleID185 - Grace Hopper http//www-groups.dcs.st-and.ac.uk/
history/PictDisplay/Hopper.html - John Mauchly http//www-etsi2.ugr.es/alumnos/mlii
/Mauchly.htm - Konrad Zuse http//www-groups.dcs.st-and.ac.uk/h
istory/PictDisplay/Zuse.html