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]
1
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.

2
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...

3
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.

4
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.

5
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 14. 05. 2025, 08:55:32 »
mi opravdu nepřipadá jako uspokojivý stav věcí.

To je vám ke cti (ve skutečnosti s vámi do určité míry souzním), ale to je asi tak to jediné pozitivní, co se na tom dá najít.

Rovnice je jednou daná, a nemá smysl být nešťastný, že byste chtěl, aby dávala jiné výsledky.
No jo, to je ovšem zase takový ten přístup jak zpíval Werich, "tohle člověk nezmění, to je bóží řízení..."
Na běžných zařízeních mě to zase tak netrápí, i když ve světle zákazů žárovek, omezování výkonů vysavačů, varných konvic, připojování víček k PET lahvím, zákazům brček a uchošťourů atp. mě překvapuje, že tohle nikdo neřeší. Ale trápí mě to v tom průmyslu, kdy nároky kladené na řídící a automatické kontrolní systémy se kvůli úsporám na zaměstnancích, snaze tlačit všechno na hranu, a v energetice navíc ještě připojováním mikrozdrojů, neustále zvyšují, ale jejich kvalita a spolehlivost neustále klesá. Prostě nejsem ten typický lumík, co nadšeně kráčí do propasti s davem ostatních. A i kdyby mě ten dav nakonec ušlapal, můžu si říci-aspoň jsem zkusil se proti tomu postavit. Stavět se na odpor hlouposti je podle mě morální povinnost každého rozumného člověka.

6
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 13. 05. 2025, 19:57:14 »
Víte kolik afričanů by se mohlo napít z potůčku, který mi teče za barákem? Ho nechávám téct úplně zbytečně. Pěkně drahý potůček.
Přirovnání s potůčkem kulhá na všechny čtyři. Lepší přirovnání by spíš bylo s kohoutky, do kterých se nevyplatí dávat těsnění, protože je to moc práce, když vody je přece dost, takže nebude vadit, když si větší či menší čůrek pitné vody z každého kohoutku poteče jen tak nazdařbůh do kanálu. Ale zároveň všude do mě budou tlačit, ať šetřím vodou, nesprchuji se moc dlouho a omezovat velikost kbelíků.
To, že aplikace na mobilní bankovnictví by se ani nevešla na můj první harddisk a z deseti spuštění se tak jednou kousne, mi opravdu nepřipadá jako uspokojivý stav věcí.

7
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 13. 05. 2025, 12:56:10 »
Dnes je HW mnohem levnější, než čas vývojáře.... use case, kde se vyplatí na krev optimalizovat bude jen a jen ubývat. Tím neříkám, že nebudou, ale postupně se více a více funkcionality bude psát ve vyšších jazycích.
Tohle do jisté míry platí na desktopu a na smartphonech. Ale tady se bavíme o embedded a průmyslových aplikacích, kde je situace dost odlišná. Navíc u těch příkladů nešlo o žádnou optimalizaci na krev. Tam šlo o to, jestli to píše někdo, kdo používá hlavu, nebo blbec.
Já osobně bych s tou neustále omílanou mantrou o levném HW a drahém času vývojáře byl opatrnější. Kdyby se posčítal zbytečně promrhaný výkon na všech zařízeních, na nichž ten neefektivní SW pracuje, tak bychom dost pravděpodobně zjistili, že ušetřený čas vývojářů nás vyšel zatraceně draho. Nehledě na to, že čas to zabere právě těm nedoukům, kteří jsou v lepším případě nuceni objevovat Ameriku, zatímco profesionál by to vysypal z rukávu na první dobrou. V horším případě prohlásí problém za neřešitelný.

