Conditional conformance v OOP



andy

Re:Conditional conformance v OOP
« Odpověď #16 kdy: 19. 02. 2018, 09:46:14 »
Koukám teď na Swift a jeho "conditional conformance". Má otázka: v jakých dalších mainstreamových jazycích se vyskytuje? Podle mých skromných znalostí to C++ ani Java nemá, ale neznám moc třeba Rust, Kotlin atd.
V Haskellu. A je to dost geniální vlastnost, když se to použije rekurzivně, tak to vypadá jako černá magie.

v

Re:Conditional conformance v OOP
« Odpověď #17 kdy: 19. 02. 2018, 11:07:28 »
Koukám teď na Swift a jeho "conditional conformance". Má otázka: v jakých dalších mainstreamových jazycích se vyskytuje? Podle mých skromných znalostí to C++ ani Java nemá, ale neznám moc třeba Rust, Kotlin atd.
V Haskellu. A je to dost geniální vlastnost, když se to použije rekurzivně, tak to vypadá jako černá magie.
jako že "instance (A b) => A (C b)"?

Labrat

Re:Conditional conformance v OOP
« Odpověď #18 kdy: 19. 02. 2018, 13:01:00 »
Jako důvod to je debilní, oficiálně to je ale na TO DO seznamu, jen s nízkou prioritou. Mě Swift moc nebere, protože je dost Apple-centric a já píšu hlavně pro Linux, ale HKT používám v C++ (ať žije statický polymorfismus) a rozhodně bych rád, aby se rozšířily.

Jakže děláte HKT v C++? To by mě docela zajímalo.
Částečnou specializací šablon. Jdou tak napsat generické monády. Spíš jsem si jen hrál, když jsem to chtěl v C++ napsat haskellím stylem. Inspirací byl článek o F-algebrách v C++.

andy

Re:Conditional conformance v OOP
« Odpověď #19 kdy: 19. 02. 2018, 13:12:29 »
Koukám teď na Swift a jeho "conditional conformance". Má otázka: v jakých dalších mainstreamových jazycích se vyskytuje? Podle mých skromných znalostí to C++ ani Java nemá, ale neznám moc třeba Rust, Kotlin atd.
V Haskellu. A je to dost geniální vlastnost, když se to použije rekurzivně, tak to vypadá jako černá magie.
jako že "instance (A b) => A (C b)"?
Přesně.


Labrat

Re:Conditional conformance v OOP
« Odpověď #20 kdy: 19. 02. 2018, 13:26:47 »
Koukám teď na Swift a jeho "conditional conformance". Má otázka: v jakých dalších mainstreamových jazycích se vyskytuje? Podle mých skromných znalostí to C++ ani Java nemá, ale neznám moc třeba Rust, Kotlin atd.
Ono nejen ta konformance, celý koncept extensions je velmi mocný, protože umožňuje vzít jakýkoliv typ a rozšířit ho pro libovolný protokol bez dědění. A to vše s typovou kontrolou při překladu.

10xCoder

Re:Conditional conformance v OOP
« Odpověď #21 kdy: 19. 02. 2018, 17:54:01 »
Jako důvod to je debilní, oficiálně to je ale na TO DO seznamu, jen s nízkou prioritou. Mě Swift moc nebere, protože je dost Apple-centric a já píšu hlavně pro Linux, ale HKT používám v C++ (ať žije statický polymorfismus) a rozhodně bych rád, aby se rozšířily.

Jakže děláte HKT v C++? To by mě docela zajímalo.
V C++ přece může být parametrem šablony šablona, což je přesně definice HKT. Žádná hluboká věda v tom není a vůbec nemusíme zmiňovat fujmonády :)

n

Re:Conditional conformance v OOP
« Odpověď #22 kdy: 19. 02. 2018, 19:42:18 »
Jako důvod to je debilní, oficiálně to je ale na TO DO seznamu, jen s nízkou prioritou. Mě Swift moc nebere, protože je dost Apple-centric a já píšu hlavně pro Linux, ale HKT používám v C++ (ať žije statický polymorfismus) a rozhodně bych rád, aby se rozšířily.

Jakže děláte HKT v C++? To by mě docela zajímalo.
V C++ přece může být parametrem šablony šablona, což je přesně definice HKT. Žádná hluboká věda v tom není a vůbec nemusíme zmiňovat fujmonády :)

jj, jak jsem pastnul vyse: https://stackoverflow.com/questions/2565097/higher-kinded-types-with-c
kde je teda sice zrovna priklad monady, ale whatever... :)
templatama se da v c++ napsat vsecko, i kdyz teda pro nezkuseneho je to dost tezce citelne :) ..ale zas pouziti uz muze byt celkem pekne...

Idris

  • *****
  • 1 050
    • Zobrazit profil
    • E-mail
Re:Conditional conformance v OOP
« Odpověď #23 kdy: 19. 02. 2021, 22:25:18 »
U Swiftu je k tomu diskuse na fóru vývojářů. Tvrdí, že většina lidí by to nepoužívala, protože to nechápe.
Totéž tvrdí vývojáři Rustu. Možná, že konkrétně v případě Swiftu na tom něco je, přece jenom je to jazyk určený především na vývoj appek pro iPhone, takže HKT a monádám v této cílové skupině asi hodně lidí opravdu moc nerozumí (ačkoli nevím, jestli to je dobrý důvod pro to, aby to nebylo).
Tohle je sice hodně zrezivělé (pun intended) vlákno, ale ať je to v kontextu: Rust už HKT má.

Re:Conditional conformance v OOP
« Odpověď #24 kdy: 20. 02. 2021, 09:01:29 »
Jestli tomu dobře rozumím, tak to je jako koncepty v C++20. Což je v podstatě jen syntaxe pro SFINAE, který se v C++ používá od doby zavedení šablon.

Re:Conditional conformance v OOP
« Odpověď #25 kdy: 20. 02. 2021, 09:39:23 »
Je ale spousta věcí, včetně plné podpory monád, které tak doopravdy implementovat nejdou. Je to velká škoda a je zajímavé, že i Swift se rozhodl se takto omezit. Rád bych věděl, co návrhářům moderních jazyků na typech vyšších druhů tolik vadí?
U Swiftu je k tomu diskuse na fóru vývojářů. Tvrdí, že většina lidí by to nepoužívala, protože to nechápe.

Rust používá monády a má na nich postaven systém řešení chyb. Nemyslím si že jsou monády nepochopitelné, není to zrovna nic dvakrát složitého.

Idris

  • *****
  • 1 050
    • Zobrazit profil
    • E-mail
Re:Conditional conformance v OOP
« Odpověď #26 kdy: 20. 02. 2021, 12:41:13 »
Jestli tomu dobře rozumím, tak to je jako koncepty v C++20. Což je v podstatě jen syntaxe pro SFINAE, který se v C++ používá od doby zavedení šablon.
V Rustu to je přes přifařené typy. Jenže ty původně nebyly generické, takže nešlo implementovat HKT. Teď už jsou, takže to už jde.