Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Idris

Stran: 1 ... 68 69 [70] 71 72 ... 153
1036
kamarad v zamestnani furt jede z prikazove radky
To dělám dost často taky :) někdy z donucení (vzdáleně na serveru), ale často i lokálně. Na mnohé věci to stačí.

1037
Cestovat lze kupodivu i s manželkou a dětmi, dokud jsou malé.
Právě, dokud jsou malé, pak už se to komplikuje...

1038
WSL jakozto emulator Linuxoveho prostredi
On to ani není emulátor, ale virtualizace s plným linuxovým jádrem (ve WSL 2, první verze jen překládala syscally). Ale to je nepodstatné.
ovladal i Windowsovskou cast disku. Dale bych chtel, abych Python i Javu mohl mit nainstalovanou jenom na to WSL
To není problém, na disk má WSL přístup a aplikace instalované ve WSL jsou jen pro WSL.
pripadne jake to ma nevyhody?
Nevýhody to asi nemá, WSL 1 mělo pomalejší I/O, WSL 2 naopak chce o něco více paměti (plná virtualizace si alokuje velký blok paměti, ve WSL 1 běží každá aplikace nezávisle a jen syscally se překládají za běhu). Pokud je cílem mít Linux pro vývoj (nestačí unixový macOS), tak mě nenapadá žádný potenciální problém (sám jsem na nic nenarazil při používání WSL).

1039
Studium a uplatnění / Re:Literatura- financie/investovanie
« kdy: 11. 04. 2021, 15:08:20 »
Mně při investování hodně pomohla tato kniha: https://en.wikipedia.org/wiki/A_Random_Walk_Down_Wall_Street
Navíc je psaná čtivě a obsahuje spoustu úsměvných historek, takže to je celkem příjemné čtení i pro naprostého začátečníka.

1040
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 07. 04. 2021, 00:36:34 »
že například predikát Even dostává vždy dvojnásobek nějakého neznámého čísla, tak taky automaticky víš, že je sudé.
Rozumím. Toto jsem si tak docela neuvědomil.

Každopádně tato session byla užitečná, díky moc, hodně mi to dalo. Jdu žvejkat. A někdy zase.
Paráda :) Tak příště o těch záv. vektorech a maticích ;) Enjoy

1041
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 23:52:59 »
Mám-li parsovací funkci, která mi ze stringu dělá číslo, tak nemůže vracet číslo jen tak. Bez ohledu na to, jaký nástroj zvolím. Prostě je tam rozdvojka. Pokud mám funkci, která na vstupu přijímá číslo, a volá funkci, která vyžaduje jen sudé, tak se nevyhnu rozhodování co s lichejma.
Jasně, ale pokud třeba z kódu nějak vyplyne, že například predikát Even dostává vždy dvojnásobek nějakého neznámého čísla, tak taky automaticky víš, že je sudé. Tohle jsou umělé příklady, v praxi jsou vztahy mezi hodnotami, typy a funkcemi mnohem složitější a symbolická analýza obecně odhalí víc chyb, než jen prosté kontroly konstant.

Obecně to je o tom, kde je dno rekurze. U konstant to je nula, ale mnohdy stačí nějaké větší číslo. To je třeba případ konkatenace seznamů.

1042
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 23:20:05 »
Kód: [Vybrat]
isNotZero x = x /= 0
Ta validační funkce je úplně nudná.
Tímto by ses dostal k typům identit, to příslušné jazyky mají, můžeš mít třeba typ n = Z a k tomu funkci:
Kód: [Vybrat]
isZero : (n:Nat) -> Dec (n = Z)
Tohle je ta méně nudná část teorie záv. typů :)
(https://en.wikipedia.org/wiki/Intuitionistic_type_theory#=_type_constructor)

1043
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 23:12:07 »
Statické ověřování se týká konstantního kódu. Jakmile je tam nějaká dynamika, to znamená vnější svět, tak se opět vracíme k Maybe, protože to jinak nejde.
Tohle tak úplně neplatí. Když mám třeba
Kód: [Vybrat]
inc : Nat -> Nat
inc n = S n
a vyhodnotím isNonZero (inc anyNat), tak mám dokonalou typovou analýzu i pro dynamická data. Podobně jde pomocí záv. typů udělat filtr podle predikátu na Vect n a, aniž by bylo předem známo, kolik prvků predikát splňuje. Záv. typy (resp. jejich implementace založená na unifikaci) je silnější právě díky symbolickému dokazování (a má v rukávu pár dalších triků, například kvantifikované typy). Proto nejsou záv. typy zbytečná blbost, jsou totiž podstatně mocnější než statická analýza nad kódem jen s generickými typy.

1044
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 19:30:46 »
Umí to víc?
Z jiného soudku pak jsou záv. součtové a součinové typy, ty se hodí třeba u těch vektorů.

1045
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 18:24:01 »
Takže pokud to chápu dobře, tak ZT dělají to, že nechají ten Int Intem, jen přidají pravidla navíc. To pravidlo se tam propaguje pomocí těch dalších argumentů. A kompilátor to "nějak" použije pro ověření.
Přesně! Nechají celočíselný typ (nebo jakýkoliv jiný) na pokoji a jen přidají další argument s "důkazem".
Mám otázky:
- Uvažuju správně?
- Proč jsou ty ZT tak složitý? Proč nestačí primitivní validační funkce? že by mi unikl ještě třetí scénář validace? Nebo to umí víc?
- Umí to víc?
1. Zdá se, že správně ;)
2. Zas tak složité to není, jen je v tom trochu guláš, tohle přišlo od akademiků, kterým evidentně nezáleží na hezké čitelné syntaxi a jasném oddělení argumentů pro běh a pro kontrolu typů (např. číselné argumenty pro dělení vs. důkazy). Primitivní validační funkce ti stačí, ale jak jsi sám psal, bude se vyhodnocovat za běhu.
3. Víc to umí třeba u vektorů a matic.

