Zobrazit příspěvky

Tato sekce Vám umožňuje zobrazit všechny příspěvky tohoto uživatele. Prosím uvědomte si, že můžete vidět příspěvky pouze z oblastí Vám přístupných.


Příspěvky - Jožka Niemand

Stran: [1] 2
1
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 01. 10. 2025, 17:24:36 »
Objektové jazyky jsou asi nejflexibilnější – byť s jinou syntaxí, v nich můžeš realizovat to, co jinde.
Nejflexibilnější jsou jazyky s otevřenou minimalistickou syntaxí, v nichž si mohu dotvořit, co potřebuji - jako LISP, FORTH, TCL... Ani jeden z nich nebyl vytvořen jako objektový, v žádném z nich ale není problém objektový systém dotvořit, když bez něj někdo nemůže žít (což se i stalo; obzvláště CLOS je podle mě nejméně o level lepší objektový systém, než jaký nabízí C++, C# nebo Java). Ale jazyky tohoto typu IMHO objektové nadstavby nepotřebují, protože samy o sobě umožňují vytváření tak silných výrazových prostředků, jaké si jen autor programu přeje a potřebuje k řešení svého problému, takže proč se omezovat na objekty.

2
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 30. 09. 2025, 22:27:26 »
Nevím, no. Mám už za ty desítky let něco odprogramováno a slovy doktora Vlacha, "zákony života nám ukládají vyzkoušet všechny možné varianty, abychom se nakonec vrátili k té první." V mém případě - procedurálně-imperativnímu strukturovanému paradigmatu. Opravdu mám pocit, že všelijaké ty snahy o čisté OOP, FP a já nevím, co ještě, jsou takové snahy najít svatý grál, nebo to království, kde létají pečení holubi rovnou do úst. Jenže nakonec člověk zjistí, že "co já se toho království nahledal... Nic nenajdou. Všude se musí... makat." A čím více jsem toho viděl a vyzkoušel, tím větší mám pocit, že ta "klasika" je nakonec to nejlepší. Takže když čtu podobné náboženské texty jako ten odkazovaný, už se musím jen usmívat.
No já dělám primárně v C++ a C#, ale Haskell hodně ovlivnil moje uvažování. Jo, když hledáte stříbrnou kulku, dostanete akorát žaludeční vředy. Ale jako inspirace, že se dá problém pojmout jinak a líp je to supr.

Řekl bych že zrovna nové C++ je funkcionálním programováním hodně ovlivněné. I sprosté slovo na M by se našlo :)
Jako inspirace a zkušenost rozhodně ano, proto by měl, podle mě, profík poznat vícero různých jazyků a paradigmat, aby si aspoň trochu osahal, kde jsou jejich silné stránky a kde ty slabší, co se dá použít i jinde a tak. Ale stříbrnou kulkou není ani jeden (pro rustafariány - ne, ani Rust to není). "Nové" C++ je pro mě už vyloženě dort Pejska a Kočičky. Jinak s C++ byla spojena většina mé profesionální kariéry, ale poslední roky se mu už programově vyhýbám.

Jen tak pro zajímavost - objektové paradigma je starší, než si mnozí lidé myslí. První nebyl ani S. od pana K., ba ani S. pana D., ale patrně práce Douglase T. Rosse na přelomu 50. a 60. let.

3
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 30. 09. 2025, 20:52:26 »
Btw asi velmi dobré porovnání OOP s funkcionálním přístupem (identity, stavy) napsal Hick Hickey https://clojure.org/about/state

Minimálně za přečtení a zamyšlení to stojí. Možná to automaticky vyřeší ten problém s "lejstrem" vs "lejstrem se štemplem" - imho je to jen otázka správného pojmenování jednotlivých abstrakcí.
Takže když čtu podobné náboženské texty jako ten odkazovaný, už se musím jen usmívat.

Naprosto v pořádku, ať si každý programuje, jak uzná za vhodné, ostatně kdo já jsem, abych to rozhodoval (tedy kromě toho, jak to budeme dělat v mém týmu). Ale ta linkovaná stránka v žádném případě není náboženský text, ale dobré vysvětlení, jak se s identitami a stavy pracuje v Clojure, což je poměrně prakticky navržený jazyk, ovšem postavený na praktickém FP.
Až na ta hodnotící prohlášení. Praktický jazyk postavený na FP (i když ne tak fundamentálně) je pro mě Common Lisp. Scheme taky ještě zkousnu, ale např. Erlang nebo Haskell už není můj cup of tea. S čistým OOP mám mnohem menší problém (Smalltalk), ale pořád se nemohu zbavit dojmu, že OOP mě nutí věci dělat mnohem kostrbatěji, než je nutné. A jazyk typu Rust - to je čistý BDSM.

