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

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #120 kdy: 27. 09. 2025, 09:53:53 »
Rust znám jen z přednášek, já jsem přešel na golang. Je jednodušší a má výborné možnosti multithredingu.


Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #121 kdy: 27. 09. 2025, 09:57:50 »
Co se tyce knihoven vs vlastní kod, je tu este vykonovy aspekt.



A ja se obavam, ze moje knihovny hy hyly este horsi, nez ty GOckove.

Na druhé straně vy byste to mohl psát kód přímo pro tu vaši konkrétní situaci.

Já jsem si třeba napsal vlastní parser pro JSON v F# a na určitých vstupech byl výrazně rychlejší než parser ze standardní knihovny System.Text.Json od Microsoftu. Ty vstupy byly JSONy, kde je v řetězci vnořený další JSON.

Dříve to navíc umělo poznat, že vstupní JSON obsahuje fieldy, které program neočekává (to už se System.Text.Json také naučil). Co většina knihoven stále neumí, je číst neomezeně dlouhá čísla - takže stále má výhody mít vlastní parser. Krom toho ten parser už dříve šlo přeložit do WASM a použít, což jiné parsery v C# ani F# neuměly (šlo je přeložit, ale často házely výjimky, protože používali reflexi, což ten můj parser nedělá).

A ještě jedna věc, JSON je dosti vágně specifikované, takže tím, že mám vlastní kód mám i kontrolu nad tím, jak se ošetří třeba slovníky s duplicitními fieldy, nebo s fieldy, co nejsou duplicitní, ale po Unicode normalizaci by byly.

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #122 kdy: 28. 09. 2025, 23:21:09 »
Pokud se tím plánuješ živit, tak odpověď je "spíš ne". Full-time jobů v Rustu (ne RUSTu btw) je docela málo. Full-time jobů v Javě je hodně. Rust totiž za rychlost běhu programu platí větší pomalostí při psaní kódu (je fakt hodně přísnej) a to se na většině projektů nevyplatí.

jop ,je tak nevyužitelný ze  rust programatori jsou nejlépe ohodnoceni v oboru zatímco ta jista java se nedostala ani do první sedmičky a to tam najdeš jak go tak python + typescript a kotlin a bonus .. scalu

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #123 kdy: Dnes v 08:48:45 »
Pokud se tím plánuješ živit, tak odpověď je "spíš ne". Full-time jobů v Rustu (ne RUSTu btw) je docela málo. Full-time jobů v Javě je hodně. Rust totiž za rychlost běhu programu platí větší pomalostí při psaní kódu (je fakt hodně přísnej) a to se na většině projektů nevyplatí.

jop ,je tak nevyužitelný ze  rust programatori jsou nejlépe ohodnoceni v oboru zatímco ta jista java se nedostala ani do první sedmičky a to tam najdeš jak go tak python + typescript a kotlin a bonus .. scalu
A to jste vzal kde? Zas nějaký pochybný žebříček, který se vždycky co měsíc totálně zpřehází? C++ a Java jsou z hlediska jobu sázky na jistotu a zároveň dobrého ohodnocení. Ani jeden z těchto jazyků přitom nemusím a nedělám v nich, i když se asi připravuju o peníze (duševní zdraví je mi cennější - správný objektový návrh umí udělat málo lidí, rozhodně mnohem méně, než kolik se jich o to pokouší, resp. se to po nich chce - mně tento design programu také není blízký a evidentně ani autorům většiny učebnic OOP; problém navíc je, že jen málokdo si to dokáže sebekriticky přiznat).

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #124 kdy: Dnes v 11:45:42 »
Pokud se tím plánuješ živit, tak odpověď je "spíš ne". Full-time jobů v Rustu (ne RUSTu btw) je docela málo. Full-time jobů v Javě je hodně. Rust totiž za rychlost běhu programu platí větší pomalostí při psaní kódu (je fakt hodně přísnej) a to se na většině projektů nevyplatí.

jop ,je tak nevyužitelný ze  rust programatori jsou nejlépe ohodnoceni v oboru zatímco ta jista java se nedostala ani do první sedmičky a to tam najdeš jak go tak python + typescript a kotlin a bonus .. scalu
A to jste vzal kde? Zas nějaký pochybný žebříček, který se vždycky co měsíc totálně zpřehází? C++ a Java jsou z hlediska jobu sázky na jistotu a zároveň dobrého ohodnocení. Ani jeden z těchto jazyků přitom nemusím a nedělám v nich, i když se asi připravuju o peníze (duševní zdraví je mi cennější - správný objektový návrh umí udělat málo lidí, rozhodně mnohem méně, než kolik se jich o to pokouší, resp. se to po nich chce - mně tento design programu také není blízký a evidentně ani autorům většiny učebnic OOP; problém navíc je, že jen málokdo si to dokáže sebekriticky přiznat).

