Programovanie a modne trendy?

lopata

Re:Programovanie a modne trendy?
« Odpověď #165 kdy: 01. 09. 2017, 08:19:43 »
Už jsem to tady psal víckrát: Erlang vynucuje imutabilní data => máš jistotu, že jakékoliv odkazy (reference) v jakékoliv datové struktuře vedou jenom směrem "dozadu" (ke starším datům) a i od nich dál jenom stejným směrem. Pokud máš imutabilní objekt v jiném jazyce, může obsahovat odkaz na mutabilní data => jistotu nemáš.

Tohle obecně neplatí, jde to zajistit i jinak než imutabilními daty, třeba pouze jednou mutabilní referencí: https://doc.rust-lang.org/1.8.0/book/references-and-borrowing.html


Re:Programovanie a modne trendy?
« Odpověď #166 kdy: 01. 09. 2017, 08:32:33 »
Tohle obecně neplatí, jde to zajistit i jinak než imutabilními daty, třeba pouze jednou mutabilní referencí: https://doc.rust-lang.org/1.8.0/book/references-and-borrowing.html
1. Tohle je opravdu zajímavý, moc se mi to na Rustu líbí.
2. Rust je afaik jediný jakžtakž rozšířený jazyk, který tohle dělá.
3. Kit nemluvil o Rustu.
4. Ale především: mluvil jsem o tom, že Erlang/Elixir ti zabezpečuje, že v datech nemáš kruhové reference (nemůžeš je udělat i kdyby ses na hlavu postavil - prostě na to v jazyku není nástroj). Pokud jsem správně pochopil tenhle rustí mechanismus, jeho smyslem je hlídat uvolňování paměti. Neexistenci kruhových referencí nijak nezaručuje (viz např. https://users.rust-lang.org/t/circular-reference-issue/9097)

Když budeme hnidopiši, tak máš ale pravdu - napsal jsem "pokud máš imutabilní objekt v jiném jazyce", což je špatně. Správně mělo být "pokud máš imutabilní objekt v jazyce, který imutabilitu nevynucuje". Bylo to v té předchozí větě :)
« Poslední změna: 01. 09. 2017, 08:35:23 od Mirek Prýmek »

lopata

