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 - Králík

Stran: 1 [2] 3 4 5
16
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 18:48:56 »
NP, já jinak vůbec csharpista nejsem, asi to budeš umět využít lépe než já, jenom mam tohle taknějak v paměti co jsem si o tom před časem někde četl + si vágně pamatuju, že to i generika nad těmahle hodnotama monomorfizuje v době načtání bytecode, ale to ber s rezervou, možná si to pamatuju blbě...

17
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 16:15:37 »
Přemýšlím, zda by typovej systém C# stačil na to, když by se ty chyby přepsaly na Either. To stojí za promyšlení. Kolik benefitů by to vlastně přineslo.
Na této úrovni jsou Java, C#, Rust a Go stejně dobré. Nebo špatné :)

Ježiš, už mezi prvníma dvěma budou rozdíly... Java ani nemá hodnotvé typy, Either by musel být objekt, takže alokace, plus problém, že všechno je za nullable referencí, takže vrácení Either může být null... Oproti tomu v C# to AFAIK může být hodnotový typ. Taky má AFAIK už nějaký pattern matching...

18
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 15:35:58 »
Věřim ti, že obecně Idris více tlačí uživatele do ošetření chyb, ale ten rozdíl je kvantitativní...
Tak jistě, když se ti počítač vznítí a ty na něj chrstneš kýbl vody, tak to asi Idris nezachrání. Ale donutí tě náležitě ošetřit všechny logické chyby v kódu (typu dělení nulou, že se nevolá head na prázdný seznam apod.).
:) Pro nějakou definici "chyby" a pro nějakou definici "ošetří" tě Idris donutí ošetřit chyby...

jak v Idrisu handluješ chybu alokace paměti. V Rustu to jde.
Rust v tomto případě dělá abort (ani ne panic).
Takové je výchozí chování a popravdě třeba na Linuxu ani nemá smysl ho měnit, protože alokační chybu stejně nedostaneš. Ale lze změnit jak výchozí chování, tak i používat fallible konstruktory u Boxů, Veců apod. a bez toho by Rust nemohl být použit třeba v linux kernelu apod.

19
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 14:54:22 »
Představuji si nástroj pro C#, který projede kód a dohledá všechny neošetřené scénáře... stále si představuji... stále si představuji...
Já úplně nevím, proč se o tomhle se mnou přeš, já jsem odpůrce výjimek přesně z tohoto důvodu.

20
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 14:47:21 »
Je to stejně jako v Haskellu, panikovat v konstruktoru můžeš, ale slušné je vrátit `Result` což je to samé co `Either`...
Lepší by bylo si tu slušnost od autora kódu vynutit: Kašleš na chyby? Tak to mi můžeš, syntax error :)
Meh. Tak mi ukaž, jak v Idrisu handluješ chybu alokace paměti. V Rustu to jde.

V Idrisu jsem taky našel funkci á la panic (builtins.idris_crash).

Věřim ti, že obecně Idris více tlačí uživatele do ošetření chyb, ale ten rozdíl je kvantitativní...

21
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 14:40:00 »
Problém je v tom, že v Idrisu se mi nestane to, co se mi stane v C# v tom příkladu, který jsem uváděl. Že tu chybu neodchytím, tedy nezpracuji, tedy jsem tu chybu nezohlednil.
To je jedno ne? Hodnota toho typu nebude vytvořena, pokud konstruktor vyhodil výjimku...
V Rustu to bude panic?
Je to stejně jako v Haskellu, panikovat v konstruktoru můžeš, ale slušné je vrátit `Result` což je to samé co `Either`...

22
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 14:36:10 »
Zákazník: Tak jsem zkoušel vaši aplikaci a je úplně k ničemu. Jsem tam normálně zadal číslo, a ono to spadlo.
Já: To je jedno ne?
To je ale něco jiného, to spadlo, protože nebyla dobře ošetřena chyba, ne proto, že by byl porušen invariant.

To samé se stane v Rustu, pokud udělám `.unwrap()` na výsledku toho konstruktoru anebo v Haskellu, pokud bys např. v Either Left větvi udělal `error "shit's on fire yo"` ...

23
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 14:28:41 »
Problém je v tom, že v Idrisu se mi nestane to, co se mi stane v C# v tom příkladu, který jsem uváděl. Že tu chybu neodchytím, tedy nezpracuji, tedy jsem tu chybu nezohlednil.
To je jedno ne? Hodnota toho typu nebude vytvořena, pokud konstruktor vyhodil výjimku...