A pritom je OOP tak strasne jednoduchy koncept.
Staci znat par pravidel a selsky rozum, objektovy je cely svet vukol.

Staci vedet, ze kdyz ten jazyk nejake moznosti nabizi, ze je veru neni potreba nasrat vsude.
Ze napr. dedeni se pouziva, kdyz potrebuju ROZSIRIT funkcionalitu existujiciho objektu, pokud potrebuju jenom polymorfismus, na 99% bude vhodnejsi prosty interface.

Ze je potreba selsky rozum, abych dovedl poznat, ktery objekt je v danem kontextu aktorem, ktery je prosty objekt, se kterym aktor manipuje.
Vidle.naberHnuj(hnuj) je spravny pristup
Hnuj.naskocNaVidle(vidle) je magorina.

Pak je potreba v ramci mozkoveho mysleni este urcit, ze v danem kontextu objet User zrejme nebude clovek, alebrz vstupni karticka, co se strka do pichacky a kterou se oteviraji dvere, ze je treba lepsi ten objekt pojmenovat AuthToken a  tedy ze neni potreba do toho nasrat i cislo bot realneho Usera, to se klido strci do jineho objektu, co upravdu reprezentuje cloveka.

A ano, knizky o OOP jsou vetsinou blbe, tam prave dedi trojuhelniky a ctverce z obecneho polygonu, aby ve zdedenem objektu vymenili sakuprask vsecko, tady je lepsi prosty interface.

Chapu, ze treba Spring Boot potrebuje vsecky ficury javy vcetne introspekce a apod. Prave proto Spring vznikl, aby bezny programator business logiky se s tim prdolit nemusel.
Ja pri psani ve Springu z celeho OOP pouzivam interfacy (popr anotace, tedy interfacy v jinem formatu), encapsulaci a konec.




Kit

  • *****
  • 882
    • Zobrazit profil
    • E-mail
Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #125 kdy: Dnes v 11:58:40 »
A pritom je OOP tak strasne jednoduchy koncept.
Staci znat par pravidel a selsky rozum, objektovy je cely svet vukol.

Staci vedet, ze kdyz ten jazyk nejake moznosti nabizi, ze je veru neni potreba nasrat vsude.
Ze napr. dedeni se pouziva, kdyz potrebuju ROZSIRIT funkcionalitu existujiciho objektu, pokud potrebuju jenom polymorfismus, na 99% bude vhodnejsi prosty interface.

Slovo ROZŠÍŘIT je ošemetné, protože se do toho vejde zbytečně moc vztahů. Potom vznikají nesmysly typu BaseController jako rodič apod. Místo toho používám slovo JE, které je pro pochopení vztahu mnohem lepší a hlavně psychologicky zamezí vzniku dědictví tam, kde být nemá.

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #126 kdy: Dnes v 13:24:56 »
A pritom je OOP tak strasne jednoduchy koncept.
Staci znat par pravidel a selsky rozum, objektovy je cely svet vukol.

Staci vedet, ze kdyz ten jazyk nejake moznosti nabizi, ze je veru neni potreba nasrat vsude.
Ze napr. dedeni se pouziva, kdyz potrebuju ROZSIRIT funkcionalitu existujiciho objektu, pokud potrebuju jenom polymorfismus, na 99% bude vhodnejsi prosty interface.
Až na to, že to tak jednoduchý koncept není.

Ony jsou vlastně 2-3 různá paradigmata, která se sice nazývají stejně, ale znamenají něco jiného podle jazyka. Např. OOP v Javě vs Javascriptu. A ani jedno nemá moc společného s tím, co nazýváme objekt v běžném životě. viz. ten příklad s vidlema a hnojem.

Reálný svět není moc objektový. Hlavně hierarchiím se dost urputně brání a lezou z toho chuťovky jako diamantová dědičnost. A po tom, co jsem vyslechl rozhovor jednoho biologa a učitelky vím, že to není jen moje pozorování. Příroda se škatulkuje dost blbě.

