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:F# pomenované typy v typovej signatúre funkcie
« kdy: 05. 11. 2025, 14:30:04 »
no jazyk to podporuje, ale vyzerá, že editor nie (podporuje pri discriminated unions, ale už nie pri typoch funkcie čo je divná nekonzistencia):

Explicitně předat ty parametry nechcete? Takto:

Kód: [Vybrat]
let findUniqueName nameExists name = findUniqueName' 0 nameExists name

To je totiž jediné, kde mi IDE zachová i jejich jména. Nejspíš se oboje i trochu jinak překládá. A pak z pohledu typového systému to moje je hodnota (value) a to vaše ne (částečné aplikace funkcí nejsou hodnoty kvůli value restriction - nesmí se totiž generalizovat).

2
Vývoj / Re:F# pomenované typy v typovej signatúre funkcie
« kdy: 04. 11. 2025, 20:02:16 »
F# ma oproti OCAML taku vymoženosť, že si viem pomenovať typy parametrov aj vrámci typovej signatúry funkcie

No, v F# se to pojmenování na rozdíl od OCamlu snadno ztratí. Když použijete labelled parameter v OCamlu, tak argument musí být labelled (např. když deklaruji let rec range ~first:lo ~last:hi = ..., tak to musím volat range ~first:1 ~last:10 a nejde range 1 10)


Čekal bych, že když findUniqueSlug bude funkce, tak by to mohlo fungovat (ale AFAIK není to nic, co by bylo garantováno specifikací jazyka):

Kód: [Vybrat]
let findUniqueSlug slugExists slug = findUniqueName' 0 slugExists slug

3
Vývoj / Re:Prečo nie je Lisp populárnejší?
« kdy: 04. 11. 2025, 08:23:53 »
Kód: [Vybrat]
string::10: collection not found
  for module path: plot
  collection: "plot"

Pardon, je třeba ještě nainstalovat plot:

Kód: [Vybrat]
pkg install racket -y
raco pkg install --skip-installed --auto plot

racket -e '(require plot) (plot-file (function sin 0 (* 2 pi) #:label "y = sin(x)") "sine.png")'
convert sine.png sine.gif

4
Vývoj / Re:Prečo nie je Lisp populárnejší?
« kdy: 03. 11. 2025, 21:33:57 »
"Moderní jazyky" problémy, které řešil kdysi Lisp, buďto vyřešily podobně jako on (převzaly principy z Lispu a dalších jazyků, zejména funkcionálních) nebo jinak. Máme (hygienická) makra, máme pluginy (s nástupem WebAssembly je lze v pohodě kompilovat za běhu a bezpečně), máme dynamické jazyky, které umí udělat reload modulu. Máme serializaci. Já úplně chápu, že Lisp byl v lecčems první, dodnes asi může lidi inspirovat a v něčem můžebýt šikovnější. Ale stojí ten opruz za to?

Přijde mi, že hodně věcí máme pořád jen na půl. Např. PyTorch v podstatě simuluje multimetody - musí je simulovat, protože C++ ani Python je nemají. Zatímco třeba CLOS nebo Julia ano, takže implementace něčeho podobného tam je jednodušší.

Nebo makra. Některé jazyky je mají, ale jejich schopnosti jsou různě omezené. Např. někde nemůžete makrem vygenerovat case uvnitř switche. Nebo nejde mít nehygienická makra, i když by se zrovna hodila.

Nebo globální proměnné. Někeré Lispy mají dynamic binding, což je o dost lepší.

Nebo zkuste v nějakém jazyce změnit to, jak se program vyhodnocuje. Např. tam vložit nedeterminismus - oproti lispovským jazykům to jde dost těžko.

5
Vývoj / Re:Prečo nie je Lisp populárnejší?
« kdy: 03. 11. 2025, 16:32:33 »
Ukažte mi bashscript

Něco jako:

Kód: [Vybrat]
pkg install racket -y

racket -e '(require plot) (plot-file (function sin (- pi) pi #:label "y = sin(x)") #:out-file "sine.png" #:out-kind '"'"'png")'
convert sine.png sine.gif

6
Vývoj / Re:Prečo nie je Lisp populárnejší?
« kdy: 01. 11. 2025, 19:44:56 »
By the 1990s, C, C++, and Java were already entrenched in universities and industry, and Lisp was relegated to academia and enthusiasts.

Co to je za větu? Java byla na univerzitách a Lisp v akademii? Není to to samé?

Each has different semantics, tooling, and communities. This fragmentation makes it harder for a single Lisp dialect to dominate.

Ale to je stejné i u ostatních C-like jazyků. Jaký je rozdíl?

Modern developers expect polished IDEs, package managers, documentation, and big standard libraries.

Hodně nových jazyků má malou standardní knihovnu. Třeba Rust tam nemá ani generátor náhodných čísel. JavaScript podobně.

A co chybí v IDE u lispovských jazyků?

7
Vývoj / Re:Prečo nie je Lisp populárnejší?
« kdy: 01. 11. 2025, 18:23:27 »
Citace
Otázka znie takto, že prečo sa to vlastne tak málo používa, keď lisp má za sebou dlhú históriu a je to veľmi schopný jazyk/rodina jazykov?

Oblíbenost a rozšířenost technologií nemá nic společného s tím, jak jsou schopné nebo s kvalitou.

Zrovna třeba Python je dosti složitý jazyk a stejně se doporučuje jako jazyk na začátek nebo jako jednoduchý jazyk. Tzn., že to, co lidé tvrdí nebo domnívají se, nemusí být pravda.

Jeden z problémů Lispu bylo IMO to, že špičkové implementace byly často komerční - jako třeba Allegro.

8
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é.

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

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

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

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

13
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ů.

14
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?

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

Stran: [1] 2 3 4