Io (ohjelmointikieli)

Wikipedia
Loikkaa: valikkoon, hakuun
Io
Io-logo.svg
Paradigma moniparadigma, olio, prototyyppipohjainen
Tyypitys vahva, dynaaminen
Yleinen suoritusmalli -
Muistinhallinta roskienkeruu
Julkaistu 2002
Kehittäjä Steve Dekorte ym.
Kehitysversio 20071010
Merkittävimmät toteutukset Io
Vaikutteet Smalltalk, NewtonScript, Self, Lua, Lisp, Act1
Käyttöjärjestelmä Windows, Mac OS X, Linux, FreeBSD, NetBSD, Irix, Solaris, Symbian, Syllable
Verkkosivu http://iolanguage.com/
Uutisryhmä -

Io on puhdas olio-ohjelmointikieli, joka on saanut vaikutteita Smalltalk-, Self-, Lua-, Lisp-, Act1- ja NewtonScript-ohjelmointikielistä. Io käyttää prototyyppipohjaista oliomallia Self- ja NewtonScript-kielten tavoin poistaen näin eron olioinstanssien ja luokkien välillä. Kaikki ovat olioita, kuten Smalltalkissa, ja tyypitys on dynaaminen. Kielessä ei ole lauseita, vaan kontrollivuon hallinta tehdään funktioilla, ja ohjelmat ovat vain datapuita. Io käyttää aktorimallia, nykykielissä harvinaista tekniikkaa, rinnakkaisuuden toteuttamiseen.

Huomattavia ominaisuuksia Io:ssa ovat tehokkuus, minimaalinen koko ja avoimuus ulkoisia resursseja käyttämällä. Io:a suoritetaan pienessä, siirrettävässä virtuaalikoneessa.

Historia[muokkaa | muokkaa wikitekstiä]

Steve Dekorte loi kielen maaliskuun 7. 2002 yritettyään auttaa ystävää tämän tekemän kielen optimoinnissa. Hän huomasi, ettei tiennyt juurikaan ohjelmointikielten toiminnasta, ja kirjoitti uuden pienen kielen ymmärtääkseen paremmin aiheeseen liittyviä ongelmia.

Filosofia[muokkaa | muokkaa wikitekstiä]

Io:n tavoite on tutkiskella konseptien yhdistämistä ja dynaamisia kieliä, joten kieli tapaa suosia yksinkertaisuutta ja joustavuutta tehokkuuden kustannuksella.

Ominaisuuksia[muokkaa | muokkaa wikitekstiä]

Syntaksi[muokkaa | muokkaa wikitekstiä]

Io:n syntaksi on hyvin läpinäkyvä. Yksinkertaisimmassa muodossa se koostuu yksittäisestä tunnuksesta:

 teeJotain

Jos oletetaan, että teeJotain on metodi, yllä oleva on metodikutsu ilman argumentteja, jolloin argumentteja erottavia sulkuja tarvita.

Jos teeJotain:n kutsu sisältää argumentteja, se näyttää tältä:

 teeJotain(42)

Io on viestinvälitystä käyttävä kieli ja koska kaikki paitsi kommentit ovat Io:ssa viestejä, jokainen viesti lähetetään vastaanottajalle. Ylläolevaa kuvaa tätä tilannetta, mutta asia käy paremmin ilmi seuraavasta:

 System version

Tämä esimerkki näyttää, kuinka viestinvälitys toimii Io:ssa; "version"-viesti lähetetään "System"-oliolle. Aiemmissa esimerkeissä vastaanottaja riippuu kontekstista.

Operaattorit ovat Io:n syntaksissa erikoistapaus, eivätkä toimi suoraan yllä esitetyllä tavalla. Io:n jäsennin poimii kielen tulkin määrittelemät operaattorit ja muuntaa ne tavallisiksi metodikutsuiksi. Esimerkiksi:

 1 + 5 * 8 + 1

muunnetaan muotoon:

 1 +(5 *(8)) +(1)

Esimerkki näyttää, kuinka operaattorien sitovuus on erilainen (kertolasku sitoo enemmän kuin yhteenlasku). Io:n sitovuustasot ovat vastaavat kuin C-kielessä.

Kaikki operaattorit Io:ssa ovat metodeita; operaattorien erikoiskohtelu jäsennettäessä on lähinnä mukavuusominaisuus.

Metodit ja lohkot[muokkaa | muokkaa wikitekstiä]

Io:ssa on kaksi tapaa tehdä anonyymejä funktioita: metodit ja lohkot. Ne ovat lähes identtisiä, paitsi yhden ominaisuuden, näkyvyysalueen, osalta. Lohkoilla on leksikaalinen ja metodeilla dynaaminen näkyvyysalue.

Sekä metodit että lohkot ovat korkeamman asteen funktioita.

Esimerkkejä[muokkaa | muokkaa wikitekstiä]

Hei maailma -esimerkki:

 "Hei, maailma!" println

Uusia olioita luodaan kloonaamalla olioita. Io:ssa erityisesti kloonaus luo uuden tyhjän olion, ja eroavaisuudet sen ja vanhemman välillä luodaan uuteen olioon - tätä kutsutaan nimellä differentiaalinen perintä. Esimerkki tästä:

 A := Object clone         // luo uuden tyhjän olion nimeltä "A"

Yksinkertainen ei-rekursiivinen kertomafunktio:

 kertoma := method(n,
   if(n == 0, return 1)
   res := 1
   n to(1) foreach(i, res = res * i)
   res
 )

Esimerkki esittelee lukuvälin käyttöä, eikä käytä for-silmukkaa, joka on nopeampi.

Aiheesta muualla[muokkaa | muokkaa wikitekstiä]