Suomalaiset ohjelmointikielet



Samankaltaiset tiedostot
ELM GROUP 04. Teemu Laakso Henrik Talarmo

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Käännös, linkitys ja lataus

Ohjelmoinnin peruskurssien laaja oppimäärä

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

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Harjoitustyö: virtuaalikone

Ohjelmoinnin peruskurssien laaja oppimäärä

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ohjelmointikieli TIE Principles of Programming Languages Syksy 2017 Ryhmä 19

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

815338A Ohjelmointikielten periaatteet Harjoitus 2 vastaukset

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Ruokahalu kasvaa syödessä lisää makrokielen herkkuja

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

Clojure, funktionaalinen Lisp murre

IDL - proseduurit. ATK tähtitieteessä. IDL - proseduurit

ATK tähtitieteessä. Osa 3 - IDL proseduurit ja rakenteet. 18. syyskuuta 2014

Chapel. TIE Ryhmä 91. Joonas Eloranta Lari Valtonen

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

4. Lausekielinen ohjelmointi 4.1

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Johdatus ohjelmointiin

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnista. Ohjelmien toteutukseen tarjolla erilaisia välineitä:

Se mistä tilasta aloitetaan, merkitään tyhjästä tulevalla nuolella. Yllä olevassa esimerkissä aloitustila on A.

Tietotyypit ja operaattorit

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

Kertausluento luennoista 1-3 1

7/20: Paketti kasassa ensimmäistä kertaa

Ohjelmoinnin peruskurssien laaja oppimäärä

Ongelma(t): Miten jollakin korkeamman tason ohjelmointikielellä esitetty algoritmi saadaan suoritettua mikro-ohjelmoitavalla tietokoneella ja siinä

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

Tie Principles of Programming Languages Seminar Essay. Lua. Group 23 Miikka Koskinen Joose Sainio

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmointiharjoituksia Arduino-ympäristössä

Common Lisp Object System

Proseduurit, funktiot ja herättimet - esimerkkeinä Oracle, SQL Server, MySQL ja OCELOT. Jouni Huotari S2008

PROSEDUURIT, FUNKTIOT JA HERÄTTIMET - ESIMERKKEINÄ ORACLE, SQL SERVER, MYSQL JA OCELOT JOUNI HUOTARI K2009

Java-kielen perusteet

Algoritmit 1. Luento 3 Ti Timo Männikkö

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

Luento 5. Timo Savola. 28. huhtikuuta 2006

Luento 1 Tietokonejärjestelmän rakenne

Ohjelmoinnin perusteet Y Python

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

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

Ohjelmoinnin peruskurssien laaja oppimäärä

Imperatiivisten ohjelmien organisointiparadigmojen. historia

Imperatiivisten ohjelmien organisointiparadigmojen historia

Imperatiivisen ohjelmoinnin peruskäsitteet. Meidän käyttämän pseudokielen lauseiden syntaksi

815338A Ohjelmointikielten periaatteet

811120P Diskreetit rakenteet

Perinteiset tietokoneohjelmat alkavat pääohjelmasta, c:ssä main(), jossa edetään rivi riviltä ja käsky käskyltä.

Tutoriaaliläsnäoloista

Scheme-kesäkurssi luento 5

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

Loppukurssin järjestelyt

815338A Ohjelmointikielten periaatteet Harjoitus 7 Vastaukset

Sisällys. 11. Javan toistorakenteet. Laskurimuuttujat. Yleistä

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 1 Tietokonejärjestelmän rakenne

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

Haskell ohjelmointikielen tyyppijärjestelmä

Pythonin Kertaus. Cse-a1130. Tietotekniikka Sovelluksissa. Versio 0.01b

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

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

Johdatus f90/95 ohjelmointiin. H, R & R luvut 1-3

Harjoitus 3 (viikko 39)

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

Koottu lause; { ja } -merkkien väliin kirjoitetut lauseet muodostavat lohkon, jonka sisällä lauseet suoritetaan peräkkäin.

Tietokanta (database)

C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. C-ohjelma. Operaatioiden suoritusjärjestys

811120P Diskreetit rakenteet

Ohjelmoinnin peruskurssien laaja oppimäärä

Osoittimet ja taulukot

Kielioppia: toisin kuin Javassa

samalla seuraavaan puoliavaruuteen (sukupolveen), jota siivotaan harvemmin.

Loppukurssin järjestelyt C:n edistyneet piirteet

System.out.printf("%d / %d = %.2f%n", ekaluku, tokaluku, osamaara);

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

4. Luokan testaus ja käyttö olion kautta 4.1

Java-kielen perusteet

Ohjelmoinnin peruskurssien laaja oppimäärä

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Ehto- ja toistolauseet