4
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 30. 09. 2025, 19:47:05 »
Btw asi velmi dobré porovnání OOP s funkcionálním přístupem (identity, stavy) napsal Hick Hickey https://clojure.org/about/state

Minimálně za přečtení a zamyšlení to stojí. Možná to automaticky vyřeší ten problém s "lejstrem" vs "lejstrem se štemplem" - imho je to jen otázka správného pojmenování jednotlivých abstrakcí.
Nevím, no. Mám už za ty desítky let něco odprogramováno a slovy doktora Vlacha, "zákony života nám ukládají vyzkoušet všechny možné varianty, abychom se nakonec vrátili k té první." V mém případě - procedurálně-imperativnímu strukturovanému paradigmatu. Opravdu mám pocit, že všelijaké ty snahy o čisté OOP, FP a já nevím, co ještě, jsou takové snahy najít svatý grál, nebo to království, kde létají pečení holubi rovnou do úst. Jenže nakonec člověk zjistí, že "co já se toho království nahledal... Nic nenajdou. Všude se musí... makat." A čím více jsem toho viděl a vyzkoušel, tím větší mám pocit, že ta "klasika" je nakonec to nejlepší. Takže když čtu podobné náboženské texty jako ten odkazovaný, už se musím jen usmívat.

5
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 30. 09. 2025, 10:58:49 »
To je dost rozdíl oproti té serializaci do různých formátů (počet těch formátů je neomezený a předem neznámý).
No a v objektovém návrhu, jak ho chápu já, by naopak spíše objekt toužící po serializaci jiného objektu (exportu do jiného formátu...) poskytl takovému objektu objekt, pomocí kterého si to ten inkriminovaný objekt zařídí sám. Tím netvrdím, že opačný přístup je chybný, spíše bych řekl, že ve skutečnosti jen není objektový, protože narušuje zapouzdření. Ve skutečnosti může být (a také asi bude) jednodušší a efektivnější - znalost nějakých vnitřních detailů objektu může spoustu věcí usnadnit, naopak - blackboxing "za každou cenu" může vést k neřešitelným (nepředvídatelným) situacím při návrhu rozhraní. Ale to se dostáváme k samotné filosofické otázce, zda tedy vůbec OOP.

6
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 30. 09. 2025, 08:51:57 »
Nicméně v tom příkladu šlo o tu logiku, který objekt je aktivní a který pasivní a kde se nachází implementace. Jde třeba o různé ukládání nebo načítání – ať už do různých souborových formátů nebo třeba do databáze nebo odeslání na po síti. Ve většině případů považuji za špatný návrh to, aby ten datový objekt měl takovou metodu. Většinou patří spíš do jiného objektu, který se o de/serializaci příslušného formátu (PNG, XML atd.) nebo obsluhu příslušného úložiště a správu spojení stará. Je to pružnější návrh, který umožňuje přidávat další formáty a úložiště (i jiným autorům) a nezanáší to rozhraní toho objektu a nezvyšuje to komplexitu jeho implementace (v něm je jen metoda a kód pro vrácení nebo načtení nějaké kanonické implementace třeba RGB bitmapy, zatímco implementace jednotlivých kodeků je jinde).
To ale nejde takto kategoricky, bez kontextu říci. A to je přesně to, o čem jsem mluvil - past zkušenosti "reálného světa", "selský rozum". Jenže ten občas selhává. Tento selský rozum by nám velel, že např. v nějakém GUI je nějaký painter, který zajišťuje zobrazování jednotlivých oken (jako Screen.paint(window)) - a opravdu tak něco takového může být. Ale z praktického hlediska window rozumí nějaké zprávě typu drawOn, kterou nakonec zpětně pošle ten painter tomu oknu, protože ono nejlépe ví, jak se namalovat - tedy nakresli se - což je to "zvěrstvo" typu naskoč si na vidle. Naopak, lpění na modelu z reálného světa by představovalo komplikaci.

7
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 29. 09. 2025, 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á.

8
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 29. 09. 2025, 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).