24
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 14:26:17 »
Případně ještě se zeptám obecně: Jaké jsou v Haskellu a Idrisu pravidla ohledně koherence? Dejme tomu, že ve svém programu používám knihovny libA a libB, knihovna libA definuje typeclass Tc a libB typ Foo. Můžu instanciovat Tc pro Foo?

Na toto jsem nedostal odpověď, tak jsem se zeptal na SO. TL;DR Haskell dovoluje orphan type instances vč. odvozených z dependencí. (Je Idris v tomto jiný? Asi bych to nečekal.)

@BoneFlute toto je příklad, kdy Rust musí omezovat typové abstrakce kvůli engineering constraints - nemůže dovolit orphan trait implementace na úrovni knihoven (na úrovni modulů ano), protože by to jednak způsobovalo semver hazardy a také pravděpodobně problémy s linkováním (zejména dynamickým), nejspíš by implementace traitů už nemohly být anonymní...

Zajímavé je, že Haskellu tohle nevadí, efektivně přidání jakékoli zvenku viditelné instance v knihovně je semver-incompatible změna...

25
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 13:42:37 »
C#, Java, Python mi tu kontrolu udělat nepřinutí. Data corupted sice nenastane (jsi-li alespoň trochu šikovnej), ale spadne to za běhu.
Bavíme se o vstupu od uživatele, tzn. tam z principu to musí vyhodit chybu za běhu při načítání dat. Pokud při načítání dat chyba nenastane a úspěšně je vytvořena příslušná hodnota příslušného typu v C# nebo Javě (o Py to neplatí), tak pak přece není už důvod, aby to padalo někde dále, ne?

26
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 12:31:16 »
Je ekvivalentne.
Není.
Technicky vzato to ekvivalentní samozřejmě není (specificky tahle řádka uričtě ne), ale smysl kódu je v zásadě stejný. Na začátku se buď vytvoří hodnota daného typu, nebo se vyhodí chyba...

Liší se technické detaily, v Javě například to bude muset mít objekt, nebudeš moct použít infixové operátory a řada dalších technických rozdílů...

27
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 11:13:43 »
Mna by tiez zaujimalo, ako  si tieto super uzasne jazyky, ktore maju typ na parne cislo alebo neprazdny string (co sa da aj v tej heitovanej jave, ci C#) poradia so vstupmy od pouzivatela, ci ineho systemu, kde moze prist akakolvek blbost.
Úplně stejně... tu příchozí hodnotu naparsuješ/dekóduješ a výsledkem takový operace je buď ten správný typ, nebo chyba...


Edit: Poznámka k:
Citace
Můžu instanciovat Tc pro Foo?
.. samozřejmě mám na mysli za předpokldau, že neexistuje duplicitní/konfliktní instance.

28
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 11:12:21 »
Případně ještě se zeptám obecně: Jaké jsou v Haskellu a Idrisu pravidla ohledně koherence? Dejme tomu, že ve svém programu používám knihovny libA a libB, knihovna libA definuje typeclass Tc a libB typ Foo. Můžu instanciovat Tc pro Foo?

29
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 11:02:56 »
Kód: [Vybrat]
total main : IO ()
main = do
    Just n <- readNat | _ => putStrLn "not a natural number"
    let Yes _ = decIsEven n | _ => putStrLn "n isn't even"
    Just m <- readNat | _ => putStrLn "not a natural number"
    let Yes _ = decIsEven m | _ => putStrLn "m isn't even"
    putStrLn $ "Hello: " ++ (show (sumx n m))

Tady by mě zajímalo, jaká jsou pravidla pro scoping té anonymní instance IsEven. Jak daleko může být od místa volání sumx, aby to kompilátor ještě našel / dosadil implicitní arg? Pokud by to bylo v externím kódu, muselo by se to třeba nějak importovat?

30
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 01:44:32 »
Co znamená ta 0 mezi `auto` a jménem implicitního argumentu?
To je multiplicita (viz kvantitativní typový systém). Nula znamená erasure :)
Aha, ok. Dalo by se to principelně doplnit syntaxí s anonymním argumentem, něco jako `auto _ : IsEven n`? Anonymní arugment by nešlo ve funkci použít, tj. efektivně multiplicita 0. Edit: Resp. asi lepší syntaxe by byla `auto 0: IsEven n`.

Stran: 1 [2] 3 4 5