Přechod z Javy na Rust. Ano či ne?

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #195 kdy: Dnes v 11:45:32 »
Nebudu ho učit serializovat se do Jsonu, nebo do Databáze, ale obecný serializování musí umět on.

Ale i obecných serializačních formátů existuje mnoho. Jeden například povolí 64-bitová celá čísla a druhý povolí celá čísla bez omezení velikosti. Jiný povolí čas na mikrosekundy, další na pikosekundy. Některé mohou řešit, jak jsou data uložena v paměti, jiné se od toho snaží abstrahovat.
Tak tenhle přístup má samozřejmě nějaké předpoklady. Objekt vysype obecný slovník obsahující nějaké základní typy a pak to chce zpátky v původní podobě beze změn. Prakticky to znamená, že ten dict bude podporovat akorát tak osekané doubly a obecné stringy.
Ve chvíli, kdy je třeba řešit nějaké ztrátové ukládání, tak to takhle obecně nejde. A je otázka, jestli se tomu ještě dá říkat serializace.

Pokud to jazyk podporuje, tak se k tomuto účelu použije spíš reflexe + případně anotace, kterými se dá upravit specifické chování a mapování.

Pokud reflexe není nebo ji nechceme použít a chceme to dělat ručně, tak to sice „vysype hashmapu“ nebo poskytne metody pro procházení toho abstraktního stromu/grafu, ale v něm se budou používat normální datové typy daného programovacího jazyka. Knihovna nebo modul, který pak dělá mapování tohoto abstraktního modelu na konkrétní serializační formát, je zodpovědný za mapování datových typů jazyka na datové typy formátu. Takže když tam třeba nebude číselný typ s příslušnou přesností, tak to namapuje na textový řetězec nebo pole bajtů a případně připojí potřebná metadata (pokud nejsou ve schématu), aby šlo následně provést bezztrátovou deserializaci zpět na objekty a typy v daném programovacím jazyce.


Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #196 kdy: Dnes v 12:03:02 »
P.S. Šlo by sice zavést konvenci, že o přemapování nativních typů programovacího jazyka na nějakou omezenou množinu typů používaných v abstraktním modelu se stará objekt, ale to spíš jen přidělá práci a bude se duplikovat kód v každém objektu resp. třídě. Lepší je, když to přemapování typů je odpovědnost toho de/serializátoru resp. un/marshalleru a je definovaná na jednom místě (případně ovlivnitelná konfigurací – ale naprogramované je to jen jednou).

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #197 kdy: Dnes v 12:58:47 »
Když vývojář dostane zadání, musí ho napřed analyzovat a vybrat pro něj vhodný jazyk, ve kterém ho je nejlépe zakódovat. Každý programovací jazyk má svá specifika (výhody i nevýhody), která se musí při oné volbě brát v úvahu.

Pokud se bavíme o komerčním vývoji, o firmách, tak tam je většinou rozhodnuto předem. Je tam obecně snaha omezovat tyhle „zoo“ programovacích jazyků a technologií a mít to jednotné, aby mohla fungovat zastupitelnost, aby jeden programátor mohl přecházet mezi různými projekty té firmy a nestávalo se ti, že máš několik volných programátorů v jazyce X, ale práci máš pro programátora v jazyce Y.

Vybírat si můžeš, pokud je to tvůj projekt nebo jsi šéf vývoje a máš za úkol stavět něco na zelené louce. I tam je ale dobré myslet na to, kde najdeš potřebné programátory a jaké budou mít požadavky ostatní projekty té firmy, abys to měl do budoucna pokud možno jednotné. Větší firmy si můžou dovolit větší pestrost (byť to není moc záměr, spíš důsledek jakési volnosti a experimentů), u menších je spíš snaha mít jeden hlavní jazyk. A i když je někde víc jazyků současně, tak typicky spíš z historických důvodů a postupně se přechází, nové projekty se začínají jen v tom aktuálním.