9
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 26. 09. 2025, 11:05:00 »
Napsat si něco sám má své výhody i nevýhody. Výhodou je, že nad tím mám plnou kontrolu - dodržuji zpětnou kompatibilitu, když to potřebuji, nedávám tam funkcionalitu, co nepotřebuji. Nevýhodou je, že stojí čas si to napsat. Občas to je však méně času, než se naučit používat cizí knihovnu, nebo tu cizí knihovnu ohnout, aby fungovala, jak potřebuji.
Ještě jsi zapomněl na jednu další nevýhodu - zavedeš si tam bugy. Žádný kód nejde napsat bez bugů, a na rozdíl od cizí knihovny ti je nikdo neopraví. Všechny je musíš najít a opravit sám (ano, pokud by ta cizí knihovna byla nekvalitní, tak v ní nejspíš bude víc bugů než ve tvojí implementaci, ale u kvalitní, zavedené a "battle-tested" knihovny to až tolik nehrozí).
Knihovny mají tendenci být komplexní a řešit věci, z nichž většinu pro svůj úkol nepotřebuji, a jediná funkce té pro mě nepotřebné části je, že je akorát potenciálním zdrojem chyb a exploitů. Vždycky je dobré zvážit, zda se vyplatí nějakou prkotinu na pár řádků řešit knihovnou čítající desítky-stovky tisíc LOC, z nichž každý má nějakou nenulovou pravděpodobnost, že je zabugovaný. Nehledě na to, že je nelidské, když třeba mobilní aplikace na pouhé posílání zpráv zabere víc, než byla kapacita mého prvního hard disku na PC.

10
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 24. 09. 2025, 14:44:22 »
A teď si představ, že potřebuješ použít nějakou knihovnu nebo framework, který jen tak zbuildit znamená třeba postahovat 30 závislostí, a ten framework se vyvíjí.

Z toho se stane part-time job jen řešit ty závislosti, aby byly aspoň trochu aktuální.

Já jsem třeba na jeden projekt potřeboval použít knihovnu Skia............

To je pak otázka, co je pro vás low-level projekt, když má desítky závislostí. Asi ne totéž, co třeba pro mě.
Jinak souhlas s C++, to používám jen z donucení, pokud možno vůbec. Na low-level věci zásadně C, případně Forth, případně Assembler. Na high-level je docela velký výběr.  C++ je moderní obdoba FORTRANu - k ideálu daleko, poznamenán letitým vývojem, halda zdrojáků v něm napsaných. A lidi kolem Rustu - ty si představuji jako takové ty polonahé tlouštíky na čtyřech s koženou maskou pejska, co si je na vodítku tahá domina s důtkami (tj. kompilátor Rustu). Proti gustu... Jen ať mi to nikdo nevnucuje jako to nejlepší, co kdy bylo vymyšleno.

11
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 20. 09. 2025, 11:48:39 »
Nemyslím si, že by byl náhradou Javy, ale spíš náhradou C++.

Už zas chce niekto nahradzovať C++?? To sa naozaj nestane...

Je mi jasné, že C++ tu bude ještě dlouho, ale snad uznáš, že Rust je o něco bezpečnější a že dává méně prostoru, jak se střelit do nohy.
To není zas tak silný argument, jak si spousta lidí myslí. Snaha o takové jazyky tu byla už dávno a stejně oproti těm "nebezpečnějším" vždycky hrály spíše druhořadou roli. Asi nejznámější příklad - Pascal vs. C. Pascal nepochybně je bezpečnější a přehlednější než C, tlačil se lidem do hlav už od středních škol, ale stejně nakonec většina těchto lidí přešla na C. Ten proces bych přirovnal k přechodu z cvičného letounu na "ostrý" stroj.
Za sebe říkám, že Rust mi nestojí za tu hromadu problémů, kterými se pokouší řešit jiné problémy. Je to podobné, jako by mi někdo místo češtiny nutil jiný jazyk, který nemá vyjmenovaná slova a shodu podmětu s přísudkem - zato říci v něm "dobrý den" je, jako když Wimmer učí maďarštinu. Jenže já v těchto pravopisných jevech chyby už dávno nedělám. Rustafariáni tvrdí, že každý v tom dělá chyby, ale já trvám na svém - chybu takového typu jsem v C neudělal, ani nepamatuji. Navíc pak tu je nedílná součást vývoje - testování.

Před nějakými 30 lety se kladly řečnické otázky, zda FORTRAN přežije rok 2000. C, a zejména C++, mělo přitom nepochybně mnohem silnější tah na branku v porovnání s FORTRANem-66 nebo 77, než má Rust oproti C++. Asi není špatné Rust umět (po mně to už nechtějte), ale pracovat na C++ nebo Javě je jistější chleba.

12
Vývoj / Re:Je jazyk C skutočne ťažký?
« kdy: 13. 06. 2025, 13:44:59 »
https://wordsandbuttons.online/so_you_think_you_know_c.html

5/5

Nikdy o sobě neřeknu, že dokonale ovládám češtinu, třebaže ji používám celý život. Ale myslím, že ji ovládám velmi obstojně, rozhodně dostatečně, abych v ní mohl vyjádřit jakoukoli svou myšlenku. Takhle přistupuji i k programovacím jazykům. Ve sveřepých šakalech chybu neudělám, ale jistě by se našel jiný špek, na který bych se nachytal. Jenže to, podle mě, není podstatné. O jazyku samotném to nic nevypovídá. Ukažte mi programovací jazyk, v němž nenajdete konstrukci, která by se dala považovat za špek. Někdo považuje vyjmenovaná slova za špek, někdo shodu podmětu s přísudkem. Ve skutečnosti to není nic komplikovaného na používání - s trochou cviku. Opravdovým špekům se lze i při pokročilém používání vyhnout.

