Programovanie a modne trendy?

lopata

Re:Programovanie a modne trendy?
« Odpověď #165 kdy: 01. 09. 2017, 08:19:43 »
Citace od: Mirek Prýmek kdy 01. 09. 2017, 00:09:18
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 »
Citace od: lopata kdy 01. 09. 2017, 08:19:43
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ě :)

lopata

Re:Programovanie a modne trendy?
« Odpověď #167 kdy: 01. 09. 2017, 08:59:09 »
Citace od: Mirek Prýmek kdy 01. 09. 2017, 08:32:33
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 »
Citace od: lopata kdy 01. 09. 2017, 08:59:09
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 »
Citace od: Kit kdy 31. 08. 2017, 21:50:08
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 »
Citace od: Aoidhghean kdy 01. 09. 2017, 20:42:00
Citace od: Kit kdy 31. 08. 2017, 21:50:08
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 »
Citace od: Kit kdy 01. 09. 2017, 21:14:54
Citace od: Aoidhghean kdy 01. 09. 2017, 20:42:00
Citace od: Kit kdy 31. 08. 2017, 21:50:08
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 »
Citace od: Aoidhghean kdy 01. 09. 2017, 21:37:16
Citace od: Kit kdy 01. 09. 2017, 21:14:54
Citace od: Aoidhghean kdy 01. 09. 2017, 20:42:00
Citace od: Kit kdy 31. 08. 2017, 21:50:08
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.

Citace od: Mirek Prýmek kdy 31. 08. 2017, 21:47:34
Konstanta je od toho, že je konstantní, tj. po dobu svého života se nemění. A je úplně jedno, jak ji vytvořím.

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 »
Citace od: Aoidhghean kdy 01. 09. 2017, 20:42:00
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 »
Citace od: Mirek Prýmek kdy 01. 09. 2017, 22:24:57
Citace od: Aoidhghean kdy 01. 09. 2017, 20:42:00
funkce jsou objekty jako třeba čísla
Čísla jsou nulární funkce ;)
Konstanta je funkce, ale ne naopak, jak psal kit

BoneFlute

  • *****
  • 2 155
Re:Programovanie a modne trendy?
« Odpověď #175 kdy: 02. 09. 2017, 03:40:06 »
Citace od: Kit kdy 01. 09. 2017, 21:14:54
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 »
Citace od: BoneFlute kdy 02. 09. 2017, 03:40:06
Citace od: Kit kdy 01. 09. 2017, 21:14:54
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 »
Citace od: Mirek Prýmek kdy 01. 09. 2017, 22:24:57
Citace od: Aoidhghean kdy 01. 09. 2017, 20:42:00
funkce jsou objekty jako třeba čísla
Čísla jsou nulární funkce ;)
Citace od: Aoidhghean kdy 02. 09. 2017, 00:27:28
Citace od: Mirek Prýmek kdy 01. 09. 2017, 22:24:57
Citace od: Aoidhghean kdy 01. 09. 2017, 20:42:00
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 »
Citace od: tisnik 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é...

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.