Je Rust jazyk budoucnosti?

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #405 kdy: 07. 12. 2022, 14:34:01 »
Akorát cena za to je,
Imho statické typy mají jiné problémy.
Namátkou:
- jsou náročné na čas výpočtu
- jsou náročné na vývoj jazyka
- jsou náročné na skill uživatele
- lidé nechápou co to je statické typování
Doplnění: Jsou náročné na čas výpočtu v době překladu, za běhu ne. Nicméně SPARK se svou formální verifikací je na tom hůře, kdysi na nějaké přednášce někdo z NASA vykládal, jak se jim kód překládá týden. Ale pak věděli, že je absolutně bezpečný :)

Ten zbytek platí, jde to shrnout do jednoho bodu o Inkových “mentálních obzorech”.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #406 kdy: 07. 12. 2022, 14:35:43 »
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...
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?
Slušný vývojář tu výjimku odchytí a vypíše třeba “Sorry vole error”.

Re:Je Rust jazyk budoucnosti?
« Odpověď #407 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"` ...

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #408 kdy: 07. 12. 2022, 14:36:22 »
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?

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #409 kdy: 07. 12. 2022, 14:37:21 »
Jsou náročné na čas výpočtu v době překladu, za běhu ne.
Ano, ano, sorry.
A platí o opak, že za běhu by to mělo být rychlejší. Žel, jak nám Králík ukázal, tak jen teoreticky. Což je taky smutné - takovej nevyužitej potenciál.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #410 kdy: 07. 12. 2022, 14:38:42 »
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
Teď jsi na to kápnul, ten program v Idrisu se nepřeloží, pokud nejsou správně ošetřeny všechny chyby.

Re:Je Rust jazyk budoucnosti?
« Odpověď #411 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`...

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #412 kdy: 07. 12. 2022, 14:40:38 »
Jsou náročné na čas výpočtu v době překladu, za běhu ne.
Ano, ano, sorry.
A platí o opak, že za běhu by to mělo být rychlejší.
Taky že je, například v Julii (ta je extrabuřt, je dynamicky typovaná, ale pozná stabilně otypovaný kód a odvodí si všechny typy).

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #413 kdy: 07. 12. 2022, 14:42:09 »
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`...
Lepší by bylo si tu slušnost od autora kódu vynutit: Kašleš na chyby? Tak to mi můžeš, syntax error :)

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #414 kdy: 07. 12. 2022, 14:45:42 »
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...
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?
Slušný vývojář tu výjimku odchytí a vypíše třeba “Sorry vole error”.
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"` ...
Ano, je to něco jiného. To je rozdíl mezi Idrisem a C#.

Idris:
kompilátor: hele, zapomněl jsi tady zohlednit tenhle scénář
já: nezajímá
kompilátor: mě taky ne, nepustím tě dál
já: ale já to chci přeložit.
kompilátor: nezajímá
já: štveš mě
kompilátor: nezajímá
já: grrr, SO, ha, mám to, musím tam narvat error()
kompilátor: když myslíš
já: :P

C#
kompilátor: přeloženo
reviewer: hele, hmm, neměl by si tady zohlednit tenhle scénář?
já: to se nestane
reviewer: no, já nevím
já: hele, šéfe, von mě zdržuje
šéf: to je v pořádku, pusť to
klient: ehm, pánové, to si to po sobě neumíte zkontrolovat? Padá to při třech scénářích
reviewer: třech?! Kde?

Re:Je Rust jazyk budoucnosti?
« Odpověď #415 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í...

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #416 kdy: 07. 12. 2022, 14:51:09 »
Věřim ti, že obecně Idris více tlačí uživatele do ošetření chyb, ale ten rozdíl je kvantitativní...
Představuji si nástroj pro Rust, který projede kód a hledá výskyty slov panic().
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...

Re:Je Rust jazyk budoucnosti?
« Odpověď #417 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.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #418 kdy: 07. 12. 2022, 15:05:32 »
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 :)
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.).

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #419 kdy: 07. 12. 2022, 15:13:53 »
V Idrisu jsem taky našel funkci á la panic (builtins.idris_crash).
Jenže to normálně použít nejde, jen ve funkci, která je explicitně partial, což se prakticky nepoužívá (a v produkci nikdy). Takže tohle se taky vůbec nepřeloží.