Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: novomente 18. 09. 2026, 11:36:58

Název: Měnitelnost objektů předávaných odkazem
Přispěvatel: novomente 18. 09. 2026, 11:36:58
Dnešní trend nových programovacích jazyků, jako jsou RUST, Nim, Zig, C3 a dalších, je takzvaná immutabilita. Zde mám na mysli neměnnost složitých datových typů - pole, objekty atd.

AI mi na to řekla, že i tyto složité datové typy předávané funkci odkazem, by měli být neměnné (immutable). A namísto nich, že by funkce měla vytvořit kopii oněch datových typů a poslat je zpět jako návratovou hodnotu.

To se však dělá těžko, když jsou datové typy velmi veliké. Zde se například užívá tzv. přepravka. Vezme se malý objekt, pošle se do funkce, která ho vrátí modifikovaný a tato modifikace se pak zapracuje do velikého datového typu. Jenže v některých případech ta přepravka může zpomalovat běh, jako například u herních enginů.

Jak jsou na tom enginy aplikací? Kdy je lepší používat měnitelnost velikého datového typu zevnitř funkce a kdy je lepší používat přepravku, či jinou techniku?
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: a6b 18. 09. 2026, 11:41:21
ja jsem zastance toho aby reference byla immutable a kdyz je mutable, tak aby zmena byla levna.
pokud ma jit o zmenu sloziteho objektu, tak jsem treba v rustu zastancem presunuti (move), objekt se presune do funkce, tam se zmodifikuje a pak se zase presune ven z funkce.
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: Kit 18. 09. 2026, 12:53:53
V takovém případě se používají kolekce, které navíc bývají thread-safe.
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: RDa 18. 09. 2026, 13:56:20
Velke data se predavaj neprimo - pres handle - odkazem/indexem na nejaky pool pameti.
Jako tohle je "rukojeť", absolutne ale netusim co je to "přepravka" :D
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: listoper 18. 09. 2026, 14:31:30
Me se libi "structural sharing" viz https://clojure.org/reference/data_structures#Collections (https://clojure.org/reference/data_structures#Collections)
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: xyz 18. 09. 2026, 16:21:57
Jen na okraj. Imutability neni trend modernich programovacich jazyku, ale je to koncept stary snad 50 let, ktery prisel z objektove orientovaneho programovani. Jen se tomu rikalo zapouzdreni (encapsulation). K polozkam objektu maji pristup jen metody (zpravy objektu). Jenze pak prisly tzv. POJO a nebo java beans a vsude se k objektum zacaly pridavat gettery a settery a rozlezlo se to.
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: Kit 18. 09. 2026, 17:47:13
Jen na okraj. Imutability neni trend modernich programovacich jazyku, ale je to koncept stary snad 50 let, ktery prisel z objektove orientovaneho programovani. Jen se tomu rikalo zapouzdreni (encapsulation). K polozkam objektu maji pristup jen metody (zpravy objektu). Jenze pak prisly tzv. POJO a nebo java beans a vsude se k objektum zacaly pridavat gettery a settery a rozlezlo se to.

Gettery a settery jsou proti principu zapouzdření, protože umožňují manipulaci s jednotlivými atributy.
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: Exceptions 18. 09. 2026, 17:48:23
ano, není to moderní novinka, je to spíše odklon od objektového pekla.

Tazatal má správný čich. Na volbě topologie dat v paměti a na disku prostě záleží. Velmi záleží. A musí se to volit velmi pečlivě, v počátku počítačů triky s datovými strukturami a přístupů k nim umožňilo vznik všech těch legendárních programů a her. Dnes už naštěstí nemusíme dělat takové vylomeniny.
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: LacconePanda 18. 09. 2026, 17:54:17
například užívá tzv. přepravka.
Dobře, triggernul jste mě. Víte o tom něco ? Pojmy se tu oháníte. Tak se zeptám, je řeč o RefCell a Box<> v Rustu?
Název: Re:Měnitelnost objektů předávaných odkazem
Přispěvatel: BoneFlute 18. 09. 2026, 19:18:49
Dnešní trend nových programovacích jazyků, jako jsou RUST, Nim, Zig, C3 a dalších, je takzvaná immutabilita. Zde mám na mysli neměnnost složitých datových typů - pole, objekty atd.

AI mi na to řekla, že i tyto složité datové typy předávané funkci odkazem, by měli být neměnné (immutable). A namísto nich, že by funkce měla vytvořit kopii oněch datových typů a poslat je zpět jako návratovou hodnotu.

To se však dělá těžko, když jsou datové typy velmi veliké. Zde se například užívá tzv. přepravka. Vezme se malý objekt, pošle se do funkce, která ho vrátí modifikovaný a tato modifikace se pak zapracuje do velikého datového typu. Jenže v některých případech ta přepravka může zpomalovat běh, jako například u herních enginů.

Jak jsou na tom enginy aplikací? Kdy je lepší používat měnitelnost velikého datového typu zevnitř funkce a kdy je lepší používat přepravku, či jinou techniku?

Návrhový vzor Přepravka slouží k něčemu jinému.

Předávání hodnotou se používá proto, protože je to bezpečnější a kontrolovatelnější, ale logicky dražší.

Předávání odkazem je správný pattern pro předávání velkého objektu. To tak prostě je, je to správně a nic s tím neuděláš.

Přistupuje se k tomu cca třemi způsoby (možná i více)

1/ chceme přehlednost a kontrolu a rezignujeme na výkon - předávání hodnotou

2/ chceme výkon - předávání odkazem, a předává se i vlastnictví (zpopularizoval Rust, ale koncept je to samozřejmě mnohem starší)

3/ Objekt nepředáváme, ale necháme si tou funkcí vrátit co se má na tom objektu udělat (monády/recepty/commandy/operace). Tedy nepředáváme objekt operacím ale do objektu předáváme operace. Toto je taková více architektonická záležitost. Velký datový objekt má na starost omezený kontext kódu, což znamená, že máme větší šanci si to ohlídat, nemusíme předávat celej velkej blob, o různých optimalizačních technikách nemluvě.


PS:
To se však dělá těžko, když jsou datové typy velmi veliké. Zde se například užívá tzv. přepravka. Vezme se malý objekt, pošle se do funkce, která ho vrátí modifikovaný a tato modifikace se pak zapracuje do velikého datového typu. Jenže v některých případech ta přepravka může zpomalovat běh, jako například u herních enginů.
Tohle je tak zmatenej a zašmodrchanej popis, že tam snad není správně ani zájmeno. [peace]