Ohjelmien analysointi. ER-kaaviot

Ohjelmoinnin peruskurssien laaja oppimäärä

Java kahdessa tunnissa. Jyry Suvilehto

Luento 4 Aliohjelmien toteutus

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

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Transkriptio:

Suomalaiset ohjelmointikielet Timo Lilja TKK 6. 10. 2009 Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 1 / 24

Sisältö 1 Kieli Rakenteet Makrot Yhteenveto Lähteet 2 Shines Kieli Esimerkki 3 Muita kieliä 4 Yhteenveto Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 2 / 24

-kieli (1/2) Kieli Suunniteltu vuosina 19671969 Valtion tietokonekeskuksessa. pääasialliset suunnittelijat: Tuomas Kotovirta ja Simo Töyrä Tarkoitettu kaupallis-hallinnollisiin ohjelmointitehtäviin. Laitteistoriippumaton Käännetty kieli Moduulijärjestelmä Makrojärjestelmä Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 3 / 24

-kieli (2/2) Kieli Käännös yhdellä läpikäynnillä (single-pass). Kääntäjä generoi suoraan ajettavan binäärin (ei linkkeriä). Automaattinen ajonaikainen objektimoduulien segmentointi ohjelmaa voidaan ajaa koneessa jossa vähemmän fyysista muistia kuin ohjelma koko (vrt. virtuaalimuisti) koodin oltava relokatoituvaa -ohjelmointijärjestelmä koostuu kolmesta loogisesta osasta: kääntäjän ydin lausekkedein käsittelymoduulit ajonaikainen monitori (run-time monitor) Kääntäjällä pieni muistijälki (80 kt) OS/360-järjestelmässä. S/360 malli 50 (n. 1972) pienillä työkuormilla 80% ajasta käyttöjärjestelmässä (overhead) eräajokuorma: 3000 lauseketta/minuutti. Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 4 / 24

Suunnitteluperiaatteet Kieli Laitteistoriippumattomuus tiedostojen merkkijonesitys kokonaisluvut (ei liukulukuja) lukujen pituus määritelty Soveltuvuus hallinnolliseen ohjelmointiin jonomuuttujat ja -taulukot standardoitu tiedostoformaatti: peräkkäis- ja hajatiedostot, lukujen/merkkijonojen porttautuva esitysmuoto Huonojen ohjelmointiratkaisujen välttäminen moduulirakenne: viestinvälitys vain rajapinnan läpi ei osoittimia tiettyyn tiedostoon kohdistuvat operaatiot vain yhdestä moduulista kaikki muuttujat alustettava Makrojärjestelmä Ei rekursiota Dynaaminen linkkeri: moduuleja voidaan ladata ajonaikaisesti Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 5 / 24

Kontrollirakenteet (1/2) Rakenteet Ehdoton hyppy: nimi GOTO hyppyosoite Monihaarainen hyppy nimi FORK järjestysnumero hyppyosoite, järjestysnumero hyppyosoite... Ehtolause: nimi IF ehtolauseke THEN lause1 [ELSE lause2 ] IF A+B LT C+5/2..IF-LAUSE ON THEN X =1..YKSI ELSE GOTO OSA2.LAUSE IF JONO EQ 'A' THEN GOTO AJONO Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 6 / 24

Kontrollirakenteet (2/2) Rakenteet Silmukkarakenne: nimi LOOP loppunimi kierrosmäärä LOOP E2 I+J.ULKOINEN SILMUKKA. IF X EQ Y THEN GOTO YLI.HYPPY POIS ON SALLITTU. LOOP E3 10.SISÄINEN SILMUKKA. E3 END E2 END YLI A=B Ohjelman lopettaminen: nimi STOP paluukoodi [DUMP] DUMP-määreellä muisti vedostetaan Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 7 / 24

Moduulit ja aliohjelmet Rakenteet Moduulit jokaisessa ohjelmassa oltava MAIN-moduuli moduulin määrittely: tunniste SUBR [ arg,... ] moduulien kutsu: nimi CALL tunniste [ arg,... ] moduulista paluu nimi RETURN moduulin kääntämisen lopetus: FIN moduulit käännettävissa erikseen tiedonvälitys vain parameterien avulla (enkapsulointi) moduulit dynaamisesta ladattavissa relokatoituvia Sisäiset alirutiinit määrittely: tunniste BEGIN... BACK kutsu: EXEC nimi ei rekursiota Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 8 / 24

