Kterým směrem se vydat od C

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Kterým směrem se vydat od C
« Odpověď #90 kdy: 11. 02. 2022, 11:28:41 »
Querier nemuze byt rozhrani, protoze rozhrani nemuzou byt typove parametrizovana, pokud se nepletu.
Pleteš.


Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Kterým směrem se vydat od C
« Odpověď #91 kdy: 11. 02. 2022, 11:33:29 »
Ale může to být "něco" do čeho nevidím a na co můžu zavolat All nebo Filter. Což bych považoval za rozhraní, aspoň v obecném smyslu, ne jako klíčové slovo nějakého jazyka.
V tomto smyslu to je přímo ukázkový příklad rozhraní, jen to nemůže být “interface” v Go, protože obsahuje data. Ale je to skvělý příklad “zero cost abstraction”.

Re:Kterým směrem se vydat od C
« Odpověď #92 kdy: 11. 02. 2022, 12:37:52 »
Querier nemuze byt rozhrani, protoze rozhrani nemuzou byt typove parametrizovana, pokud se nepletu.
Pleteš.
Máš pravdu, v tom dlouhým proposalu jsem to z rychlíku přehlídl. Tímpádem teda jo, dala by se fakt napsat factory factoriovitější :)

Nicméně teda fakt škoda té chybějící parametrizace/přetěžování metod, tohle by bylo hezký, kdyby šlo: https://go.dev/play/p/ikNP4ZIEqx_u?v=gotip

Re:Kterým směrem se vydat od C
« Odpověď #93 kdy: 11. 02. 2022, 12:49:41 »
A skoro mám chuť slovíčkařit a zeptat se, co přesně je ta "opravdová dědičnost". Ale jen skoro ;)
V Go se pomoci embedded struct da udelat "skoro jako dedicnost". Ale nektere vlastnosti dedicnosti to z principu mit nemuze. Napriklad prekryvani implementace v potomkovi. Jak rikam, mel jsem na to nekde explicitni priklad, ale fakt nevim, kam jsem ho zasantrocil :)

Re:Kterým směrem se vydat od C
« Odpověď #94 kdy: 11. 02. 2022, 12:57:16 »
V Go se pomoci embedded struct da udelat "skoro jako dedicnost". Ale nektere vlastnosti dedicnosti to z principu mit nemuze. Napriklad prekryvani implementace v potomkovi. Jak rikam, mel jsem na to nekde explicitni priklad, ale fakt nevim, kam jsem ho zasantrocil :)
Tak jsem nasel aspon vlakno, kde jsme se o tom bavili tady: https://forum.root.cz/index.php?topic=21149.msg310669#msg310669 (plus navazujici prispevky)

Tenhle priklad neni uplne na kost orezana demonstrace toho, co mam ted namysli, ale ta podstata je tam stejna.


BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Kterým směrem se vydat od C
« Odpověď #95 kdy: 11. 02. 2022, 13:00:01 »
protoze rozhrani nemuzou byt typove parametrizovana, pokud se nepletu.
Jen rychlej dotaz: to jako obecně, nebo v kontextu Go?

Re:Kterým směrem se vydat od C
« Odpověď #96 kdy: 11. 02. 2022, 13:01:01 »
Jen rychlej dotaz: to jako obecně, nebo v kontextu Go?
V Go. Ale ani tam to neplati, prehlidl jsem to.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Kterým směrem se vydat od C
« Odpověď #97 kdy: 11. 02. 2022, 13:02:40 »
Jen rychlej dotaz: to jako obecně, nebo v kontextu Go?
V Go. Ale ani tam to neplati, prehlidl jsem to.

Taky. Pardon za smetí.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Kterým směrem se vydat od C
« Odpověď #98 kdy: 11. 02. 2022, 14:31:04 »
protoze rozhrani nemuzou byt typove parametrizovana, pokud se nepletu.
Jen rychlej dotaz: to jako obecně, nebo v kontextu Go?
To byla mýlka, ale v obecném kontextu to je zajímavá otázka, v rozhraních jde mít dva typy genericity: typové parametry a přidružené typy. V detailech se dost liší.