8
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 12. 05. 2025, 21:01:40 »
Máme procesory, na kterých běží linux za jednotky dolarů...
Osobně si myslím, že čím dál víc věcí v embedded půjde směrem, že tam bude někaký relativně hi-level os (Zephyr nebo linux) a vlastní aplikace se bude lepit nad tím v něčem, na co zrovna půjdou sehnat lidi...
Těch aplikací, které vyžadují bezpečnost/čas zase tolik nakonec není.
To bude dost náročné testovat, protože tím si dovnitř zanesete obrovské množství kódu, o němž ani přesně nevíte, co dělá, z 90 % je to pro danou aplikaci nepotřebné a představuje to jen potenciální zdroj chyb a cest pro různé exploity. Je to zbytečný nárůst komplexity. Aplikací vyžadujících bezpečnost je spousta, pokud se člověk pohybuje třeba v tom průmyslu. A není-li to přímo bezpečnost, tak riziko finanční škody. Dost velkou motivací pro dodavatele SW do průmyslu by bylo, kdyby ve smlouvách standardně bylo ujednání, že když vinou chyby v SW dojde ke vzniku škod, tak to dodavatel komplet nahradí.

Jožko a co by poradil mne, který má vystudované umění a pak přírodovědu (earth science) a fušuje se ti do řemesla?
mám firmu na realtime analytiku pro embedded devices.  Jsem dost kvalifikován? Nestačí, že jsem schopen se s tebou bavit? Já uznávám specializace, ale ne zabedněnost. Jo a píšeme to v C, C++, Rust a OCaml/StandardML kdyby tě t zajímalo ;) Univerzitu na to abys pohledal.
Zatím jsme se tu nijak odborně nebavili, jen tak obecně. Museli bychom se bavit o konkrétní věci. Žádnou vaši práci jsem neviděl, nejspíš jsem s vámi neměl tu čest v praxi se setkat. V čem píšete je celkem nicneříkající informace. Univerzitu na co? Pokud potřebujete univerzitu, aby vás tam naučili pracovat s vámi zmiňovanými jazyky, pak je něco špatně - to je přesně to, o čem jsem mluvil. Stačí znát obecné principy a postupy, které se více-méně od 60. let minulého století nemění. Snad všechno už tu od té doby v nějaké podobě bylo. S touto obecnou, vámi neuznávanou průpravou, zvládnete práci s nějakým konkrétním jazykem vcelku snadno. Pokud bychom oprášili ten zubařský příměr, tak je to jako práce s konkrétním materiálem nebo konkrétním nástrojem. Jenže ta podstata znalostí spočívá ve schopnosti posoudit vhodnost určitého materiálu, nástroje či postupu, umět správně diagnostikovat problém a v každém konkrétním případě umět stanovit vhodný další postup. Ne, protože jiný neznám, protože je s tím nejméně práce, nebo protože je to momentálně hype, ale protože je v daném případě optimální.
Opět z praxe - jestliže vás firma odbývá s tím, že na daném HW není možné určitou věc implementovat kvůli nedostatku paměti, a vy při nahlédnutí do programu zjistíte, že používají vnořená volání, místo aby to vyřešili pomocí stavového automatu, takže by stačila jedna stavová proměnná, jedno volání a hromada paměti by ještě zbyla, tak je asi něco špatně. Totéž jiný ekšpert - "nelze, pro daný úkol nedostatečný HW". Problém byl v tom, že místo aby kalibrační křivku implementoval pomocí interpolační tabulky a FXP aritmetiky, snažil se to realizovat přesně podle údajů z katalogu, tj. potřeboval FP knihovnu, aby mohl do programu prostě tupě opsat kalibrační vzorec. Nebo jiný "neřešitelný problém", tentokrát v assembleru - měřidlo dodává údaj ve formátu double, systém to potřebuje jako single... (btw - pomohlo by nějak dotyčným s řešením těchto problémů, kdyby používali Rust?)
A ne, řešením opravdu není použít silnější HW. Jednak to často nejde, průmyslový HW se nedá měnit jak ponožky, to jsou systémy, které mají spolehlivě a kontinuálně pracovat i desítky let a stojí to desítky, stovky milionů, a jednak neschopný vývojář vždycky dříve či později narazí na problém, na který mu daný HW nestačí, ale stačil by mu, kdyby nebyl neschopný.