BTW, subtypový polymorfismus není z matematického hlediska rozšíření ale naopak spíš zůžení. Odvozená třída nerozšiřuje  schopnosti báze. Ona umí podmnožinu z toho všeho, co by ta báze mohla dělat.

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #127 kdy: Dnes v 13:26:14 »
A pritom je OOP tak strasne jednoduchy koncept.
Staci znat par pravidel a selsky rozum, objektovy je cely svet vukol.
A to je právě ta největší zrada - ono se to tváří, že je to strašně jednoduché, protože objektový je celý svět vůkol. Jenže je objektový jinak, než jak je to potřeba k vytvoření objektového modelu programu. Právě ta podvědomá snaha o 1:1 korespondenci reálných objektů a objektů programových je velice zákeřná past, do níž se chytí většina lidí. Reálný svět má mnohem komplikovanější vazby než IS a HAS a vzájemnou výměnu zpráv mezi blackboxy. Jedna a tatáž věc se dá klasifikovat z různých úhlů pohledu, podle různých kritérií. Například obyčejné číslo - přirozené, racionální, reálné, sudé/liché, transcendentní... Ale v počítači mě spíš zajímá, kolik místa potřebuji na jeho uložení a jak s ním budu algoritmicky zacházet, což je klasifikace, která zrovna moc neodpovídá "světu vůkol", ale odpovídá světu uvnitř počítače.

Ze je potreba selsky rozum, abych dovedl poznat, ktery objekt je v danem kontextu aktorem, ktery je prosty objekt, se kterym aktor manipuje.
Vidle.naberHnuj(hnuj) je spravny pristup
Hnuj.naskocNaVidle(vidle) je magorina.
V reálném světě je to nesmysl, ale v počítači je to rovnocenné a zvolit se musí varianta, která je přímočařejší z hlediska návrhu programu - pen.draw(canvas) vs. canvas.draw(pen) vs. canvas.pen(draw) vs. ... Zákon schválnosti říká, že si člověk vybere nevhodnou variantu, což se projeví v okamžiku, kdy bude chtít rozšířit svůj model o nějakou prkotinu, která mu do toho vůbec, ale vůbec nebude zapadat, ale kdyby býval zvolil jiný model na začátku, krásně by to do sebe zapadlo. A blbé je, že v tom smolném případě OOP poslouží úplně stejně jako v tom šťastném - jako zesilovač: když to na začátku vymyslíte dobře, OOP vám ušetří spoustu práce; a naopak, bohužel.

Pak je potreba v ramci mozkoveho mysleni este urcit, ze v danem kontextu objet User zrejme nebude clovek, alebrz vstupni karticka, co se strka do pichacky a kterou se oteviraji dvere, ze je treba lepsi ten objekt pojmenovat AuthToken a  tedy ze neni potreba do toho nasrat i cislo bot realneho Usera, to se klido strci do jineho objektu, co upravdu reprezentuje cloveka.
A nebo je třeba posoudit, zda ta kartička je zásadním objektem, nebo je to jen nějaký prostředek k autorizaci, či dokonce jeden z mnoha možných, pro daný program ne zcela podstatný, protože až někdo přijde s autorizací přes sítnici, začne se řešit, jak to napasovat na objekt kartička. Tedy zda jde o nějaký vrátný systém, pro nějž je badge/token to podstatné, a koho/co reprezentuje už není jeho starost, nebo naopak jde o nějaký systém zaměstnanců, kde zas není až tak podstatné jak se autorizoval, ale kdo se autorizoval.

A ano, knizky o OOP jsou vetsinou blbe, tam prave dedi trojuhelniky a ctverce z obecneho polygonu, aby ve zdedenem objektu vymenili sakuprask vsecko, tady je lepsi prosty interface.
Tohle bych nazval prvoplánové návrhové chyby. Který učební text je má, takový můžete rovnou zahodit. Jenže pak tu jsou ty "vyšší" chyby, které se dají jen těžko demonstrovat na malých příkladech, protože se začnou projevovat až později. Tím jsem nechtěl říci, že ty vaše příklady jsou špatně nebo dobře. Problém je, že bez znalosti kontextu se to nedá jednoznačně rozhodnout.

Marketingová hesla OOP byla přehlednost, znovupoužitelnost, úspora psaní. Realita, na niž jsem celý život narážel, byla přesně opačná.

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #128 kdy: Dnes v 21:23:48 »
A pritom je OOP tak strasne jednoduchy koncept.
Staci znat par pravidel a selsky rozum, objektovy je cely svet vukol.