BoneFlute

  • *****
  • 1 981
    • Zobrazit profil
Re:Kterým směrem se vydat od C
« Odpověď #99 kdy: 11. 02. 2022, 14:52:56 »
protoze rozhrani nemuzou byt typove parametrizovana, pokud se nepletu.
Jen rychlej dotaz: to jako obecně, nebo v kontextu Go?
To byla mýlka, ale v obecném kontextu to je zajímavá otázka, v rozhraních jde mít dva typy genericity: typové parametry a přidružené typy. V detailech se dost liší.

Povídej.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Kterým směrem se vydat od C
« Odpověď #100 kdy: 11. 02. 2022, 15:01:23 »
protoze rozhrani nemuzou byt typove parametrizovana, pokud se nepletu.
Jen rychlej dotaz: to jako obecně, nebo v kontextu Go?
To byla mýlka, ale v obecném kontextu to je zajímavá otázka, v rozhraních jde mít dva typy genericity: typové parametry a přidružené typy. V detailech se dost liší.
Povídej.
Já k tomu asi nemám nic objevného, ale v dokumentaci k Rustu bude určitě vysvětlen u traitů rozdíl mezi oběma přístupy.

Snad jen dodám, že pokud je přidružený typ sám generický, pak jazyk může implementovat v obecnosti ony potvory na M (jejichž jméno se tady nevyslovuje) i bez HKT. Ale to je pro tebe asi nezajímavé, ty už jsi v typových systémech dál :)

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Kterým směrem se vydat od C
« Odpověď #101 kdy: 11. 02. 2022, 15:14:46 »
v rozhraních jde mít dva typy genericity: typové parametry a přidružené typy
Povídej.
BTW jeden rozdíl je, že konkrétní typ může implementovat generické rozhraní víckrát, ale rozhraní s přiduženými typy jen jednou. V Rustu se tohle ve standardní knihovně dost využívá.

Re:Kterým směrem se vydat od C
« Odpověď #102 kdy: 11. 02. 2022, 15:59:24 »
v dokumentaci k Rustu bude určitě vysvětlen u traitů rozdíl mezi oběma přístupy.
Jj, https://doc.rust-lang.org/rust-by-example/generics/assoc_items/the_problem.html a následující (14.8.2).

Je to zajímavý, neznal jsem, dík za upozornění.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Kterým směrem se vydat od C
« Odpověď #103 kdy: 11. 02. 2022, 17:13:07 »
Tady ještě pro inspiraci, k čemu se hodí přidružené typy:
Kód: [Vybrat]
fn bind<U: Clone, F: Fn(&Self::In) -> Self::Out<U>>(&self, f: &F) -> Self::Out<U>;

fn join<U: Clone>(&self) -> Self::Out<U>
    where
        Self::In: Is<Type = Self::Out<U>>,
    {
        self.bind(&|x| Is::into(x.clone()))
    }
Dlužno podotknout, že na rozdíl od Haskellu to je příšerně ukecané.

Idris

  • *****
  • 2 286
    • Zobrazit profil
    • E-mail
Re:Kterým směrem se vydat od C
« Odpověď #104 kdy: 11. 02. 2022, 19:41:37 »
A skoro mám chuť slovíčkařit a zeptat se, co přesně je ta "opravdová dědičnost".
To je otázka do pranice :) Dědičností je hodně. Dědičnost rozhraní má kde co, třeba ObjC, Go nebo Rust (všechny tři dokonce vícenásobnou). U konkrétních typů se pak rozlišuje datová a konceptuální, kteréžto jdou v teorii (typů) tak trochu proti sobě. Která je “opravdová”? U multimetod se to komplikuje ještě více. To je jako ptát se, která barva je opravdová, červená, zelená nebo modrá? :)