Muut lausekkeet Rakenteet Tiedostojen käsittely primitiivisinä sarakepohjaiset tietueenkäsittelyrutiinit tiedoston avaus, sulku, kirjoitus, päivitys (vrt. SQL UPDATE) tiedostot siirrettäviä alustalta toiselle Aritmeettiset lausekkeet evaluoidaan vasemmalta oikealle lauseke A + B * B/C vastaa lauseketta (A + B) B/C Merkkijonon tutkiminen STABSCAN -rakenne merkkijonohakuihin koodi joka tarkistaa että merkkijonossa JONO on vain numeroita: NUMER STAB ALPHA, SPEC, ' '.EI-NUMEROT. SCAN JONO IND=NUMER IF IND NE 0 THEN GOTO EINUMER Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 9 / 24

Tietorakenteet Rakenteet Kokonaisluvaut pituus 4/9/15 numeroa (SHORT/NORM/LONG) positiivinen, negatiivinen tai nolla ohjelmoijalle ei näy laitteiston lukuesitysmuoto esitystarkkuuden ylitys aiheuttaa ajonaikaisen virheen Merkkijonot (CHAR) jonon pituus 1 9999 merkkiä merkkivalikoima rajoitettu ja standardoitu kokonaislukujen ulkoinen esitysmuoto merkkijonoina merkkijonon osia voidaan käsitellä osajonosyntaksilla Taulukot voidaan muodostaa merkkijonoista tai kokonaisluvuista indeksointi lähtee numerosta 1! indeksimuuttuja voi olla SHORT tai NORM Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 10 / 24

Tietorakenteet: esimerkki Rakenteet Esimerkkejä kokonaislukujen, merkkijonojen ja osajonojen määrittelystä: A NORM B SHORT 5.ALKUARVO C(5) LONG.TAULUKKO D(4) SHORT 1,2,3,4 E(100) SHORT 1 M(2) CHAR 3 'ABC','BCD' SYÖTTÖ FILE 80 STUNNUS CHAR SYÖTTÖ<1,3>.OSAJONO SHENK CHAR SYÖTTÖ<4,20> Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 11 / 24

Makrot Makrot CPP-tekstimakroja korkeampitasoisia Käsittelevät syntaksielementtejä ja pääsy syntaksitauluun Makron määrittely: MACRO Lausekkeen käsittely lausekkeen syöttö takaisin ohjelmalle: EMIT lausekkeen luku makrokutsusta:: SEPAR Symbolitaulun käsittely arvon haku symbolitaulusta: ASK arvon tallentaminen symbolitauluun: TELL Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 12 / 24

Makroesimerkki Makrot Käyttöesimerkki: FOO MAP SYÖTTÖ STNNUS 1,3 SHENK 4,20 SHENKNO 24,3 Vastaa osajonon nimeämisrakennetta: SYÖTTÖ FILE 80 STNNUS CHAR SYÖTTÖ<1,3> SHENK CHAR SYÖTTÖ<4,20> SHENKNO CHAR SYÖTTÖ<24,3> Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 13 / 24

Miksi? Yhteenveto VTKK:lla katsottiin COBOL hankalaksi käyttää Oma kieli voitiin jättää standardikielen turhia ominaisuuksia pois lisätä omia, paikallisesti tarpeellisena pidettyjä ominaisuuksia -kielen käyttöä edelsi yritys rakentaa FORTRANin ympärille hallinnollista tieojenkäsittelyä helpottavia toimintoja syntaksi FORTRANista, makrojärjestelmä symbolisista konekielistä Kielestä vain yksi versio, joka oli VTKK:n hallinnassa Kieli on yksinkertainen kääntäjät yksivaiheisia (single pass) kääntäjällä pienempi muistijälki ja selkeä rakenne -kieli oli VTKK:n ratkaisu yhteensopivuusongelmaan -kieli porttattu: tavukone IBM/360 (16/32-bittinen) sanakone UNIVAC 1108 (18-bittinen) Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 14 / 24

in historiaa Yhteenveto Perustui Suomen IBM:llä kehitettyyn PAS-järjestelmään (PL/I Assembly Subsystem), tuki laitteistoriippumattomaan datan siirtoon Laitteistoja: IBM S/360, DOS, Univac-1108, Honeyewell-66, Mini-6, Nova/Eclipse, PDP-11, VAX-perhe, Dec-System 20 (TKK) Mikrotietokoneita varten välikieli ajomonitori sisälsi välikielisen tulkin nimeltä OS moniajo-os (diplomityö, Esa Tähtinen) toc-kääntäjä Nokia Datalla käytetty sairaalaympäristöissä Viimeisein -totetutus OpenVMS:lle Kieli ei paljon muuttunut 1970-luvun jälkeen paljon makroja käytössä tuki ulkopuolisille funktioille (foreign function) Käytetty Suomen ulkopuolella ainakin Norjassa Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 15 / 24