Re:Programovanie a modne trendy?
« Odpověď #167 kdy: 01. 09. 2017, 08:59:09 »
1. Tohle je opravdu zajímavý, moc se mi to na Rustu líbí.
2. Rust je afaik jediný jakžtakž rozšířený jazyk, který tohle dělá.
3. Kit nemluvil o Rustu.
4. Ale především: mluvil jsem o tom, že Erlang/Elixir ti zabezpečuje, že v datech nemáš kruhové reference (nemůžeš je udělat i kdyby ses na hlavu postavil - prostě na to v jazyku není nástroj). Pokud jsem správně pochopil tenhle rustí mechanismus, jeho smyslem je hlídat uvolňování paměti. Neexistenci kruhových referencí nijak nezaručuje (viz např. https://users.rust-lang.org/t/circular-reference-issue/9097)

Rust a kruhové reference to je téma, o kterém by se dala napsat diplomka... Obecně Rust kruhové reference nedovoluje. Ve standardním kódu se nedají udělat, neprojde to přes borrow checker a skončí chybou při kompilaci. Jde to ale obejít použitím std::rc::Rc a std::cell::RefCell, nicméně to znamená, že kontrola správnosti kódu se přesune až do runtime. Pokud použiju std::rc::Rc a udělám to z hlediska pravidel borrow checkeru špatně, překladač na to nepřijde, klidně takový kód přeloží a spadne to až v runtime (definovaně). Obecně to ale není rust-way, takhle by se to v Rustu dělat nemělo, lepší je refaktorovat datovou strukturu tak, aby tam kruhové reference nemusely být.

Re:Programovanie a modne trendy?
« Odpověď #168 kdy: 01. 09. 2017, 09:08:38 »
Rust a kruhové reference to je téma, o kterém by se dala napsat diplomka... Obecně Rust kruhové reference nedovoluje. Ve standardním kódu se nedají udělat, neprojde to přes borrow checker a skončí chybou při kompilaci. Jde to ale obejít použitím std::rc::Rc a std::cell::RefCell, nicméně to znamená, že kontrola správnosti kódu se přesune až do runtime. Pokud použiju std::rc::Rc a udělám to z hlediska pravidel borrow checkeru špatně, překladač na to nepřijde, klidně takový kód přeloží a spadne to až v runtime (definovaně). Obecně to ale není rust-way, takhle by se to v Rustu dělat nemělo, lepší je refaktorovat datovou strukturu tak, aby tam kruhové reference nemusely být.
Aha, tak takhle detailně do toho nevidím. Dík moc za doplnění.

Aoidhghean

Re:Programovanie a modne trendy?
« Odpověď #169 kdy: 01. 09. 2017, 20:42:00 »
Funkce jsou ve FP přece také konstanty.
Tohle je nesmyslné tvrzení, funkce jsou objekty jako třeba čísla. Konstantní může být tak nanejvýš reference, potažmo přiřazení do proměnné.


Kit

Re:Programovanie a modne trendy?
« Odpověď #170 kdy: 01. 09. 2017, 21:14:54 »
Funkce jsou ve FP přece také konstanty.
Tohle je nesmyslné tvrzení, funkce jsou objekty jako třeba čísla. Konstantní může být tak nanejvýš reference, potažmo přiřazení do proměnné.

Ve FP nemůže být přiřazení do proměnné, neboť tam žádné nejsou.

Aoidhghean

Re:Programovanie a modne trendy?
« Odpověď #171 kdy: 01. 09. 2017, 21:37:16 »
Funkce jsou ve FP přece také konstanty.
Tohle je nesmyslné tvrzení, funkce jsou objekty jako třeba čísla. Konstantní může být tak nanejvýš reference, potažmo přiřazení do proměnné.
Ve FP nemůže být přiřazení do proměnné, neboť tam žádné nejsou.
Neuhýbej a přiznej, žes napsal blbost.

Kit

Re:Programovanie a modne trendy?
« Odpověď #172 kdy: 01. 09. 2017, 22:03:16 »
Funkce jsou ve FP přece také konstanty.
Tohle je nesmyslné tvrzení, funkce jsou objekty jako třeba čísla. Konstantní může být tak nanejvýš reference, potažmo přiřazení do proměnné.
Ve FP nemůže být přiřazení do proměnné, neboť tam žádné nejsou.
Neuhýbej a přiznej, žes napsal blbost.

Konstanta je od toho, že je konstantní, tj. po dobu svého života se nemění. A je úplně jedno, jak ji vytvořím.
Kód: [Vybrat]
const x = muj_skvely_konstruktor(moje_jeste,lepsi,parametry)
je u mě pořád konstanta. Jestli u tebe ne, hádat se o to nebudu, je mi to jedno, jak tomu cheš říkat, OOP stylem se samými takovými objekty stejně nic nenaprogramuješ. Jenom budeš (špatně a zbytečně krkolomně) imitovat funkcionální styl.

Re:Programovanie a modne trendy?
« Odpověď #173 kdy: 01. 09. 2017, 22:24:57 »
funkce jsou objekty jako třeba čísla
Čísla jsou nulární funkce ;)

Aoidhghean

Re:Programovanie a modne trendy?
« Odpověď #174 kdy: 02. 09. 2017, 00:27:28 »
funkce jsou objekty jako třeba čísla
Čísla jsou nulární funkce ;)
Konstanta je funkce, ale ne naopak, jak psal kit

BoneFlute

  • *****
  • 2 046
    • Zobrazit profil