9
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 12. 05. 2025, 14:53:23 »
Jaké je podle Vás odpovídající formální vzdělání ve světě, kde se musíte neustále vzdělávat?
Vaše formální znalosti po těch desítkách let, dle mého názoru, jsou celkem na nic. To co Vás drží v práci je, že se vzděláváte. A jestli jste vystudoval medicínu, strojařinu, přírodovědu, lingvistiku, historii, nebo cokoliv jiného a jste schopen se vzdělávat, je celkem jedno.

Ten příklad se zubařem mne také pobavil protože:

Linus Torvalds, the creator of Linux, once made a famous comment comparing self-taught programmers to self-taught dentists. Here's a paraphrased version of what he said:

"I'm a big fan of education, but I'm also a big believer in self-teaching. That said, I wouldn't want to go to a self-taught dentist."

Takže klidně zůstanu jako self-taught programmer :D
Jedno to rozhodně není. Stejně jako to není jedno v jiných oborech. Jako zubař-samouk si klidně vrtejte do vlastních zubů. Ale kdybyste si otevřel zubní ordinaci, asi by to bylo kvalifikováno jako pokus o ublížení na zdraví. Můj obor je průmysl a když vídám výtvory programátorů-samouků, dalo by se to často kvalifikovat úplně stejně.
Abych to upřesnil, dovedu si představit, že si doktor všeobecné medicíny udělá atestaci na zubaře, stejně jako že si matematik nebo elektrotechnik doplní relevantní znalosti z oboru vývoje SW. Ale elektrotechnikovi, který si po večerech na internetu prohlížel texty a videa o zubařině, načež si pořídil křeslo a vrtačku, bych svůj chrup rozhodně nesvěřil. Zprasený, za určitých okolností by se dalo říci i životu nebezpečný software od nedostudovaných samouků, už jsem bohužel potkal mnohokrát. Ne, že by neplatilo úsloví, že i mistr tesař se utne, ale u těch tesařů-samouků je to téměř jistota.

10
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 06. 05. 2025, 15:59:48 »
Rozdíl mezi zkušeným profesionálem a nezkušeným začátečníkem je jen ve škodě, kterou jejich chyby způsobí. Začátečníka nikdo ke kritickým věcem bez dozoru nepustí.

I profíci dělají chyby. Dokonce i hloupé chyby. Taková Ariane nebo NASA by mohli vyprávět...

https://en.wikipedia.org/wiki/Ariane_flight_V88
https://cs.wikipedia.org/wiki/Mars_Climate_Orbiter#P%C5%99%C3%AD%C4%8Dina_ne%C3%BAsp%C4%9Bchu

A protože si složitost software a omylnost vývojářů umíme přiznat, tak máme od té doby různá povinná code review a povinné statické analýzy v překladači a mimo něj. I pro profíky.
Tak jsme se zasnili... To platilo možná někdy před 30+ lety. Už se v téhle branži pohybuji pár desítek let a bohužel musím konstatovat, že kvalita jde neustále dolů. Ani renomované společnosti často neangažují odborníky s odpovídající reálnou kvalifikací. Velmi často mě překvapuje, jak nezkušení a nedostatečně kvalifikovaní lidé často mají na starosti i poměrně kritické projekty. Tím nechci říci, že by byli hloupí, ale zkrátka na dané pozici bych si často představoval někoho lépe odborně vybaveného, kdo už má více různorodých zkušeností a má takový ten profesionální čuch. A zároveň má i odpovídající formální vzdělání. U nějakého samouka by si nikdo asi zuby spravovat nenechal. Ale v softwaru a elektronice je to dnes naprosto běžné. Takoví lidé jsou ovšem postiženi nevědomou nevědomostí, což je velmi nebezpečné. Jazyky jako Rust fachmanovi moc nepomohou, zato ho dost omezují.

To si klidně posuzujte. U Vašich vlastních projektů.

Jenže u dlouhodobých věcí to taky musí někdo udržovat. A nemusí znát všechny Vaše triky. Nebo se může ten kód portovat na novou platformu, kde nějaký invariant přestane platit.

MISRA je terčem kritiky proto, že je zastaralá a zaseklá právě u starých překladačů a verzí jazyka. Že nereflektuje nové funkce jazyků a překladačů, které usnadňují práci a zachovávají (hlídají) bezpečnost.

