Haskell vs. Racket, statická vs. dynamická kontrola, eval Flashcards

(44 cards)

1
Q

(eq? v1 v2) vracia #t ak

A

v1 a v2 odkazujú na ten istý objekt,
inak vracia #f.
(eq? “Ahoj” “Ahoj”) #t
(eq? “ab” (string-append “a” “b”)) #f
(eq? (cons 1 2) (cons 1 2)) #f

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

(equal? v1 v2) pre typy ako reťazce, páry, meniteľné páry, a iné porovnáva …

A

podľa obsahu. Pre páry je rovnosť rekurzívna.
(equal? “Ahoj” “Ahoj”) #t
(equal? “ab” (string-append “a” “b”)) #t
(equal? 2 2.0) #f

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

(= v1 v2) vracia #t práve vtedy ak

A

v1 =v2. Akv1 av2 niesú
čísla, vráti chybu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Co je to symbol?

A

atomická hodnota, ktorá sa vypisuje ako identifikátor so symbolom ’ na začiatku.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Ako vieme zistit ci je nieco symbol?

A

(symbol? ’a) #t

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Co robi string->symbol?

A

konvertuje reťazec s na symbol ’s.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Ake zlozite je porvnanie symbolov podla eq? a equal?

A

O(1)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Co robi eval?

A

umožňuje vytvoriť za behu nové dáta a potom tieto dáta zmeniť na program a vykonať ho

(eval ’(print “Ahoj”))

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Co je to quote?

A

(quote v) je to isté ako ’v
quote zabráni interpretácii symbolov ako identifikátorov a zoznamov ako volaní funkcií
* (quote apple) ’apple
* (quote (1 2 . (3))) (1 2 3)
* (quote 42) 42

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Co je to quasiquote a unquote?

A

(quasiquote v) je to isté ako ‘v
(unquote v) je to isté ako ,v
quasiquote pracuje podobne ako quote, ale pokiaľ narazí na (unquote v), tak vyhodnotí v a nahradí ním (unquote v).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Co vyuzivame v JS? podobne ako quasiquote?

A

string interpolation
* var n = 42;
* “foo${n}bar” “foo${n}bar”
* ‘foo${n}bar‘ “foo42bar”

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Haskell vs Racket

A

Haskell je akoby podmnožina Racketu. Existujú programy, ktoré Haskell neskompiluje ale Racket áno, ale obsahujú chyby
V haskelli nepotrebujeme funkcie ako number?
v rackete vieme vracať rôzne typy

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Aký je Racket z pohľadu Haskell programátora?

A

Racket akoby mal jeden veľký dátový typ RT. Všetky hodnoty sú práve tohto typu RT:

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Co je to staticka kontrola?

A

akákoľvek činnosť, ktorej úlohou je zamietnuť zlý program po tom, ako sa úspešne sparsoval (vytvoril sa AST), ale ešte pred tým, než sa spustí.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

AKé sú nástroje pre dodatočnú statickú kontrolu?

A

napr. lint

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Čo kontroluje statická typová kontrola?

A
  • nájsť chyby ako nesprávne typy argumentov 4/”2”, f v, a f nie je funkcia, if za ktorým nie je bool. výraz, . . .
  • vynútenie abstrakcie
  • vyhnúť sa kontrole za behu
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Ako mozu dynamicky typované jazyky môžu robiť určité stat. kontroly?

A

použitie nedefinovanej premennej

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

v jazyku Haskell stat. kontrola nedeteguje nasledovné chyby:

A
  • zavolanie head na prázdnom zozname
  • delenie nulou
19
Q

žiadna statická kontrola nemôže detegovať logické chyby:

A
  • preklep v názve premennej: x namiesto y
  • nesprávna podmienka v if
  • nesprávny algoritmus
    toto si musíme vyriešiť sami :)
20
Q

Co je ulohou statickej kontroly?

A

diagnostikovať, či má program chorobu X . Program má chorobu X, ak existuje vstup, na ktorom spraví X.

21
Q

kedy je staticka kontrola korektna (sound) vzhladom na X?

A

ak deteguje každý program chorý na X a neprepustí ho
* žiadne falošne negatívne výsledky testov

22
Q

stat. kontrola je úplná (complete) vzhľadom na X , ak …

A

každý program, ktorý netrpí X, prejde kontrolou bez nálezu X * žiadne falošne pozitívne výsledky testov

23
Q

Co je problem s nerozhodnutelnostou pre staticku typovu kontrolu?

A