Např. mnohými tolik opěvovaný Rust. Na mě působí dojmem, že přechodníky nemá, protože v nich spousta lidí dělá chyby, tak mě nutí místo nich použít nějaký krkolomný konstrukt.

13
Vývoj / Re:Je jazyk C skutočne ťažký?
« kdy: 13. 06. 2025, 08:51:58 »
Raději nedefinované chování, než za každou cenu vymýšlet konkrétní chování, jež nemusí být intuitivní. Nevím, jak je to ve standardu dnes, ale další operace, jež by měly být IMHO nedefinované: umocňování záporného čísla na racionální, modulo dělení záporných čísel...

14
Vývoj / Re:Je jazyk C skutočne ťažký?
« kdy: 12. 06. 2025, 14:47:28 »
Jenže na té adrese může být registr která má nenahraditelnou speciální funkci či význam. To je naprostý nesmysl to řešit tak jak říkáš. To může udělat jenom teoretik který k tomu prakticky nikdy nečmuch.
To je velmi neobvyklé, že by byl speciální registr nějakého mikrokontroléru na adrese 0, kdy jsi na to prakticky narazil a musel jsi to řešit? Neříkam, že neexistují architektury, kde to tak je, ale zajímalo by mě, kde jsi to prakticky potkal? Pokud se totiž něco takového stane, máš opravdu problém. Buď musíš do assembleru a provést zápis tam, nebo dělat v C něco hodně nestandarního a doufat, že se to nerozbije s novou verzí překladače.

Je ale velmi obvyklé, že procesor po resetu začne vykonávat program od adresy 0. Takže zápisem instrukce skoku na adresu 0 de facto měním vektor "přerušení" typu reset.

15
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 14. 05. 2025, 14:46:02 »
To si nerozumíme. To není v tom, že je to boží řízení. To je v tom, že vy neumíte počítat. Já vám opravdu nezaplatím x $ za to, abyste vy měl pocit, že je to správně.

Možná ještě příklad:

Já když budu chtít vytvořit projekt, a budu poptávat vývojáře, tak vyrazím dveře s vývojářem, který mi bude tvrdit, že v C to napíše lépe, ekonomičtěji, než to by to napsal nědo jiný v Rustu. Když vím, že ten C vývojář bude desetkrát dražší, zatímco to Rust programátor to udělá líp, i když bude méně zkušenej, a výsledný kód bude měně optimální, což se mi do ceny nepromítne.
Ano, mohli bychom se tu vzájemně obviňovat z toho, že já neumím počítat a vy zase, že jste fanatický zastánce Rustu. Nevím, kolik vám je, ale pro mě je to už třetí hype, jehož jsem svědkem-nejdřív zázračné C++, pak zázračná Java a teď zázračný Rust. Nevím, kde jste vzal nesmysl, že nezkušený vývojář v Rustu něco udělá lépe a levněji než průměrný vývojář v C (C++, Javě, Go, Pascalu, whatever...). Sorry, ale tohle už je nějaké náboženství-jak ty články, že něco je napsané v Rustu (sláva!), někdo něco přepsal do Rustu (Rust rulez!), někdo se rozhodl zastavit projekt v Rustu (hanba mu, špatné rozhodnutí bez ohledu na fakta)...
Původní dotaz byl na budoucnost Rustu v embedded světě. Můj názor je, že momentálně je to spíše marginální záležitost a že se na tom nejspíš v blízké budoucnosti nic nezmění. Ve vzdálenější zas někdo přijde s něčím jiným, módnějším, "modernějším", až se opět ukáže, že programy v Rustu nejsou víc sexy, než kdyby byly napsány v čemkoli jiném. Důvodem je, že Rust nepřináší nic tak zásadního, jako bylo C oproti assembleru, a není to ani "(eko)systémový jazyk", jako je tomu v Unixu, z něhož se přirozeně rozšiřovalo dál. Ono i to C++ je v embedded světě takové rozpačité, spousta kódu co jsem v této oblasti viděl na mě působí dojmem upachtěného OOP, tj. vymyslím nějak třídy a objekty, i když to v dané situaci vůbec nic nepřináší, jen více kódu a nepřehlednosti. Prostě mnou kritizovaná bezhlavá grafománie.
Asi bych Rust doporučoval místo C++. Ale zároveň bych vážil, zda v dané situaci neexistuje ještě příhodnější možnost, např. kombinace více jazyků s rozvrstvením do více úrovní/modulů. Ale to už opět míří spíše na desktopy a servery.

Stran: [1] 2