Taky očekává programování v notepadu bez kontrol a proto vyžaduje (otravný) styl psaní, který eliminuje přehlédnutí.
Důvodů kritiky je víc.
Moje "vlastní" projekty jsou například ty, za něž jsem momentálně odpovědný. I v C se dá psát stylem nevyžadujícím žádné triky. A kde je to žádoucí, tam je namístě komentář a zdůvodnění toho triku.

Nicméně pointer na adresu na stacku, která už není platná, je něco co si naprosto neumím představit jako užitečnou funkci. Pokud zrovna neopravuju vesmírnou sondu na dálku a neřeším nějakou hodně hodně obskurní chybu za běhu. A to není typický příklad, který by měl programovací jazyk podporovat pohodlným způsobem. Tam jisté nepohodlí ničemu neškodí.
Vzpomínám si na jednu situaci - záhadně zamrzající program za nespecifických okolností (na ARM Cortexu). Problém byl v tom, že jednomu procesu za jistých okolností přetékal zásobník k sousedovi. Samozřejmě se jako problematický jevil ten poškozený sousední proces a projevovalo se to dlouho poté, co k narušení jeho paměti došlo. Tady by se asi dala použít adresa zaniklého objektu na zásobníku jako marker, kam až zasáhl.


11
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 06. 05. 2025, 10:02:44 »
A proto velké firmy hlásí, že největší počet problémových chyb byl právě z oblasti správy paměti, kde C neposkytuje žádné pomůcky.
Stačí, aby velké firmy angažovaly zkušené profesionály za odpovídající peníze. Vyřešilo by to i další problémy.

Adresu si klidně získejte i v Rustu, jen nesmí opustit funkci, ve které je platná. A za vola by Vás považovaly i bezpečnostní standardy jako MISRA C.
Proto jsem napsal "mimo příslušný lexikální kontext" - tedy tím chci říci, že to adresu chci právě mít mimo tu funkci. MISRA je dlouhodobě terčem různé kritiky, to není žádný argument. Jestli to dává, nebo nedává smysl, to nejlépe posoudím já sám. Že si někdo neumí představit, k čemu by to mohlo být dobré, je jeho omezení, nikoli moje. Vybavuje se mi Horníček s Werichem: "H: Postavit loď na kopci? To je ale blbost! W: No, pravda, taky se mu tenkrát všichni blbci smáli."

On ten Váš problém (máte praktický příklad?) se možná dá vyřešit přímým přístupem do paměti, ale tak nějak tím riskujete celkem velkou plejádu možných chyb. Od poškození zásobníku až po přístup do náhodné paměti a záhadné pády aplikace.
Teď zrovna mě nenapadá, k čemu bych to využil. Ale život mě za ta léta naučil, že umí nastolovat situace, jež nevymyslí ani ta nejbujnější fantazie. Víte, já si velmi dobře uvědomuji, jaké chyby to může způsobit, to mi tu nemusíte vykládat. Stejně jako si uvědomuji, co se může stát, když v autě přejedu dvojitou plnou čáru. V naprosté většině situací to činit nebudu. Ale dovedu si představit i situace, kdy bych to udělal, zatímco kdyby tam bylo svodidlo, tak mám situaci výrazně komplikovanější.

12
Vývoj / Re:Budoucnost Rust v embedded světě
« kdy: 06. 05. 2025, 08:52:19 »
Rust je IMHO možná náhrada za C++, nikoli za C. Jakožto embedded a low-level vývojáři mi Rust nepřináší žádné killer-features, jen mi svazuje ruce. Nemám rád jazyky, které mě chtějí školit a vodit za ručičku, svá dětská léta mám už dávno za sebou.
K příkladům, jež tu padly - když z jakéhokoli důvodu budu chtít znát mimo příslušný lexikální kontext absolutní adresu, na níž byla na zásobníku nějaká lokální proměnná, tak nechci, aby mi nějaký blbý překladač házel klacky pod nohy, protože mě považuje za vola. Potřebuji se soustředit na řešení svého problému, ne přemýšlet nad tím, jak přemluvit překladač, aby udělal to, co potřebuji.

Stran: [1]