Lähteet Lähteet -Kielen käsikirja. Valtion tietokonekeskus. 1972 H. Jäppinen: -kielisten ohjelmien kääntäminen COBOL-kielelle. Diplomityö. 1972 T. Kotovirta: language compilers. Valtion tietokonekeskus. Nord Data 1972. S. Töyrä: Macro facility of programming language. Valtion tietokonekeskus. Nord Data 1972. Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 16 / 24

Sisältö Shines 1 Kieli Rakenteet Makrot Yhteenveto Lähteet 2 Shines Kieli Esimerkki 3 Muita kieliä 4 Yhteenveto Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 17 / 24

Shines Shines Kieli Shades Shines TKK:lla v. 1996 kehitetty tietokannan elvytysalgoritmi pohjautuu versiointiin persistentti muistinhallintajärjestelmä puhtaasti funktionaalinen, dynaamisesti tyypitetty tavukoodikäännetty CPS:n avulla tietorakenteet (myös sisäiset) säilytetään Shades-kannassa täysin persistentti laskennan tila laskenta reaaliaikaista ja voidaan replikoida automaattisesti useammalle koneelle Hibase: A Persistent Functional Programming Environment TKK:n ja Nokian yhteinen tutkimusprojetki n. 19992001 http://hibase.cs.hut.fi/ Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 18 / 24

Shines-esimerkki Shines Esimerkki Esimerkki Mandelbrotin fraktaalin laskevasta ohjelmasta: PRIVATE m_it(c::<int, INT>,x::<INT, INT>,ctr::INT)::INT := IF ctr >= MAX_CTR THEN MAX_CTR ELSE LET <cre, cim> := c, <xre, xim> := x, xre2 := xre * xre, xim2 := xim * xim IN IF xre2 + xim2 >= 33554432 THEN ctr ELSE m_it(c, <(xre2 - xim2) / 4096 + cre, xre * xim / 2048 + cim>, ctr + 1) http://hibase.cs.hut.fi/shreds/shines/demos/mandel.shines.shtml Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 19 / 24

Sisältö Muita kieliä 1 Kieli Rakenteet Makrot Yhteenveto Lähteet 2 Shines Kieli Esimerkki 3 Muita kieliä 4 Yhteenveto Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 20 / 24

Muita kieliä Muita kieliä Survo 1966 S. Mustonen, Helsingin yliopisto alunperin tilastotieteen erikoiskieli, mutta kehittynyt yleisempään suuntaan. Ks. http://www.survo.fi/ ZBasic 1978 Timo Koivunen, TKK:n opiskelija pieni muistijälki (14kt), kehitetty Zilogin Z80-prosessorille EVE-kieli 19821990? R. Linturi, J. Vuori osa TEKESin SAA Dialogue -hanketta Visual Basicin kaltainen, lomake-editori, perintä Paikallisia erityiskieliä Mikko Lisp 1986, SSH Scheme 1999, Hedgehog Lisp Nokia TNSDL Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 21 / 24

Lähteet Muita kieliä T. Alanko, S. Mustonen, M. Tienari: A Statistical Programming Language SURVO 66. 1968. BIT, 8, 69-85. http://dx.doi.org/10.1007/bf01939330 O. Erling, O. Lassila: Making Common Lisp Viable on Microcomputers. 1986. STeP-86 Symposium, Volume 2. M. Mäkinen: Nokia SAGA. Gummerrus 1995. R. Linturi, M. Tala: Mikrotietokone Suomessa 19731993. Yritysmikrot Oy. 1993. P. Saarikoski: The role of club activity in the early phases of microcomputing in Finland (Tämä ja muuta historiaan liittyvää: http://users.utu.fi/petsaari/tutkimukset/) Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 22 / 24

Sisältö Yhteenveto 1 Kieli Rakenteet Makrot Yhteenveto Lähteet 2 Shines Kieli Esimerkki 3 Muita kieliä 4 Yhteenveto Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 23 / 24

Yhteenveto Yhteenveto Suomessa ei ole ollut paljon ohjelmointikielitutkimusta Yrityksissa ja yliopistoissa rakennettu paljon erilaisia erikoiskieliä Muutamia yleiskäyttöisiä kieliä, mutta ei mitään tunnetumpaa Miksi tehdä omia kieliä oliko 3040 vuotta sitten järkevää lähteä tekemään omaa kieltä? olisiko nyt? Tulevaisuus tutkitaanko tai tehdäänkö Suomessa seuraava C# tai Haskell? ohjelmointikielten tutkiminen epätodennäköistä suomessa onko ohjelmointikielissä mitään tutkittavaa? Timo Lilja (TKK) Suomalaiset ohjelmointikielet 6. 10. 2009 24 / 24