Je Rust jazyk budoucnosti?

BoneFlute

  • *****
  • 1 960
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #375 kdy: 07. 12. 2022, 03:59:35 »
Kdybych tam cpal čísla ze vstupu, musel bych si to ověření sudosti (prfX) vyrobit sám a předat ho explicitně.

Mohl by si mi ukázat, jak by to vypadalo?


oss

  • ***
  • 166
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #376 kdy: 07. 12. 2022, 08:04:08 »
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.

Idris

  • *****
  • 2 260
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #377 kdy: 07. 12. 2022, 08:37:12 »
Kdybych tam cpal čísla ze vstupu, musel bych si to ověření sudosti (prfX) vyrobit sám a předat ho explicitně.
Mohl by si mi ukázat, jak by to vypadalo?
Jasně, včera jsem to už zkoušel, abych viděl, jak se současná verze chová.
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))
Když tam nebude to let Yes ..., tak kód neprojde typovou kontrolou.

P.S. Psal jsem "předat explicitně", ale ve verzi 0.6.0 to už zřejmě není nutné, překladač si to ověření najde v ASTu.

BoneFlute

  • *****
  • 1 960
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #378 kdy: 07. 12. 2022, 10:44:34 »
co sa da aj v tej heitovanej jave, ci C#
Tak se předveď, ne?


poradia so vstupmy od pouzivatela, ci ineho systemu, kde moze prist akakolvek blbost.
Na tuto otázku tu již byla odpověď.
« Poslední změna: 07. 12. 2022, 10:47:34 od BoneFlute »

oss

  • ***
  • 166
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #379 kdy: 07. 12. 2022, 10:54:40 »
Tak se předveď, ne?

Pomocou value objektu (co realne aspon v C# nemusi byt objekt). To hadam takym amchrom na typy vysvetlovat nemusim.

Na tuto otázku tu již byla odpověď.

Mozes sem dat odkaz, lebo dost sa stracam v tejto diskusii, kedze sa tu hadate o milion veciach.


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

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

Re:Je Rust jazyk budoucnosti?
« Odpověď #382 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.
« Poslední změna: 07. 12. 2022, 11:19:39 od Králík »

Idris

  • *****
  • 2 260
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #383 kdy: 07. 12. 2022, 11:19:36 »
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?
To nevím, specifikované to není a závisí to na verzi překladače (novější jsou chytřejší). Když to překladač nenajde, musí se předat explictně {prf1 = isevenN}.

BoneFlute

  • *****
  • 1 960
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #384 kdy: 07. 12. 2022, 11:35:40 »
Tak se předveď, ne?

Pomocou value objektu (co realne aspon v C# nemusi byt objekt). To hadam takym amchrom na typy vysvetlovat nemusim.
Musíš. Protože tvrdím, že to nejde. Možná nechápeš zadání, a myslíš si, že když mi to vyhodí výjimku, že číslo není sudé, tak, že je splněno.

Na tuto otázku tu již byla odpověď.

Mozes sem dat odkaz, lebo dost sa stracam v tejto diskusii, kedze sa tu hadate o milion veciach.
https://forum.root.cz/index.php?topic=23802.msg380723#msg380723

oss

  • ***
  • 166
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #385 kdy: 07. 12. 2022, 11:36:44 »
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...

Vdaka za odpoved.

No v tom pripade mi tieto hadky nad typovym systemom pridu dost zbytocne.

oss

  • ***
  • 166
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #386 kdy: 07. 12. 2022, 11:38:41 »
Tak se předveď, ne?

Pomocou value objektu (co realne aspon v C# nemusi byt objekt). To hadam takym amchrom na typy vysvetlovat nemusim.
Musíš. Protože tvrdím, že to nejde. Možná nechápeš zadání, a myslíš si, že když mi to vyhodí výjimku, že číslo není sudé, tak, že je splněno.

Vid kralikovu odpoved.
Trik je v tom, ze instancia daneho value objektu nemoze vzniknut pokial sa nejedna o pare cislo.

BoneFlute

  • *****
  • 1 960
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #387 kdy: 07. 12. 2022, 11:55:25 »
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...

Vdaka za odpoved.

No v tom pripade mi tieto hadky nad typovym systemom pridu dost zbytocne.
Ale jistě. Jak jsem psal tady: https://forum.root.cz/index.php?topic=23802.msg380764#msg380764
"Java nám ale kdysi ukázala, že v mnoha případech po optimalizovaném kódu na rychlost není taková poptávka jak bychom si možná přály. Zatímco po bezpečné kódu ano (Scala). A abych byl hodně cynický, tak ona možná není nijak zvláštní poptávka ani po bezpečném kódu (Clojure, C#, JS)  ;D"


Tak se předveď, ne?

Pomocou value objektu (co realne aspon v C# nemusi byt objekt). To hadam takym amchrom na typy vysvetlovat nemusim.
Musíš. Protože tvrdím, že to nejde. Možná nechápeš zadání, a myslíš si, že když mi to vyhodí výjimku, že číslo není sudé, tak, že je splněno.

Vid kralikovu odpoved.
Trik je v tom, ze instancia daneho value objektu nemoze vzniknut pokial sa nejedna o pare cislo.
Třeba takhle?

Kód: [Vybrat]
[TestMethod]
public void Trik()
{
var input = 3;
var a = new Even(input);
var res = Sum(a, new Even(2));
}



private Even Sum(Even a, Even b)
{
}



class Even
{
private readonly int val;

public Even(int val)
{
assertEven(val);
this.val = val;
}
}

oss

  • ***
  • 166
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #388 kdy: 07. 12. 2022, 12:14:00 »
Viem, kam smerujes, ale ked sa bavime o vstupoch od pouzivatela, tak:

Kód: [Vybrat]
new Even(input);
Je ekvivalentne.

Kód: [Vybrat]
let Yes _ = decIsEven n | _ => putStrLn "n isn't even"

BoneFlute

  • *****
  • 1 960
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #389 kdy: 07. 12. 2022, 12:24:56 »
Viem, kam smerujes, ale ked sa bavime o vstupoch od pouzivatela, tak:

Kód: [Vybrat]
new Even(input);
Je ekvivalentne.

Kód: [Vybrat]
let Yes _ = decIsEven n | _ => putStrLn "n isn't even"
Není.