Co vývojář, to originální osobnost. Co zadání + vývojář, to originální výsledek zpracování toho zadání. Nikdy jsem nepracoval ve vývojářském týmu. A dotaz zní: Máte také podobnou zkušenost s originalitou každého vývojáře? Mohu veřejně říci, že zpracování zadání (vývoj, programování atd.) je velice osobní záležitost?

Každý má nějaký styl, co je mu nejbližší a přirozené, k čemu se na základě svých zkušeností dopracoval. Spíš než hodnotit, co je správně a odsuzovat, co je špatně, je užitečnější se zajímat, co k tomu dotyčného vedlo, na základě jakých zkušeností k tomu došel. Na druhou stranu, pokud spolu ti lidé mají pracovat v jednom týmu na jednom projektu, tak je dobré, aby si domluvili nějaký kompromis a společné konvence, které budou dodržovat – rozumný člověk si může zachovat svůj názor, ale zároveň si je vědom toho, že dělat to „o trochu horším“ způsobem, ale jednotně, je užitečnější, než když to budou dělat všichni „lépe“ ale každý jinak.

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #198 kdy: Dnes v 13:34:09 »
Každý má nějaký styl, co je mu nejbližší a přirozené, k čemu se na základě svých zkušeností dopracoval. Spíš než hodnotit, co je správně a odsuzovat, co je špatně, je užitečnější se zajímat, co k tomu dotyčného vedlo, na základě jakých zkušeností k tomu došel. Na druhou stranu, pokud spolu ti lidé mají pracovat v jednom týmu na jednom projektu, tak je dobré, aby si domluvili nějaký kompromis a společné konvence, které budou dodržovat – rozumný člověk si může zachovat svůj názor, ale zároveň si je vědom toho, že dělat to „o trochu horším“ způsobem, ale jednotně, je užitečnější, než když to budou dělat všichni „lépe“ ale každý jinak.

Od toho sú best practices, aby sa nevynachádzalo koleso. Programátori ich aj dodržiavajú. Sú prípady, keď je potrebné sa od nich odkloniť, ale to býva väčšinou už v zadaní. (Napríklad keď som kvôli performance na embedded zariadeniach musel programovať javu c-čkovým štýlom, bol to grc, ale všetci rozumeli, že prečo.)
Nie je nutné rozhodovať, čo je horšie/lepšie, keď unifikovaný štýl existuje.

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #199 kdy: Dnes v 14:54:10 »
Pokud to jazyk podporuje, tak se k tomuto účelu použije spíš reflexe + případně anotace, kterými se dá upravit specifické chování a mapování.
Serializace reflexí má své mouchy. A jak je ten serializátor psaný někým jiným, jsou z toho pěkně vypasené masařky.

1) Navrhujete vnitřnosti podle toho, co umí serializátor.
Když máte štěstí dostanete třeba nekonečno a nan. Na denormály ani nemyslete. A na inty větší než 48b bych taky raději slepě nespoléhal.
Pokud serializátor není součást jazyka, tak určitě nedostanete všechny standardní knihovny.

2) Přijdete o zapouzdření, takže si zabetonujete vnitřnosti.
Jak jednou objekt serializujete, tak už takřka nemůžete překopat vnitřní reprezentaci. Nějaká aktualizace pak obvykle něco rozbije.

Ve výsledku pak občas máte vnitřnosti objektů dvakrát. Jednou pro sebe, jednou pro serializátor a přesypáváte je tam a zpět.



Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #200 kdy: Dnes v 14:58:56 »
Jak jednou objekt serializujete, tak už takřka nemůžete překopat vnitřní reprezentaci. Nějaká aktualizace pak obvykle něco rozbije.

Iba doplním, že serializačné knižnice umožňujú s dátami ukladať aj ich verziu, ktorá sa pri deserializácii používa na rozhodovanie, čo sa vlastne na vstupe očakáva, takže sa nenačítava niečo, čo na vstupe pre danú verziu nie je.