Statická kontrola pre skoro každé netriviálne X nemôže súčasne spĺňať nasledovné podmienky:
* je korektná (sound) vzhľadom na X
* je úplná (complete) vzhľadom na X
* na každom programe skončí v konečnom čase
Inak povedané, to, či program trpí X je nerozhodnuteľný problém skoro pre každé netriviálne X.

24
Q

Kedze chceme aby kompilator vzdy skoncil, od coho upustime?

A

musíme upustiť od korektnosti alebo úplnosti. Upustime teda od korektnosti

25
Co spravime ked upustime od korektnosti?
* Vložíme dyn. kontrolu, ktorá bude za behu kontrolovať, či sa nejde udiať X. Ak áno, program zastavíme a vyhlásime chybu. * Povolíme, aby sa stalo X, aj keď v niektorých prípadoch tomu vieme zabrániť. (Napr. delenie nulou vráti ∞.)
26
Co je vacsinou zachrana pred nedefinovanym spravanim, alebo chybami po statickej kontrole?
Dynamicka kontrola
27
Prečo niektoré jazyky nerobia ani statickú, ani dynamickú kontrolu?
* zjednodušuje to implementáciu kompilátora/interpretera * vynechanie dynamických kontrol zvyšuje rýchlosť * kompilátor negeneruje do kódu informácie potrebné (napr. veľkosť poľa) pre dyn. kontrolu (šetrí sa priestor a výkon)
28
Preco ale treba robit kontroly?
Ludia vacsinou chybuju castejsie ako pocitace
29
Opis kontrolu v jazyku racket
slide 14
30
Opis kontrolu v javascripte
slide 15
31
Co je vyhoda dynamickej kontroly?
Je praktickejsia štandardne dovoľuje heterogénne zoznamy, funkcie vracajúce String alebo Integer statická kontrola: viac práce, musíme zaviesť vlastný typ dataT= I Int | S String
32
Co je vyhoda statickej kontroly?
Je praktickejsia :D Pri statickej kontrole môžeme predpokladať, že argumenty majú správny typ. Pri dynamickej kontrole musíme ručne kontrolovať typ argumentu na začiatku funkcie
33
Co ma racket kvoli absencii statickej typovej kontroly?
systém kontraktov (nespomínali sme)
34
Co je nevyhoda statickej kontroly?
Každá zložitejšia korektná statická kontrola nie je úplná, t.j. odmieta niektoré rozumné programy.
35
Co umoznuje staticka kontrola?
značkovanie (tagging) tagging všetkých hodnôt pri dynamickej kontrole stojí čas, priestor a prináša neskorú detekciu chýb. mozeme si vytvorit vlastny typ a znackovat (napr aj ten typ RT)
36
Aká kontrola generuje rýchlejší kód? Prečo?
Statická kontrola podpora za behu (runtime): * nemusí ukladať značky (tags) * nemusí kontrolovať značky
37
Ako vieme zrýchliť dynamickú kontrolu?
implementácia jazyka: * môže využívať rôzne optimalizácie k odstráneniu zbytočných dynamických kontrol. vlastný zdrojový kód: * nemusí ručne obchádzať obmedzenia typového systému
38
Ako ulahcuje dynamicka kontrola znovupozitelnost kodu?
Bez obmedzujúceho statického typového systému sa dá viac kódu znovupoužiť s iným typom dát.
39
Ako ulahcuje staticka kontrola znovupozitelnost kodu?
generics, ad-hoc polymorfizmus, hierarchie tried,... statická typová kontrola umožňuje: * použiť rôzne typy pre rôzne koncepty * zabrániť nesprávnemu použitiu knižníc
40
Ako je dynamicka kontrola lepsia pre prototypovanie?
dynamická kontrola umožňuje spustiť aj nekompletný program, ktorý neošetruje všetky prípady statická kontrola vyžaduje ošetrenie všetkých prípadov
41
Ako je staticka typova kontrola lepsia pre prototypovanie?
Statický typový systém pomáha pri prototypovaní: * dokumentovať dátové štruktúry a kontrolovať ich správne použitie * uistiť sa, že sa na nič nezabudlo (case) * či sa omylom v novom kóde nespoliehame na nesprávne predpoklady
42
Co ak nemame nieco implementovane, co vlozime?
_ -> error "Not implemented"
43
Ako je dynamicka kontrola lepsia pre udrzbu?
Môžeme kód spraviť všeobecnejší bez ovplyvnenia všetkých existujúcich volajúcich miest.
44
Ako je staticka kontrola lepsia pre udrzbu?
Keď sa zmení dátový typ alebo časť programu, tak statická kontrola typov vráti zoznam miest, na ktorých treba niečo opraviť. * predchádza zaneseniu chýb