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 - Radek Miček

Stran: [1] 2 3 4
1
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 08. 10. 2025, 15:28:02 »
Jenom pro zajimavost, rust neznam, jde v rustu udelat carmackuv fast inverse square root?

ChatGPT: Dnes už se tenhle trik v CPU nepoužívá, protože instrukce RSQRTSS / RSQRTPS v SSE dělají rychlý přibližný výsledek hardwarově a přesnost se případně doladí jednou Newton–Raphson iterací.

To není pravda, trik se používá, protože dává deterministický výsledek. Zatímco RSQRTSS může dávat na různých procesorech různé.

2
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 08. 10. 2025, 07:50:04 »
Je výsledný kód opravdu rychlejší s menší paměťovou stopou?

Dokázal byste si představit, že by se v něm dal naprogramovat engine 2,5D počítačové hry třídy AAA?

Většinou není rychlejší než dobře napsaný kód v C.

(1) Důvodem je převážně to, že v Rustu je zvykem pracovat s hodnotami po jednom, po jednom je alokovat a po jednom je uvolňovat za pomoci RAII. A to je pomalé. V dobře napsaném C kódu byste pracoval se skupinami objektů a uvolňování by měl být ideálně no-op.
(2) V Rustu totitž moc jednoduše nejde používat vlastní alokátory. V ideálním případě chcete různé alokátory pro různé věci. Takže třeba u hry pro každý frame máte nějaký arena alokátor, kde se alokuje velice rychle, a na konci framu vše uvolníte jen nastavením jedné proměnné.
(3) V benchmarcích někdy vyjde Rust rychlejší než C. Někdy je to dáno tím, že C používá pomalý malloc ze standardní knihovny a Rust má rychlejší alokátor. Když v takových případech nahradíte alokátor v C jiným, tak začne být rychlejší kód v C.
(4) Teoreticky by mohl být Rust rychlejší díky optimalizacích založených na přísnějších pravidlech aliasingu. Bohužel v Rustu ta pravidla zatím nejsou přesně specifikovaná. Až je nějaká komise přesně určí, tak se teprve uvidí, jaké knihovny mají nedefinované chování (např. kdyby se určilo, že platí Stacked Borrows, tak knihovny jako tokio nebo json budou mít nedefinované chování).
(5) Engine samozřejmě jde naprogramovat, ale Rust na to moc vhodný není. Spíše vám hází klacky pod nohy a vy pak končíte s méně efektivním kódem, protože abyste uspokojil borrow checker, tak kopírujete něco, co byste jinak kopírovat nemusel.

3
Odkladiště / Re:Jak fungují eDoklady?
« kdy: 05. 10. 2025, 18:33:52 »
Fungují tak, že si stáhnete do mobilu doklad, který má platnost omezenou dva dny. Během té doby se dá ověřit offline. Po dvou dnech se musí stáhnout novější verze dokladu s platností další dva dny. Resp. mělo by se to stahovat jednou denně, aby tam byla rezerva.

Cas aktualizace bych volil treba jako hash cisla dokladu, modulo 86400, at se to rozprostre behem dne.

Asi by se muselo i nějak řešit, že ne každý je 24 hodin připojen k internetu.

Nicméně, pokud jde o to potvrdit, že nějaký doklad je platný pro nějaké dny, tak by mělo stačit jen digitálně podepsat krátkou zprávu. Jeden podpis by pomocí Ed25519 mohl trvat kolem 100 mikrosekund. Takže na jednom jádru jich jde za sekundu udělat 10000. Takže si myslím, že by jeden server mohl obsloužit celou Republiku během minuty.

4
Odkladiště / Re:Jak fungují eDoklady?
« kdy: 04. 10. 2025, 20:48:51 »
Je to úplně to stejné, jako s webovými certifikáty – buď zjišťujete, zda nejsou zneplatněné, ze seznamu odvolaných certifikátů, který si jednou za čas stáhnete. Nebo to zjišťujete online. A nebo s vydávají s platností pár dnů, což teď testuje Let`s Encrypt. Protože se ukázalo, že ty první dva způsoby v praxi moc nefungují.

Ale na druhé straně tady stát více kontroluje ty aplikace a klidně si může říct, že pokud aplikace nemá stažený aktuální seznam zneplatněných dokladů, tak nemůže ověřovat. A asi by bylo pro server jednodušší, kdyby z něj klienti často stahovali jen seznam zneplatněných dokladů, než si často nechávali vystavovat nové a nové doklady (protože ten seznam zneplatněných je pro všechny klienty stejný a dá se čekat, že bude docela malý - do pár tisíc denně).

Nicméně je pravda, že kdyby nějaký den bylo z nějakého důvodu potřeba zneplatnit všechny doklady, tak stahovat jejich seznam není praktické - musely by se zneplatnit nějakým wildcardem.

5
Odkladiště / Re:Jak fungují eDoklady?
« kdy: 04. 10. 2025, 19:35:56 »
Je to úplně to stejné, jako s webovými certifikáty – buď zjišťujete, zda nejsou zneplatněné, ze seznamu odvolaných certifikátů, který si jednou za čas stáhnete. Nebo to zjišťujete online. A nebo s vydávají s platností pár dnů, což teď testuje Let`s Encrypt. Protože se ukázalo, že ty první dva způsoby v praxi moc nefungují.

