Foreign Function Interface Antti Marttila Funktio-ohjelmointi 2
Motivaatiota ● Haskell helpottaa suunnittelua ● Haskell on ilmaisuvoimainen ● Haskell vähentää virheitä ● C on tehokas ● C kielenä useissa valmiissa kirjastoissa ● C on kaikkialla ja sillä pääsee kaikkialle ● Se mitä C on niin Haskell ei ja päinvastoin (lähes)
Ongelma ● Olisi hyvä jos olisi olemassa kieli jolla olisi kaikki edellä mainitut hyvät ominaisuudet ilman ongelmia ● Millainen olisi kieli jossa yhdistyisi Haskellin ja C:n parhaat puolet
Ratkaisu ● Käytetään niitä yhdessä niin, että se kumpi sopii paremmin tilanteesseen, niin se otetaan käyttöön ● Kuinka se toteutetaan?
Foreign Funktion Interface (FFI) ● Vieraskielinen funktio rajapinta ● Haskellin lisäominaisuus jolla päästään ohjelmakoodista käsiksi toisella kielellä kirjoitettuun koodiin ja sieltä Haskelliin ● Kaksi kieltä kohtaavat toisensa ● Käytännössä tarvetta parantaa Haskellilla tehdyn ohjelman nopeutta tai mahdollisuus päästä C:n valmiisiin kirjastoihin ● Käytännössä ei tarvetta päästä C:stä Haskelliin
Hyödyt ● Päästään käsiksi suureen joukkoon valmiita kirjastoja ● Yhteensopivuus (C) järjestelmien kanssa ● Nopeus ● Voidaan käyttää Haskellia
Ongelmat ● Roskienkeruu ● Tyyppieroavaisuudet ● Virhealttius kasvaa C:n mukana ● Monikulttuurisuus
FFI:n Koodillinen toteutus
Yhteensopivat tyypitYhteensopivat tyypit
Varsinainen kirjaston hakuVarsinainen kirjaston haku
Foreign ● 'foreign' kertoo Haskellille että käytetään FFI:tä ● 'import' vaihtiehto 'export' ● [callconv] on ccall tai stdcall ● [ext_fun] “osoite.h nimi” tai “nimi” ● [unsafe] vaihtoehto 'safe' (oletuksena safe) ● Varid '::' prim_type tavanomainen funktion esittely
Kääntäminen ● ghc -o foo -ffi Main.hs
Toinen esimerkki
Kommenttia Kysyttävää Palautetta Kiitos