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

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
Q

Co spravime ked upustime od korektnosti?

A
  • 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
Q

Co je vacsinou zachrana pred nedefinovanym spravanim, alebo chybami po statickej kontrole?

A

Dynamicka kontrola

27
Q

Prečo niektoré jazyky nerobia ani statickú, ani dynamickú kontrolu?

A
  • 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
Q

Preco ale treba robit kontroly?

A

Ludia vacsinou chybuju castejsie ako pocitace

29
Q

Opis kontrolu v jazyku racket

A

slide 14

30
Q

Opis kontrolu v javascripte

A

slide 15

31
Q

Co je vyhoda dynamickej kontroly?

A

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
Q

Co je vyhoda statickej kontroly?

A

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
Q

Co ma racket kvoli absencii statickej typovej kontroly?

A

systém kontraktov (nespomínali sme)

34
Q

Co je nevyhoda statickej kontroly?

A

Každá zložitejšia korektná statická kontrola nie je úplná, t.j. odmieta niektoré rozumné programy.

35
Q

Co umoznuje staticka kontrola?

A

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
Q

Aká kontrola generuje rýchlejší kód? Prečo?

A

Statická kontrola
podpora za behu (runtime):
* nemusí ukladať značky (tags)
* nemusí kontrolovať značky

37
Q

Ako vieme zrýchliť dynamickú kontrolu?

A

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
Q

Ako ulahcuje dynamicka kontrola znovupozitelnost kodu?

A

Bez obmedzujúceho statického typového systému sa dá viac kódu znovupoužiť s iným typom dát.

39
Q

Ako ulahcuje staticka kontrola znovupozitelnost kodu?

A

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
Q

Ako je dynamicka kontrola lepsia pre prototypovanie?

A

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
Q

Ako je staticka typova kontrola lepsia pre prototypovanie?

A

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
Q

Co ak nemame nieco implementovane, co vlozime?

A

_ -> error “Not implemented”

43
Q

Ako je dynamicka kontrola lepsia pre udrzbu?

A

Môžeme kód spraviť všeobecnejší bez ovplyvnenia všetkých existujúcich volajúcich miest.

44
Q

Ako je staticka kontrola lepsia pre udrzbu?

A

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