Aha, díky moc za doplnění. To dává smysl.

6
Odkladiště / Re:Jak fungují eDoklady?
« kdy: 04. 10. 2025, 15:45:16 »
Aha, chápu. Dík.

I když si říkám, že kdyby to offline platilo déle, tak by se to mohlo řešit revokacemi, kterých asi nebude tolik? Tj. každý, kdo to ověřuje by si jen aktualizoval seznam těch revokovaných dokladů.

7
Odkladiště / Jak fungují eDoklady?
« kdy: 04. 10. 2025, 14:28:47 »
Zdravím,

chtěl bych se zeptat, jak vlastně eDoklady, které na začátku voleb měly výpadky, fungují.
Myslel jsem, že to lidem funguje i offline? Nebo byl problém, že úředníci nebo
volební komise to nemůže offline ověřit?

Nebo co se vlastně stalo?

8
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 02. 10. 2025, 20:10:14 »
Smyslem té serializace je, že chci s někým komunikovat – typicky s nějakým externím systémem nebo třeba s jinou instancí svého programu. Proto si dohodneme nějaké rozhraní, kontrakt, který budou obě strany dodržovat, a který popisuje logickou strukturu předávaných dat případně i protokol jejich předávání. Ten koncept IDL nevznikl jen tak pro nic za nic…

A proto má smysl, aby ty objekty vygenerované z téhle specifikace jí odpovídaly 1:1 – abych mohl ve své aplikaci mohl vytvářet nebo číst libovolné struktury, které jsou dle té specifikace validní. Tady není moc prostor pro kreativitu a nemá smysl si to dělat po svém a jinak.

Už se mi několikrát vyplatilo si ten parser psát ručně (vlastně už to ani jinak nedělám - napsal jsem si na to knihovnu se kterou se to dělá snadno). Prvotním důvodem bylo, že XSD generátory generovaly typy, co se těžko používají (tehdy jsme měli Kotlin a používali data classy a XSD generátor uměl jen tradiční Java classy s gettery a settery bez null anotací). Takže bylo vlastně míň práce parsovat XML ručně, navíc jsme díky tomu objevili, že z té služby chodí i data mimo specifikaci.

9
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 02. 10. 2025, 19:52:10 »
Ale vysvětli mi, proč bych měl tím dictem něco ztrácet? Nevidím proto jediný důvod...

Protože ne všechny formáty jsou jako dict. Některé serializační formáty např. nemají názvy polí, nebo mohou vzít kus paměti, kde je struktura (s definovaným layoutem) a nic dalšího s ním nedělat. Nebo dokoknce větší blok paměti, kde je více struktur, které na sebe odkazují (třeba pomocí relativních offsetů).

Navíc často ten dict může obsahovat jen omezenou množinu typů, takže třeba neomezeně dlouhé číslo do něj nejde uložit přímo jako číslo, ale jako řetězec a pak se bokem serializátoru do JSONu musí říct, ať to uloží jako číslo, ne jako řetězec (i když to tak je v tom slovníku).

10
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 02. 10. 2025, 18:03:37 »
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.

Bavíme v kontextu OOP.
Serializační formát je jen jeden, ten dict, což bude nějaký slovník.
A starostí toho objektu právě je, že když používá například čísla s nekonečnou délkou, tak je napasovat do toho interface. O tom byl právě ten příklad.

Pak je další vrstva, že chci serializovat do jsonu. Která umožní přidávat další věci.

To mi nepřijde jako dobrý návrh - protože to, co už ztratíte tím dictem, se bude dost těžko rekonstruovat v další vrstvě. Proč prostě nemít jen jednu vrstvu. Bude to určitě srozumitelnější a rychlejší.

11
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 02. 10. 2025, 16:01:18 »
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.

Program se ale asi stejně rozbije, protože bude sice vědět, že se jedná o jinou verzi, ale nebude vědět, co s ní dělat.

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

13
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 01. 10. 2025, 21:42:07 »
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.

Mám pocit, že pro jazyky s multimetodami nikdy nevznikla efektivní implementace. Nebo ano?

Nevím přesně co tím myslíš. Psal o tom pan Tišnovský v roce 2016 a jazyku Clojure. Podle popisu to vypadá na podobnou věc, jako je v golangu tzv. func receiver. Tedy možnost si připsat metodu do objektu syntaxí

(object)Method(args)

Takto se do object dostane další metoda v rámci aktuální package. Každý package si může definovat jinou vlastní metodu pro sdílený objekt.

Měl jsem na mysli rychlostí. Že volání multimetod v CLOS není (myslím si) tak rychlé jako v C++ (kde je dispatch jen podle jednoho argumentu).

14
Vývoj / Re:Přechod z Javy na Rust. Ano či ne?
« kdy: 01. 10. 2025, 17:39:04 »
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.

Mám pocit, že pro jazyky s multimetodami nikdy nevznikla efektivní implementace. Nebo ano?

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

Stran: [1] 2 3 4