Helsingin yliopisto Tietojenkäsittelytieteen laitos
 

Tietojenkäsittelytieteen laitos

Tietoa laitoksesta:

 

Vierailuesitelmä

Torstaina 4. toukokuuta 2000 kello 10:30 (HUOM! poikkeava aika) pidetään laitoksemme salissa A320 seuraava vierailuesitelmä.

Dos. Petri Mäenpää (Nokia Networks):

Shines: kokemuksia teollisen funktionaalisen ohjelmointikielen suunnittelusta ja toteutuksesta.

Shines on teolliseen käyttöön tarkoitettu funktionaalinen ohjelmointikieli, jota kehitetään Nokia Networksin ja Teknillisen korkeakoulun yhteisessä HiBase-projektissa. Kielen on tarkoitus olla yleiskäyttöinen, mutta erityisesti sitä aiotaan soveltaa telekommunikaatiossa. Useimmista funktionaalisista kielistä poiketen Shines on persistentti: ohjelman käsittelemä tieto on automaattisesti levyvarmennettua. Jos systeemi kaatuu, voidaan paitsi tieto myös kesken jääneet laskennat toipua levyltä.

Shinesin kääntäjä on ohjelmoitu Shinesilla itsellään. Kääntäjän alla on tavukooditulkki, joka on järjestetty CPS:n (continuation passing style) mukaisesti. Se on aidosti ilmaisuvoimaisempi kuin esim. Javan. Tavukooditulkki on vuorostaan toteutettu funktionaalisen tiedonhallitsijan Shadesin päälle. Shades toimii Shinesin suoritusmekanismina, ja sisältää mm. reaaliaikaisen roskankerääjän. Shinesissa on Javan tapaan automaattinen muistinhallinta, mutta Javan roskankerääjä ei yllä reaaliaikasuoritusvaatimuksiin.

Erityisen kiinnostavaksi tämän arkkitehtuurin tekee se, että Shadesin (mm. Nokian suorittamissa benchmarkeissa) erinomaiseksi todettu suorituskyky perustuu funktionaaliseen ohjelmointiteknologiaan. Shades sallii vain hyvin rajoitettuja mutaatioita, eikä Shines salli niitä lainkaan. Sovellusohjelmoija ei voi käyttää esimerkiksi referenssimuuttujia ML:n tapaan. Shadesin roskankerääjä on olennaisesti funktionaalinen, toisin kuin Javan, ja pystyy nimenomaan siksi reaaliaikaisuuteen.

Tämä esitelmä keskittyy kuitenkin Shinesiin ja erityisesti sen tyyppijärjestelmään. Se pyrkii yhdistämään tiettyjä oliokielten piirteitä funktionaaliseen kieleen siten että funktionaalisessa ohjelmoinnissa voidaan hyödyntää perintää ja alityypitystä. Yleensä funktionaaliset kielet eivät tue alityypitystä, koska Hindley-Milner tyyppipäättely ei laajene siihen täydellisesti.

Meillä on kuitenkin hyviä kokemuksia Johan Nordlanderin väitöskirjatyössään (Chalmers, 1999) kehittämästä epätäydellisestä alityyppipäättelyalgoritmista. Shinesin alityyppijärjestelmä perustuu ohjelmoijan määrittelemiin perintäsuhteisiin samoin kuin Javassa, ja toisin kuin tutkimuksen valtavirrassa, rakenteellisessa alityypityksessä. Shinesissa on kuitenkin parametrisesti polymorfiset tyypit samoin kuin funktionaalisissa kielissä yleensä, mutta toisin kuin Javassa. Oliokielten `self'iä ja dynaamista sidontaa Shinesissa ei sen sijaan ole, koska se tekisi tyyppijärjestelmästä tarpeettoman monimutkaisen.

Shinesin käyttämä parametrisesti polymorfinen alityyppipäättely ei periaatteessa aina pysty päättelemään tyyppiä, mutta käytännössä aivan riittävän hyvin. Joskus hyvin harvoin ohjelmoija joutuu antamaan käsin tyyppiannotaation.

Shines on myös tietokantaohjelmointikieli, ja siinä kokeillaan konstruktiivisen tyyppiteorian riippuvia tyyppejä tietokantojen eheysrajoitteiden ilmaisemiseen. Perinteisesti tietokantaohjelmoinnissa yhdistetään ohjelmointikieli ja relaatiotietokannanhallintajärjestelmä, mutta tästä maksetaan tunnetusti kova hinta tehokkuudessa (nk. impedance mismatch). Persistenttien ohjelmointikielten yksi päätarkoitus on päästä tästä eroon. Niillä on kuitenkin ollut perinteisesti muita suuria tehokkuuden pullonkauloja. Shinesin uusi funktionaalinen arkkitehtuuri Shadesin kanssa on saanut poistettua nämä.

Shinesin käyttötarkoitus on sama kuin Ericssonin funktionaalisella Erlang-kielellä, jota on kehitetty n. 15 vuotta ja jolla tehdään myynnissä olevia puhelinkeskuksiakin. Sen päälle on toteutettu Mnesia-tietokannanhallintajärjestelmä, kun sen sijaan Shades toimii Shinesin alla sen toteutusmekanismina. Oletamme siksi että Shades/Shines-arkkitehtuuri on huomattavasti suorituskykyisempi kuin Erlang/Mnesia, vaikka kunnollisia benchmarkeja ei ole vielä tehty. Yksi Erlangin suuri puute on myös kunnollinen tyyppijärjestelmä. Siihen on tehty kokeellinen tyyppijärjestelmä, mutta sen tapa käsitellä alityyppipäättelyä on osoittautunut liian hankalaksi eikä sitä juuri käytetä. Lisätietoja ja julkaisuja voi katsoa osoitteesta http://hibase.cs.hut.fi/hibase/hibase.html.


Tervetuloa!
Matti Nykänen