Jestli si to chceš trochu procvičit, zkus si napsat tohle:
Kód: [Vybrat]
safeminus : (n:Nat) -> (m:Nat) -> GreaterEq n m -> Nat
(Pochopitelně tak, aby ta funkce byla totální.)

1046
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 17:53:21 »
Tady se domnívám že se jeden z nás plete. Podle mne bez závislostních typů si můžeš ohlídat i nenulovost, neprázdnost řetězce, etc.
[...]
Rozdíl je v tom, že, pokud to dobře chápu, bez ZT mi to vynutí (zbytečný) Maybe, což bude trochu matoucí. Zatímco ZT v pohodě při překladu odvodí, že to "nechci" a nepřeloží. Bez ZT runtime, s ZT compiletime.
Chápeš to dobře, nenapsal jsem explicitně "v době překladu" (compile time). Mea culpa.

1047
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 17:50:25 »
- Za běhu funkce div nikoho nezajímá, nemá dva argumenty, není vůbec... Za běhu je na všechno pozdě a prostě děj se vůle boží.
To bych takhle neřekl, myslím, že jádro věci je, že za běhu nikoho nezajímá její třetí argument.
No, trochu si zatrucuju: já bych to tak řekl :-) Ale rád si to nechám vysvětlit.
Ale ta funkce div tam je, ne? A počítá za běhu.

1048
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 17:31:51 »
Teď jsem si uvědomil, že to parsování vstupu je trochu zavádějící. Protože je to jen jedna množina problémů. Pak tu mám druhou,  například takto:
Kód: [Vybrat]
divide a b = a `div` b

calculate x = divide 42 x

main :: IO ()
main = do
    putStrLn $ "--> " ++ (show (calculate (a + b)))
    where
        a = 4
        b = -4
Tam mě žádné Maybe nezachrání.
Tohle je super příklad, vybízí k napsání funkce minus nad Nat, která je totální a akceptuje jen vstupy, kde menšenec je větší nebo roven menšiteli.

1049
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 17:27:48 »
Kód: [Vybrat]
calculate : Nat -> Maybe Nat
calculate n = case isNonZero n of
  Yes prf1 => case isNotAllowedValues n of
      Yes prf2 => Just $ div 42 n prf1 prf2
      No _ => Nothing
  No _ => Nothing
Šlo by? Nebo se vzdaluju té myšlence ZT, a přiohýbám si to klasice?
Jo, to by šlo.

1050
Vývoj / Re:Haskell, ExistentialQuantification, forall
« kdy: 06. 04. 2021, 17:25:06 »
- Za běhu funkce div nikoho nezajímá, nemá dva argumenty, není vůbec... Za běhu je na všechno pozdě a prostě děj se vůle boží.
To bych takhle neřekl, myslím, že jádro věci je, že za běhu nikoho nezajímá její třetí argument.
- Cílem typů (Maybe nebo závislostních), nebo čehokoliv jiného, je přinutit mě, abych ošetřil všechny vstupy.[...] jsem přinucen zohlednit, když se parsování nepovede. To je cíl - nedovolit překlad.
Jo, takhle to je. Bez záv. typů si může člověk ohlídat jen běžné typy (číslo vs. řetězec apod.), ktežto u záv. typů jdou hlídat i hodnoty (nenulovost, neprázdnost řetězce atd.). Je to prostě stejný princip o krok dál (i když implementačně to je o dost složitější a matematicky taky, typy už nejsou jedna kategorie, ale celá kumulativní hierarichie toposů).

V praxi rozhoduje, nakolik umí překladač odvodit typy. V Rustu nebo Go se taky většinou neuvádí int nebo i32 a jiné typy, když jdou odvodit automaticky. U záv. typů to jde často taky (naštěstí, protože psát je explicitně by byl opruz). Navíc překladače mají interaktivní mód, když místo výrazu napíšeš otazník (například ?prf), tak se provede typová kontrola a překladač ti napoví hodnotu a typ. To hodně pomáhá, hlavně při psaní důkazů rovnosti (typy tvaru x = y).

Stran: 1 ... 68 69 [70] 71 72 ... 153