Je Rust jazyk budoucnosti?

BoneFlute

  • *****
  • 2 155
Re:Je Rust jazyk budoucnosti?
« Odpověď #375 kdy: 07. 12. 2022, 03:59:35 »
Citace od: Idris kdy 07. 12. 2022, 01:58:43
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

  • ****
  • 270
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 286
Re:Je Rust jazyk budoucnosti?
« Odpověď #377 kdy: 07. 12. 2022, 08:37:12 »
Citace od: BoneFlute kdy 07. 12. 2022, 03:59:35
Citace od: Idris kdy 07. 12. 2022, 01:58:43
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á.

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

  • *****
  • 2 155
Re:Je Rust jazyk budoucnosti?
« Odpověď #378 kdy: 07. 12. 2022, 10:44:34 »
Citace od: oss kdy 07. 12. 2022, 08:04:08
co sa da aj v tej heitovanej jave, ci C#
Tak se předveď, ne?


Citace od: oss kdy 07. 12. 2022, 08:04:08
poradia so vstupmy od pouzivatela, ci ineho systemu, kde moze prist akakolvek blbost.
Na tuto otázku tu již byla odpověď.

oss

  • ****
  • 270
Re:Je Rust jazyk budoucnosti?
« Odpověď #379 kdy: 07. 12. 2022, 10:54:40 »
Citace od: BoneFlute kdy 07. 12. 2022, 10:44:34
Tak se předveď, ne?

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

Citace od: BoneFlute kdy 07. 12. 2022, 10:44:34
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 »
Citace od: Idris kdy 07. 12. 2022, 08:37:12

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 »
Citace od: oss 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.
Ú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:
CitaceMůžu instanciovat Tc pro Foo?
.. samozřejmě mám na mysli za předpokldau, že neexistuje duplicitní/konfliktní instance.

Idris

  • *****
  • 2 286
Re:Je Rust jazyk budoucnosti?
« Odpověď #383 kdy: 07. 12. 2022, 11:19:36 »
Citace od: Králík kdy 07. 12. 2022, 11:02:56
Citace od: Idris kdy 07. 12. 2022, 08:37:12

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

  • *****
  • 2 155
Re:Je Rust jazyk budoucnosti?
« Odpověď #384 kdy: 07. 12. 2022, 11:35:40 »
Citace od: oss kdy 07. 12. 2022, 10:54:40
Citace od: BoneFlute kdy 07. 12. 2022, 10:44:34
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.

Citace od: oss kdy 07. 12. 2022, 10:54:40
Citace od: BoneFlute kdy 07. 12. 2022, 10:44:34
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

  • ****
  • 270
Re:Je Rust jazyk budoucnosti?
« Odpověď #385 kdy: 07. 12. 2022, 11:36:44 »
Citace od: Králík kdy 07. 12. 2022, 11:13:43
Citace od: oss 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.
Ú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

  • ****
  • 270
Re:Je Rust jazyk budoucnosti?
« Odpověď #386 kdy: 07. 12. 2022, 11:38:41 »
Citace od: BoneFlute kdy 07. 12. 2022, 11:35:40
Citace od: oss kdy 07. 12. 2022, 10:54:40
Citace od: BoneFlute kdy 07. 12. 2022, 10:44:34
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

  • *****
  • 2 155
Re:Je Rust jazyk budoucnosti?
« Odpověď #387 kdy: 07. 12. 2022, 11:55:25 »
Citace od: oss kdy 07. 12. 2022, 11:36:44
Citace od: Králík kdy 07. 12. 2022, 11:13:43
Citace od: oss 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.
Ú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"


Citace od: oss kdy 07. 12. 2022, 11:38:41
Citace od: BoneFlute kdy 07. 12. 2022, 11:35:40
Citace od: oss kdy 07. 12. 2022, 10:54:40
Citace od: BoneFlute kdy 07. 12. 2022, 10:44:34
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?

[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

  • ****
  • 270
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:

new Even(input);

Je ekvivalentne.


let Yes _ = decIsEven n | _ => putStrLn "n isn't even"

BoneFlute

  • *****
  • 2 155
Re:Je Rust jazyk budoucnosti?
« Odpověď #389 kdy: 07. 12. 2022, 12:24:56 »
Citace od: oss kdy 07. 12. 2022, 12:14:00
Viem, kam smerujes, ale ked sa bavime o vstupoch od pouzivatela, tak:

new Even(input);

Je ekvivalentne.


let Yes _ = decIsEven n | _ => putStrLn "n isn't even"

Není.