Staci vedet, ze kdyz ten jazyk nejake moznosti nabizi, ze je veru neni potreba nasrat vsude.
Ze napr. dedeni se pouziva, kdyz potrebuju ROZSIRIT funkcionalitu existujiciho objektu, pokud potrebuju jenom polymorfismus, na 99% bude vhodnejsi prosty interface.

Slovo ROZŠÍŘIT je ošemetné, protože se do toho vejde zbytečně moc vztahů. Potom vznikají nesmysly typu BaseController jako rodič apod. Místo toho používám slovo JE, které je pro pochopení vztahu mnohem lepší a hlavně psychologicky zamezí vzniku dědictví tam, kde být nemá.

Jaký máš názor třeba na MouseAdapter nebo jiné *Adapter třídy? Případně Default* implementace různých rozhraní? V principu jde o to, že rozhraní má více metod, ale ty chceš implementovat specifické chování třeba jen jedné z nich. Když podědíš ten adaptér, tak implementuješ jen tu jednu metodu, která tě zajímá. Pokud adaptér nebude, tak co s tím?

a) implementuješ všechny metody a necháš je prázdné
b) těch rozhraní bude mnohem víc a každé bude mít jen jednu metodu
c) řešení na úrovni programovacího jazyka (v některých to jde, ale za cenu vyšší komplexity jazyka oproti Javě)
d) něco jiného?

Ono to sice jde udělat „čistě“ a podle všech dobrých rad, pravidel a doporučení, ale to ještě neznamená, že se to bude dobře používat.

Něco jiného jsou zvěrstva, o kterých píše Standa:

Citace
Ze je potreba selsky rozum, abych dovedl poznat, ktery objekt je v danem kontextu aktorem, ktery je prosty objekt, se kterym aktor manipuje.
Vidle.naberHnuj(hnuj) je spravny pristup
Hnuj.naskocNaVidle(vidle) je magorina.

Když vidím, co jsou někteří schopní vyrobit a prezentovat jako OOP, tak se pak nedivím, že hodně lidí na druhé straně OOP nesnáší a utíkají od něj pryč. Ale nemyslím si, že by problém byl ve společném předkovi typu MouseAdapter.

Mlocik97

  • *****
  • 952
  • Ubunťák, JS dev.
    • Zobrazit profil
    • E-mail
Re:Přechod z JAVA na RUST (ANO či NE)
« Odpověď #129 kdy: Dnes v 21:59:33 »
Vôbec nikde nefavorujem JS, odporúčam prakticky hociktorý jazyk okrem PHP a Javy. Ale na stejné úrovni tie jazyky rozhodne nie sú. Existujú merateľné štatistiky koľko znakov či riadkov kódu je potreba pre dosiahnutie stejnej funkcionality v JS a Jave (alebo akomkoľvek jazyku vs Jave), je merateľné počet inkonzistencií v API v PHP atď.

O Javě se ví, že je ukecaná. PHP je na tom o dost lépe. Nekonzistenci PHP API si můžeš snadno upravit vhodným dekorátorem. Měření počtu řádek je zcela irelevantní, podstatná je čitelnost kódu. Nadbytečné řádky jsou způsobeny nepochopením principu zapouzdření.

Skus mi sem dať teda "najoptimálnejšiu verziu Java kódu" kde si pochopil princíp zapuzdrenia a potom porovnám so stejným princípom zapúzdrenia kód v inom jazyku a uvidíme.

Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #130 kdy: Dnes v 22:08:08 »
Trochu mne překvapuje, kolik lidí začne automaticky mluvit o dědičnosti a kritizovat OOP skrze ní. Přitom (třídní) dědičnost není na OOP to nejdůležitější, dokonce ani v té Javě. Za klíčovou vlastnost považuji spojení stavu (dat) a chování (metod) do jednoho objektu a potom polymorfismus, díky kterému můžu s instancemi téhož rozhraní pracovat jednotným způsobem. Jestli tam existuje nějaká hierarchie tříd nepovažuji za úplně důležité – v některých případech to užitečné je, v jiných je to naopak na škodu – je potřeba nad tím přemýšlet (a typicky je dobré tu hierarchii držet jako implementační detail, abych ji mohl případně změnit, a jako veřejné API vystavovat jen rozhraní a s třídami tam být hodně opatrný).

K tématu jsem v minulosti psal tohle: Anemický datový model.

A v článku o RDF jsem měl tuto poznámku:

