U L i k o o L matemaatika-informaatikateaduskond



Yüklə 0,53 Mb.

səhifə4/23
tarix13.11.2017
ölçüsü0,53 Mb.
1   2   3   4   5   6   7   8   9   ...   23

Vaatleme Java n¨aidet:

class BlackBox {

private BigInteger secret;

BlackBox(BigInteger secret) {

this.secret = secret;

}

public boolean f(BigInteger x) {



if (x.equals(new BigInteger("1000666"))) {

throw new RuntimeException(secret.toString());

}

return x.compareTo(secret) < 0;



}

}

class Adversary {



public static BigInteger attack(BlackBox box) {

try {


boolean dummy = box.f(new BigInteger("1000666"));

} catch (RuntimeException e) {

return new BigInteger(e.getMessage());

}

return null;



}

}

class Test {



public static void main(String[] args) {

BlackBox box = new BlackBox(

new BigInteger("123456789123456789123456789"));

System.out.println("Adversary.attack(box) = "

+ Adversary.attack(box));

}

}



Siin defineeritakse must kast box, mis sisaldab salajast informatsiooni (se-

da hoitakse piiramatu suurusega t¨aisarvulises muutujas secret), kuid selle

salajase v¨a¨artuse kohta on v˜oimalik infot saada ainult funktsiooni f kaudu.

See funktsioon saab sisendiks piiramatu suurusega t¨aisarvu x ning tulemuse

12



t¨u¨ubi boolean j¨argi peaks tagastama v¨a¨artuse, mis sisaldab maksimaalselt

¨uhe biti infot kastis oleva salajase v¨a¨artuse kohta.

Antud n¨aites on aga funktsiooni f koodi sokutatud tagauks, mis teatud

argumendi x v¨a¨artuse korral viskab erindi, mis sisaldab kogu salajase info.

Seda tagaust kasutab meetod Adversary.attack, et mustast kastist ainult

¨uhe p¨aringuga kogu salajane info k¨atte saada. See on v˜oimalik seet˜ottu, et

Javas on v˜oimalik nn run-time erindeid visata suvalisest meetodist ilma seda

meetodi t¨u¨ubis (p¨aises) deklareerimata. Kui funktsiooni t¨u¨ubiga oleks v˜oima-

lik erindite viskamine t¨aiesti ¨ara keelata, siis oleks v˜oimalik v¨alistada sellise

tagaukse koodi sokutamine.

Seet˜ottu Fumontrixis ei kasutata implitsiitselt laiendatud (v.a ⊥-ga) t¨u¨u-

pe ning v˜oimalik k˜orvalefektide v˜oi erindite sisaldumine on t¨u¨ubist n¨aha.

2.5

Imperatiivne stiil



M˜oningaid algoritme on lihtsam kirja panna imperatiivses stiilis kui funkt-

sionaalses. Seega v˜oiks funktsionaalne keel sisaldada ka v˜oimalusi impera-

tiivse stiili kasutamiseks, n¨aiteks muudetavaid viitasid ja massiive. Haskellis

on selleks olemas IO- ja ST-monaad (IO-monaadi kohta vt [3], peat¨ukk 2).

ST-monaadi korral kontrollitakse t¨u¨ubis¨usteemi abil, et viitasid ja massiive

kasutatakse ainult selles l˜oimes, kus need on defineeritud ning alles p¨arast

nende defineerimist. ST-monaadist on v˜oimalik arvutuse tulemust ohutult

k¨atte saada, kuna arvutus toimub eraldi l˜oimes, mis on v˜oimalik l˜opuni jook-

sutada ning kuhugi mujale viiteid selle l˜oime seisundile ei j¨a¨a. IO-monaadist

v¨a¨artusi ohutult k¨atte ei saa. Seega puhtas funktsionaalses keeles oleks im-

peratiivsete arvutuste jaoks parem kasutada ST-monaadi.

Ka Fumontrixis on ST-monaad realiseeritud ning selles saab kasutada

(lugeda ja kirjutada) viitasid ja massiive. Selleks kasutatakse sisemiselt Has-

kelli IO-monaadi ja arvutuse v¨a¨artus saadakse k¨atte unsafePerformIO abil,

kuid Fumontrixi t¨u¨ubis¨usteemi abil kontrollitakse, et kasutada saaks ainult

