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 - BoneFlute

Stran: 1 2 [3] 4 5 ... 133
31
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 13:37:10 »
Akorát cena za to je, že ty šikovné typy pro ověření musí někdo napsat.
Já tu třídu v C# taky musel napsat.

32
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 13:16:24 »
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í.
Nebo ty tam vidíš někde, že bych tu výjimku, kterou Even vyhazuje odchytával?

33
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 13:11:01 »
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ů...

Na technické detaily ti zvrací alík.

Liší se hlavně záruky.
V C# můžu tu validaci zapomenout. Skončí mi to výjimkou u assert v run-time. Zatímco v Idrisu mi to přinutí tu kontrolu udělat compile-time. To je ta zásadní motivace, proč se všechny ty šaškárny s typama dělají.

Idris mě přinutí tu kontrolu udělat.
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.

Do třetice:
V Idrisu (a Haskellu) - nalinkuju si nějakou knihovnu, použiju a pokusím se přeložit, a ono to začne řvát tady a tady a tady a tady... opravím, přeložím, běží.

V C# - nalinkuju si nějakou knihovnu, použiju, a úspěšně přeložím, spustím, a ono to začne padat tehdy, a tehdy, a tehdy, a tehdy... nejlépe u zákazníka.

34
Vývoj / Re:Je Rust jazyk budoucnosti?
« 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í.

35
Vývoj / Re:Je Rust jazyk budoucnosti?
« 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;
}
}

36
Vývoj / Re:Je Rust jazyk budoucnosti?
« 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

37
Vývoj / Re:Je Rust jazyk budoucnosti?
« 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ěď.

38
Vývoj / Re:Je Rust jazyk budoucnosti?
« 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?

39
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 01:22:43 »
Tam ten kód funguje, zkus to zkopírovat ještě jednou do zdrojáku.

Kód: [Vybrat]
SuccSuccIsEven : IsEven n -> IsEven (2+n) -- funguje
versus
Kód: [Vybrat]
SuccSuccIsEven : IsEven n -> IsEven (n+2) -- nefunguje
>:(

Tak mám spousta více či méně blbejch otázek:

1/ proč tam musím uvádět {auto 0 prf1 : IsEven n} ?
2/ proč je to mezi šipkama? Ta funkce má jen tři parametry, ne pět.
3/ co to vlastně to {auto 0 prf1 : IsEven n} říká?
4/ proč tam ten prf1 musí být, když tam nikde nefiguruje? Proč musí být různý? prf1 a prf2

40
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 01:00:35 »
IsEven musí mít typový parametr. A je to jen kontrakt, že ten parametr je sudé číslo. Nějak takto to bude fungovat:
Kód: [Vybrat]
data IsEven : Nat -> Type where
    ZIsEven  : IsEven 0
    SuccSuccIsEven : IsEven n -> IsEven (2+n)

sumx : (n : Nat) -> {auto 0 prf1 : IsEven n} -> (m : Nat) -> {auto 0 prf2 : IsEven m} -> Nat
sumx n m = n + m
No tak to je teda hnusný zápis  :P :) Pak mi musíš vysvětlit, proč to tam je.

Bohužel: "Can't find an implementation for IsEven 2."
Jakou máš verzi Idrisu? Funguje to v 0.6.0.

idris2 --version # 0.6.0
Z idris2-0.6.0.tgz, stažený z webu, kompiluju na Fedoře.

41
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 07. 12. 2022, 00:32:53 »
IsEven musí mít typový parametr. A je to jen kontrakt, že ten parametr je sudé číslo. Nějak takto to bude fungovat:
Kód: [Vybrat]
data IsEven : Nat -> Type where
    ZIsEven  : IsEven 0
    SuccSuccIsEven : IsEven n -> IsEven (2+n)

sumx : (n : Nat) -> {auto 0 prf1 : IsEven n} -> (m : Nat) -> {auto 0 prf2 : IsEven m} -> Nat
sumx n m = n + m