Citace
Nicméně, když se podobnými otázkami začneme zabývat, komplexita řešení narůstá poměrně vysokým tempem… a pak je na zvážení, zda jsou vyšší přínosy nebo naopak náklady spojené s touto komplexitou. Měli bychom postupovat podle podobných zásad jako při návrhu relačních databází. Cílem návrhu a datového modelování totiž není vytvořit v počítači dokonalý obraz reality, ale nalezení vhodné podmnožiny či dokonce pouhé aproximace tohoto obrazu, která bude užitečná pro naši aplikaci, pro daný případ užití.

Což platí nejen pro RDF a databáze, ale i pro OOP a modelování světa v počítači obecně. Je potřeba myslet na účelnost (dnes + s nějakým výhledem do budoucna) a ne tupě kopírovat objekty z vnějšího světa do počítače 1:1. Navíc často (většinou) je i potřeba udělat nejdřív redesign procesů a až potom digitalizovat / automatizovat ty upravené procesy.

Jinak ono na ten nepočítačový svět nejlépe pasuje z těch programátorských paradigmat právě to objektové (neplést nutně s dědičností), protože i objekty v tom nepočítačovém světě mají nějaký stav a nějaké chování. Fyzické objekty nikdy nejsou „immutable“ (i když by si to vyznavači funkcionální víry přáli :-). Ty objekty mají stav, který se v čase mění. Většinou mají i nějaké (pozorovatelné, zajímavé) chování, naopak bezstavových funkcí nebo procedur je v nepočítačovém světě minimum, pokud vůbec. Když např. na úřad pošlu nějakou žádost, tak se stav toho úřadu změnil (mají tam teď tu moji žádost a někdo na ní pracuje), stejně tak se změnil stav té žádosti (v podatelně ji orazítkovali) a změnil se i stav v mojí osobní evidenci (zapsal jsem si, když jsem žádost odeslal, a založil jsem si kopii). A když si posíláme dopisy, telefonujeme nebo jinak komunikujeme, tak vlastně voláme svoje metody. Když půjdu do obchodu, tak existuje určitý zavedený protokol (pozdravím, naskládám zboží do košíku nebo si o něj řeknu, u pokladny zaplatím…) tzn. existuje hodně obchodů, které implementují jedno rozhraní. Tím neříkám, že se to má modelovat 1:1, viz výše, ale OOP na ten vnější svět pasuje nejlíp.

P.S. Když píšu někdy v C, kde jsou zvlášť struktury a zvlášť funkce, tak cítím jistý deficit v programátorském pohodlí i v přehlednosti kódu. Ono i tam jde sice psát objektově a taky už jsem si něco takového napsal, ale je to takové kostrbaté – mít podporu OOP přímo v programovacím jazyce je lepší.

BoneFlute

  • *****
  • 2 067
    • Zobrazit profil
Re:Přechod z Javy na Rust. Ano či ne?
« Odpověď #131 kdy: Dnes v 22:18:32 »
Jaký máš názor třeba na MouseAdapter nebo jiné *Adapter třídy? Případně Default* implementace různých rozhraní? V principu jde o to, že rozhraní má více metod, ale ty chceš implementovat specifické chování třeba jen jedné z nich. Když podědíš ten adaptér, tak implementuješ jen tu jednu metodu, která tě zajímá. Pokud adaptér nebude, tak co s tím?

a) implementuješ všechny metody a necháš je prázdné
b) těch rozhraní bude mnohem víc a každé bude mít jen jednu metodu
c) řešení na úrovni programovacího jazyka (v některých to jde, ale za cenu vyšší komplexity jazyka oproti Javě)
d) něco jiného?

Ono to sice jde udělat „čistě“ a podle všech dobrých rad, pravidel a doporučení, ale to ještě neznamená, že se to bude dobře používat.

Vidím v tom dva problémy:
1/ ono se oficiálně učí, že dědičnost je za účelem reusable kódu, nevysvětluje se, k čemu dědičnost skutečně slouží.
2/ většina jazyků lepší nástroj pro reusable kódu jak dědičnost nemá (Java), některé nemají dokonce ani rozhraní (C++) (Překvapivě takový odsuzovaný jazyk jako je PHP ano.)

V takové situaci je otázka, jak napsat adapter čistě problém slepice-vejce.

Čímž se dostáváme do nové generace jazyků, které opustili klasický OOP, a zkouší to udělat znovu a lépe: Scala, Rust,TypeScript, dokonce i to blbé PHP.