ohutuid arvutusi, mis on jooksutatavad eraldi l˜oimes.

Jaotises 6.5 vaatleme monaadiliste v¨a¨artuste pol¨umorfismi, mis muudab

Fumontrixis imperatiivse stiili kasutamise mugavamaks.

2.6

Anon¨


umsed funktsioonid ka t¨

ubitasemel



Fumontrixis on olemas t¨u¨ubitaseme funktsioonid. Erinevalt GHC-st on Fu-

montrixis t¨u¨ubitaseme funktsioonid first-class. Neid saab luua ka ilma nime

andmata (anon¨u¨umsete funktsioonidena), isegi kui tegemist on (liht)rekur-

siivse funktsiooniga, ning neid saab anda argumendiks teistele t¨u¨ubitaseme

13



funktsioonidele. See s¨a¨astab teatud juhtudel programmeerijat nimede v¨al-

jam˜otlemise ja meeldej¨atmise vaevast ning koodi hakkimisest. Fumontrixi

t¨u¨ubitaseme funktsioone vaatleme l¨ahemalt jaotises 5.1.

14



3

untaks



3.1

ordlus Haskelliga



Fumontrixi s¨untaks on mingil m¨a¨aral sarnane Haskelli omaga, kuid seal on

m˜oned olulised erinevused.

Erinevalt Haskellist ei kasutata reavahetusi ja treppimist s¨untaksi osa-

na. Reavahetuse asemel kasutatakse (deklaratsioonide, valikualternatiivide

jne) nimekirjas eraldajana semikoolonit. Nimekirja l˜opetamiseks kasutatakse

negatiivse treppimise asemel v˜otmes˜ona end v˜oi, kui nimekiri ei asu konst-

ruktsiooni l˜opus, siis m˜onda muud v˜otmes˜ona (let-konstruktsiooni korral

n¨aiteks in). Nimekirja viimase elemendi j¨arel on semikoolon lubatud, kuid

mitte kohustuslik.

Fumontrixis kasutatakse λ-avaldises noole asemel punkti nagu lambdaar-

vutuses. See v¨ahendab vajadust sulgude j¨arele, kuna n¨aidise annotatsiooniks

olevas t¨u¨ubiavaldises v˜oidakse kasutada noolt funktsioonit¨u¨ubi t¨ahistamiseks

ja see v˜oiks segi minna λ-avaldise noolega. Punkti kasutatakse ka kvantorite

korral nagu GHC-ski.

Erinevalt Haskellist on Fumontrixis kvantoritega seotud muutujate nimed

suure algust¨ahega, kuna kvantoritega sissetoodud muutujad on Fumontrixis

sarnased algebraliste andmet¨u¨upide konstruktoritega (neid saab kasutada sa-

mades kontekstides, n¨aiteks t¨u¨ubiavaldistes v˜oi t¨u¨ubin¨aidistes). Kvantoriga

sissetoodud konstruktori abil konstrueeritavad t¨u¨ubid on erinevad k˜oigist va-

rem skoobis olnud t¨u¨upidest.

T¨u¨ubis¨unon¨u¨umide nimed on Fumontrixis v¨aikese algust¨ahega nagu and-

metaseme v¨a¨artuste s¨unon¨u¨umid (andmetaseme muutujad). Nende sissetoo-

mine ei tekita uusi t¨u¨upe v˜oi v¨a¨artusi, vaid annab lihtsalt olemasolevale t¨u¨u-

bile v˜oi v¨a¨artusele (uue) nime.

T¨u¨ubiklasside nimed on Fumontrixis v¨aikese algust¨ahega, kuna Fumon-

trixis t¨ahistab t¨u¨ubiklassi nimi selle t¨u¨ubifunktsiooni nime, mis seab igale

klassi t¨u¨ubile (esindajale) vastavusse klassi eksemplari (klassi v¨a¨artuse (mis

tavaliselt on mingi funktsioonide kogum) realisatsiooni antud t¨u¨ubi jaoks).

3.2



untaksi ¨



ulevaade

3.2.1


untaktilised kategooriad

J¨argnevates alajaotistes on erinevate s¨untaktiliste kategooriate elemente t¨a-

histavad muutujad j¨argnevate nimedega (millele v˜oivad lisanduda indeksid):

15





Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   ...   23


Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2019
rəhbərliyinə müraciət

    Ana səhifə