Re:Programovanie a modne trendy?
« Odpověď #175 kdy: 02. 09. 2017, 03:40:06 »
Ve FP nemůže být přiřazení do proměnné, neboť tam žádné nejsou.
Máš bordel v tom, co je konstanta, a chceš řešit co je proměnná? Natož to, zda jsou ve FP? V tom máš jasno? :-)

Kit

Re:Programovanie a modne trendy?
« Odpověď #176 kdy: 02. 09. 2017, 09:01:08 »
Ve FP nemůže být přiřazení do proměnné, neboť tam žádné nejsou.
Máš bordel v tom, co je konstanta, a chceš řešit co je proměnná? Natož to, zda jsou ve FP? V tom máš jasno? :-)

Tak povídej, sděl nám svůj názor na vlastnosti FP.

tisnik

Re:Programovanie a modne trendy?
« Odpověď #177 kdy: 02. 09. 2017, 09:50:52 »
" Vezmete si ze mate auto a chcete mu zmenit barvu ... myslite, ze bude jednodussi mit immutable auto a vytvorit kopii auta s jinou barvou(i v realnem svete)? Ne, jednodussi bude tu barvu prestrikat."

no a tím se i do reálného světa vnesla nekonzistence a je zaděláno na průser - je nutné (ideálně v transakci :-/) změnit údaje ve velkém techničáku, v malém techničáku, megapoctivá ovečka by šla ještě oznámit, aby si MP změnila fotky z radarů :-) apod.

Dtto podobná "jednoduchá změna": osoba.setSurname("Novák"). No v SW jednoduché, v praktickém světě se po této změně ta osoba nachází v dost zvláštním režimu, třeba jí taky nemusí dát na poště její doporučený dopis, problémy v bance apod.apod.

Krátce - mutabilita je dost problematický koncept. Nebudu se moc rozepisovat, protože Rich Hickey o tom dokáže mluvit mnohem líp - https://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey. Fakt doporučuju přečíst, jinak budou debaty OOP vs FP dost plytké...

v

Re:Programovanie a modne trendy?
« Odpověď #178 kdy: 02. 09. 2017, 09:55:01 »
funkce jsou objekty jako třeba čísla
Čísla jsou nulární funkce ;)
funkce jsou objekty jako třeba čísla
Čísla jsou nulární funkce ;)
Konstanta je funkce, ale ne naopak, jak psal kit
můžete uvést citaci? nebo už jenom trolujete?

Ivan Nový

Re:Programovanie a modne trendy?
« Odpověď #179 kdy: 02. 09. 2017, 10:37:22 »
" Vezmete si ze mate auto a chcete mu zmenit barvu ... myslite, ze bude jednodussi mit immutable auto a vytvorit kopii auta s jinou barvou(i v realnem svete)? Ne, jednodussi bude tu barvu prestrikat."

no a tím se i do reálného světa vnesla nekonzistence a je zaděláno na průser - je nutné (ideálně v transakci :-/) změnit údaje ve velkém techničáku, v malém techničáku, megapoctivá ovečka by šla ještě oznámit, aby si MP změnila fotky z radarů :-) apod.

Dtto podobná "jednoduchá změna": osoba.setSurname("Novák"). No v SW jednoduché, v praktickém světě se po této změně ta osoba nachází v dost zvláštním režimu, třeba jí taky nemusí dát na poště její doporučený dopis, problémy v bance apod.apod.

Krátce - mutabilita je dost problematický koncept. Nebudu se moc rozepisovat, protože Rich Hickey o tom dokáže mluvit mnohem líp - https://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey. Fakt doporučuju přečíst, jinak budou debaty OOP vs FP dost plytké...

Model v počítači je homomorfní model reality, nemusí být izomorfní. Otázka tedy zní, potřebujeme izomorfní modely reality? Zajistí je imutabilita? A filozofická otázka na to navazující, je náš svět izomorfním modelem ideálů? Kvantová mechanika ukazuje, že nikoliv.