Je Rust jazyk budoucnosti?

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #420 kdy: 07. 12. 2022, 15:17:23 »
jak v Idrisu handluješ chybu alokace paměti. V Rustu to jde.
Rust v tomto případě dělá abort (ani ne panic).


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

BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #422 kdy: 07. 12. 2022, 15:39:28 »
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.
Ten problém není ve výjimkách.

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.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #423 kdy: 07. 12. 2022, 15:39:46 »
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...
Jo, ty definice sdílí se SPARKem (a jinými superbezpečnými jazyky pro bezpečnostně kritické aplikace).

Idris

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


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

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #426 kdy: 07. 12. 2022, 16:21:23 »
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é :)
Java ani nemá hodnotvé typy
No a co? Ty ovlivňují výkon, ale nijak nesouvisí s bezpečností kódu.

BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #427 kdy: 07. 12. 2022, 16:27:35 »
plus problém, že všechno je za nullable referencí, takže vrácení Either může být null... Oproti tomu v C#
No, ale od které verze? V praxi to vůbec nepozoruju.
A třeba to not null bych fakt moc rád používal.


Taky má AFAIK už nějaký pattern matching...
Ano. Nějaký.

BoneFlute

  • *****
  • 1 987
    • Zobrazit profil
Re:Je Rust jazyk budoucnosti?
« Odpověď #428 kdy: 07. 12. 2022, 17:35:34 »
plus problém, že všechno je za nullable referencí, takže vrácení Either může být null... Oproti tomu v C#
No, ale od které verze? V praxi to vůbec nepozoruju.
A třeba to not null bych fakt moc rád používal.
Tak tady přiznávám svou neznalost. Když místo class použiju struct, což by mělo být podle docky hodnotový typ, tak to skutečně nelze vytvořit null. A je to i v naší staré code base. S tím si budu hrát.

Díky Králík!

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

Re:Je Rust jazyk budoucnosti?
« Odpověď #430 kdy: 07. 12. 2022, 19:49:59 »
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...

Jen pro info... java ma pattern matching... a value objects (primitive classes) jsou na ceste... JEP 401

Re:Je Rust jazyk budoucnosti?
« Odpověď #431 kdy: 07. 12. 2022, 20:14:00 »
Jen pro info... java ma pattern matching...
Měl jsem dojem, že umí matchovat jenom typ objektu...

a value objects (primitive classes) jsou na ceste... JEP 401
To je zajímavé, je fajn, že se něco děje po tom, co vallhala nedopadla... Nicméně v tomhle případě by nám to nepomohlo, protože jestli to dobře chápu, ty typy nebudou moct být generické...

Re:Je Rust jazyk budoucnosti?
« Odpověď #432 kdy: 07. 12. 2022, 21:05:36 »
Jen pro info... java ma pattern matching...
Měl jsem dojem, že umí matchovat jenom typ objektu...

Ma Guarded patterns a destructuring (aspon ve switch):
Kód: [Vybrat]

    record Person(String firstname, String surname) {}
    record Couple(Person p1, Person p2) {}

    public static void main(String[] args) {
        Person daddy = new Person("John", "Doe");
        Person mommy = new Person("Jane", "Doe");
        Person uncle = new Person("John", "Apples");


        var objects = Arrays.asList(
                new Couple(daddy, mommy),
                new Couple(mommy, daddy),
                new Couple(uncle, daddy),
                10,
                "Random string");

        objects.stream()
                .map(i -> switch (i) {
                    case Couple(Person p1, Person p2)
                            when p1.firstname.equals(p2.firstname)    -> (Supplier<String>) () -> "Split it in half between " + p1 + " and " + p2;
                    case Couple c
                            when c.p1.firstname.equals("John")        -> (Supplier<String>) () -> "Daddy is paying";
                    case Couple c
                            when c.p1.firstname.equals("Jane")        -> (Supplier<String>) () -> "Mommy is paying";
                    case Integer ignored                              -> (Supplier<String>) () -> "What are you doing here Integer";
                    case Object ignored                               -> (Supplier<String>) () -> "Runners... call 911";
                })
                .forEach(i -> System.out.println(i.get()));
    }

a value objects (primitive classes) jsou na ceste... JEP 401
To je zajímavé, je fajn, že se něco děje po tom, co vallhala nedopadla... Nicméně v tomhle případě by nám to nepomohlo, protože jestli to dobře chápu, ty typy nebudou moct být generické...
Myslim, ze je to porad valhalla... A nevim jestli budou moct byt genericke... spis ne

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Je Rust jazyk budoucnosti?
« Odpověď #433 kdy: 08. 12. 2022, 00:59:56 »
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.
Ten problém není ve výjimkách.
A v čem?

Re:Je Rust jazyk budoucnosti?
« Odpověď #434 kdy: 08. 12. 2022, 07:18:52 »
Ma Guarded patterns a destructuring (aspon ve switch):
Kód: [Vybrat]

    record Person(String firstname, String surname) {}
    record Couple(Person p1, Person p2) {}

    public static void main(String[] args) {
        Person daddy = new Person("John", "Doe");
        Person mommy = new Person("Jane", "Doe");
        Person uncle = new Person("John", "Apples");


        var objects = Arrays.asList(
                new Couple(daddy, mommy),
                new Couple(mommy, daddy),
                new Couple(uncle, daddy),
                10,
                "Random string");

        objects.stream()
                .map(i -> switch (i) {
                    case Couple(Person p1, Person p2)
                            when p1.firstname.equals(p2.firstname)    -> (Supplier<String>) () -> "Split it in half between " + p1 + " and " + p2;
                    case Couple c
                            when c.p1.firstname.equals("John")        -> (Supplier<String>) () -> "Daddy is paying";
                    case Couple c
                            when c.p1.firstname.equals("Jane")        -> (Supplier<String>) () -> "Mommy is paying";
                    case Integer ignored                              -> (Supplier<String>) () -> "What are you doing here Integer";
                    case Object ignored                               -> (Supplier<String>) () -> "Runners... call 911";
                })
                .forEach(i -> System.out.println(i.get()));
    }
No.. slušelo by se říct, že je to "preview feature" v nejnovější JDK 19 (tj. běžně se to zatím použít nedá a možná to nakonec ani nebude vypadat takhle) a funguje to jenom na recordy a jen ve switchi (což jsi teda napsal) - ve srovnání s tím, co umí třeba jenom Scala, je to stále úsměvný. Btw vůbec nechápu, proč je tam ten Supplier, zbytečně to ten příklad komplikuje, proč to neni jenom
Kód: [Vybrat]
objects.stream()
                .map(it -> switch (it) {
                    case Couple(Person p1, Person p2)
                            when p1.firstname.equals(p2.firstname)    -> "Split it in half between " + p1 + " and " + p2;
                    case Couple c
                            when c.p1.firstname.equals("John")        -> "Daddy is paying";
                    case Couple c
                            when c.p1.firstname.equals("Jane")        -> "Mommy is paying";
                    case Integer ignored                              -> "What are you doing here Integer";
                    case Object ignored                               -> "Runners... call 911";
                })
                .forEach(it -> System.out.println(it));