No tak to je teda hnusný zápis  :P :) Pak mi musíš vysvětlit, proč to tam je.

Bohužel: "Can't find an implementation for IsEven 2."


42
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 06. 12. 2022, 23:54:00 »
Takže ve výsledku jsem fanoušek přístupu, kdy se abstrakce vyvíjí trochu pomaleji, návrh jazyka zůstává nohama trochu více na zemi* a zároveň s tím se vyvíjí rovnou i schopnost produkovat pokudmožno optimální kód pro reálná CPU, protože to umožňuje ty zkušenosti s generováním strojového kódu reflektovat do návrhu těch abstrakcí, do návrhu IR reprezentací atd.

To je jen jedna metrika: optimalizovaný kód. 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

43
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 06. 12. 2022, 23:48:04 »
Chceš na to ještě nějak navázat? Otázky k tomuto konkrétnímu příkladu?

Kód: [Vybrat]
data IsEven : Nat -> Type where
    ZIsEven  : IsEven 0
    SuccSuccIsEven : IsEven n -> IsEven (n+2)


sumx : IsEven -> IsEven -> IsEven
-- sumx : Int -> Int -> Int
sumx x y = x * y


main : IO ()
main = putStrLn $ "Hello: " ++ (show (sumx 2 4))

Ještě mi něco schází vědět?: "Mismatch between: Nat -> Type and Type."

44
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 06. 12. 2022, 23:40:05 »
Rust je schopen zajistit, že nedojde k memory leaku.
Tady nevim přesně jak to myslíš, ale absence leaků nepatří do záruk Rust safe kódu, leaking není unsafe. OTOH  díky různým vlastnostem neleakující kód není nějak těžké psát.

Je schopen Rust vunutit, aby text byl neprázdný?
To je to samé jako utf8-korektnost, ne? Spíš rovnou vysvětli, kam tím míříš, a já zkusim líp odpovědět.

Nehledej v tom žádný podraz ani žádnou složitost. Čti přesně co píšu.

Rust poskytuje záruky. Proto ho mám rád.
Haskell, Idris, etc - poskytují záruky.

Rust u některých věcí není schopen záruky poskytnout. Neumí to.
Java není schopna zaručit, že přeložený kód nepadne na NullException.
Haskell není schopen zaručit... - já nevím, určitě tam něco bude, ale jsem línej to vymejšlet.

Java je méně schopná jak Rust, Rust je méně schopnej jak Haskell (asi - neber mě za slovo).

No, a já se zajímám, kde ta hranice je.

Umí Java vynutit, aby v kódu nenastala situace, že na místě kde je potřeba neprázdný string se objevil prázdný string? Odpověď: ani za zlatý prase.
Umí Java zajistit, aby v kódu nenastala situace, že na místě, kde je třeba sudé číslo přišlo číslo liché? Odpověď: LOL.

Co Rust? Hodně toho umí. Co už neumí? Kde cca stojí ta hranice?

btw: To, že Rust některé záruky nedokáže zajistit je fakt, nikoliv hendikep. I tak je to zjevení, a jsem nadšen, že existuje.

45
Vývoj / Re:Je Rust jazyk budoucnosti?
« kdy: 06. 12. 2022, 22:38:11 »
Je schopen Rust vunutit, aby text byl neprázdný? Haskell to umí
A Idris to umí ještě lépe, nemusíš kvůli tomu definovat nový typ ;)

Teď jsem ve fázi, zda. Jak je jiná otázka.

Třeba to forall mi přišlo poněkud složité oproti přímočarým rozhraním v průmyslových jazycích. Ale je fakt, že to nemám v krvi a mé seznámení s ním bylo jen zběžné, a tak to neumím docenit. Asi to umí víc, nebo to nějak elegantněji zapadá, co já vím.

Stran: 1 2 [3] 4 5 ... 133