Pardon, ale klasicka zlib je na tom vykonove zoufale. Nicmene jeji vyhoda je, ze jde prelozit fakt hodne starymi kompilatory a funguje na obskurnich systemech.
Zajimalo by me porovnani s libdeflate, ta byla uz pred nekolika lety rychlejsi nez zlib nebo zlib-ng.
Bohuzel ta Rusti knihovna je plna unsafe kodu, takze nevidim moc vyhod oproti bindingum odzkousene zlib-ng nebo potencialne vykonejsi libdeflate.
Unsafe je skoro to všude i mimo C API. Jednak se tam používá C-style práce s pamětí. Např.
// zero initialize the memory
let prev = prev.as_ptr(); // FIXME: write_bytes is stable for NonNull since 1.80.0
unsafe { prev.write_bytes(0, w_size) };
let prev = unsafe { WeakSliceMut::from_raw_parts_mut(prev, w_size) };
A druhá věc je, že se tam používají SIMD instrukce jako např. AVX 2, které Rust neumí volat v safe kódu. Takže pak ty výkonné implementace jsou v podstatě celé jenom unsafe kód. Viz třeba adler.rs
Z tohoto + z README mi přijde, že autor vzal kód zlib-ng a snažil se jej ± 1:1 přepsat do Rustu. A kde to nešlo přímočaře vyřešit bez toho, použil unsafe. A co z toho plyne?
1. Dobré vědět, na čem jsme.
2. V zásadě by to nemuselo být horší než předloha.
3. Pokud se tomu bude věnovat dál, snad ty unsafe věci zredukuje nebo nějak rozumně zawrapuje. Možná během toho najde i chyby v původní implementaci.
Ad SIMD – to je jen otázka rozumného wrapperu, který bude unsafe, ale půjde rozumně zkontrolovat.
>>> Rusti knihovna je plna unsafe kodu,
To je fuzzy termín, dajte nejaké metriky, že koľko, čo a ako. Vážne ma zaujíma pohľad experta. Ak je unsafe kód dobre vyčlenený a testovateľný, tak to nebude big deal. Ak je to prelezené ako rakovinou, potom je to horšie, asi tak na úrvni C, len rýchlejšie. Tak ako?
27. 2. 2025, 15:11 editováno autorem komentáře
Osobne by som povedal, že oboje. Momentálne som v rust začiatočník a môj kód je diplomaticky povedané - nie najlepší. Ale beží to ako namydlený blesk. Ak knižnica používa paralelizmus, v C sa všetko musí nemotorne oprogramúvať, v Rust je to transparenté. Robím to cez Rayon a ten musí mať nejaké triky pod kapotou, nejak tie thready múdrejšie manažuje, než by som to robil sám. A aj v ostaných veciach asi bude dôvod, prečo je tá kompilácia tak strašne pomalá (robí to asi viac, než -O3 v gcc). Mám asi tušenie, že čo, len nechcem trepať, budú o tom lepšie materiály niekde.
Nelze generalizovat.
Je nutno si uvědomit, že binding v Rustu znamená, že celou tu C knihovnu narvu do unsafe, takže jsem si vlastně nepomohl.
U bindingu mám výhodu kódu ověřeným časem. V případě, že nemám v plánu nějak optimalizovat a vrtat se v tom, to bude naprosto dostačující.
U reimplementace mám výhodu, že se můžu opřít o Rust, a nebezpečný kód minimalizuji na čitelnou úroveň. Nevýhoda je v tom, že je to práce, která se musí udělat a vyplatit. Taky jako u každého nového kódu tam můžu nasekat nové chyby.
Pokud jsem příspěvek pochopil dobře, tak autoři si věřili, že se ten kód dá optimalizovat, a chtěli se pochlubit úspěchem.
Tedy důvod, proč zvolit zlib-rs je rychlost. Není důvod si myslet, že by bezpečnost byla nějak výrazně různá.
Tak ako tu uz bolo spomenute, nejak uplne nechapem tomuto telocviku a titulku.
Priamo na githube pri zlib-rs pisu ze vychadzali z zlib-ng, cize budu +/- vykonnostne porovnatelne. To ze je vykonnejsia ako zlib sa asi da ocakavat, ako tu uz bolo spomenute, povodna zlib nie je na dnesne pomery napisana najoptimalnejsie a podporuje vela kompilerov a platforiem - to je dan za vykon. Toto riesi prave zlib-ng. Ak pouzijem zlib-rs s bindingom, kde tak isto na svojom githube tvrdia ze benefit je vyssia bezpecnost, tak som tam kde som bol. Ak to pouzijem v ramci rust projektu tak asi ok.
Tak trochu mi pride ze sa spravil hype okolo rustu , ako svojho casu okolo javascriptu/node. Pritom jazykov ktore boli a vlastne aj su fajn len to pohnojili kompilerom a ekosystemom je habadej. Keby Sun nebol taky nenazrany a kratkozraky tak by Java mohla byt niekde inde, keby Google nebol za Go a netlacili by to len ako backend alternativu tak by sa z toho mozno stal zaujimavejsi jazyk, keby MS nespravil .Net ako truc podnik Sunu/Jave tak by mohol byt daleko zaujimavejsi. Keby niekto oprasil Pascal a spravil k nemu poriadny kompiler (aj ked FreePascal je celkom fajn) tak by sme mohli byt inde (Delphi/Lazarus celkom vymakane RAD) atd...
Na com skrachoval Sun by sa dalo polemizovat. Staci sa pozriet na ich HW, Sun Ultra a co stali napriklad len take sietove karty, co boli de facto brandovane 3Com karty, napoveda, tie od Sunu stali 10x tolko. A aj ten ich Solaris nebol ziaden zazrak. Jedine co mali bola Java a preto sa jej tak drzali az si sami podpilil konar.
>>>A aj ten ich Solaris nebol ziaden zazrak
Na ten som práve počul spievať ódy, mal na tú dobu unikátne vlastnosti. A AFAIK je to certifikovaný UNIX. Ich servery sa predávali ako riešenia so Solarisom. Nedá sa polemizovať, prečo skrachoval Sun, lebo skrachoval kvóli .com bubline, na ktorú doplatili aj iné HW firmy. Bolo kopec second-hand HW po skrachovaných startupoch a nový HW nikto nekupoval.
> Javu prevzal Oracle a ten nie je známy ako motor inovácii, práve naopak
Nebudu řešit obecný obraz Oracle, nicméně přijde mi, že za Sunu se Java rozvíjela mnohem pomaleji než za Oracle. Sun vyvinul až Javu 6 a velkou část Javy 7. Od Javy 8 dál mám pocit, že se to hýbe více.
A to nepočítám GraalVM, který spadá do ekosystému, ale není to přímo věc jazyka.
Otázka je, o čem přesně se bavíme. Jestli o samotném jazyků, standardní knihovně, JVM, dalším ekosystému apod. Já reagoval jen na jazyk (proto jsem nezahrnoval GraalVM), tam od Javy 1.3 (s tou jsem dělal v souvislosti s J2ME) do Javy 7 přibyla hlavně generika. Jo, bylo toho trošku víc, ale IMHO nic významného. V Javě 7 nebyla ještě ani lambda, resp. šlo to řešit leda pomocí anonymních tříd, což jednak bylo ukecané a jednak mělo určitá omezení. Naopak od Javy 8 dál začaly chodit novinky. Lambda, moduly, různá zjednodušení. Přijde mi, že od Javy 6 je to o dost jiný jazyk.
Pokud se podíváme šířeji, GraalVM mi přijde jako dost zajímavá novinka. Podpora dalších jazyků, jejich interoperabilita, native-image. I kdyby to byla jediná novinka, přijde mi to dost.
Lambdy sú možno fajn, ale to syntaktický cukor, moduly som nevidel reálne používať v praxi. Aj tie "zjednodušenia" sú syntaktický cukor, nič fundamentálne odlišné. Ak by som okolo roku 2010 upadol do kómy a prebudil by som sa teraz, Java by ma až tak neprekvapila.
Možno by ma milo prekvapili streamy, ale to je asi tak všetko. Ak by som mal na to guráž, tak sa na programovanie v Jave vykašlem a založím Rust startup. Ten jazyk robí všetko proste dobre. Hobby projekty som doposiaľ robil v Pythone, nie v Jave. (Aj v tom prototypujeme, lebo je to rýchlejšie, než sa zapodievať DecoratorModelThreadBusinessFactory a mavenom.)
28. 2. 2025, 12:13 editováno autorem komentáře
> Ten jazyk robí všetko proste dobre.
Zrovna asynchronní kód v Rustu je hrůza. Zvláště oproti novější Javě, kde máte virtuální vlákna neboli tzv. stackful coroutines. Díky tomu asynchronní kód v Javě vypadá jako synchronní (což btw zvětšuji znovupoužitelnost kódu). To se v Rustu bohužel moc neuchytilo, pár knihoven sice existuje, ale většina lidí jede Async Rust s tokio, což je mnohem složitější a náchylnejší k chybám
Hlavní problém je, že nemůžete normálně používat reference, protože všechno, co dávate v Tokiu do async funkcí musí být Send + 'static. Takhle je Tokio navržené a vy s tím nic neuděláte. Viz Async Rust can be a pleasure to work with (without `Send + Sync + 'static`)
> Lambdy sú možno fajn, ale to syntaktický cukor
…
> Možno by ma milo prekvapili streamy, ale to je asi tak všetko
Zkuste si použít streamy (jsou-li myšleny tu pro práci s kolekcemi) bez lambda… Jo, je možné použít syntaxí pro anonymní třídy, ale bude pěkně vidět, jak je ten syntaktický cukr užitečný.
> Ak by som okolo roku 2010 upadol do kómy a prebudil by som sa teraz, Java by ma až tak neprekvapila.
Pokud se jazyk vyvíjí konzistentně, nebude dělat velká překvapení, nové featury budou dobře zapadat do jazyka.
Co třeba type inference? Já vím, syntaktický cukr, ale fajn věc.
Šlo by pokračovat. Třeba pattern matching. Jo, do nějaké míry syntaktický cukr, ale zároveň snižuje prostor pro chyby.
V Javě jakožto jazyce dnes moc nedělám (na platformě Java ale ano – Scala, Kotlin), ale kdyby tu novinky z Javy 8+ byly dřív, možná bych neměl tolik důvodů zkoušet Scalu.
> Ak by som mal na to guráž, tak sa na programovanie v Jave vykašlem a založím Rust startup. Ten jazyk robí všetko proste dobre.
Jo, Rust je fajn, ale zaměřením míří trochu jinam než Java. A problém je s možnostmi práce, z velké části jde o nějaké shitcoiny.
>> Jo, Rust je fajn, ale zaměřením míří trochu jinam než Java. A problém je s možnostmi práce, z velké části jde o nějaké shitcoiny.
Java mierila do elektrospotrebičov a je z nej COBOL 21. storočia. Takže nič.
Viem si Rust napríklad predstaviť ako drop-in replacement webservisov v Spring Boot, prípadne rôznych výpočtov na backende, kde sa tradične používa Java. Chápem, že zrúdnosti typu Liferay, alebo Websphere to nenahradí.
Javascript je jazyk na houby, který má jediný benefit, vývojáře, kteří ho znají
Java je za zenitem, a své nástupce má: Kotlin, Scala.
Net je rybníček pro Windows, to nikoho nezajímá. C# je hloupý jazyk. To spíše F# je co k čemu.
Go je výborná alternativa pro aplikace, které se dříve psali v C/C++, byla a je poptávka.
Pascal, stejně jako Lisp a pod jsou prostě úkrok stranou, kdo by v tom dneska psal?
RAD (Delphi, Lazaurus, VisualStudio) je slepá ulička.
Jazyky a technologie se prostě vyvíjí jak zjišťujeme co je a co není dobrý nápad. Spiknutí bych v to nehledal.
Keď vypadol Majkrosoft Ažúr, tak polovica služieb nefungovala. Tipujem, že pre henten ich Klaud sa programuje práve na Visual Studiu. Môže to byť dosť masívne zastúpené.
Inak ak mám hovoriť z autopsie, tak väčšinou vídam rôzne deriváty Eclipse a Intellij. Môj brat je C++ vývojár a používajú vo firme Eclipse.
VisualStudio bolo pouzitelne vo verzii 6.0. Potom prisiel .NET a potreba MS ho pretlacit vsade (Java history). A preto sa rozhodli prepisat VS do .NETu. A odvtedy tu mame tento polorozbite relativne pouzitelne IDE. Na mensie projekty a .NET sa to pouzit da, ale na hocico vacsie a hlavne c/c++ je to konecna. Trochu tomu pomohla verzia 2022 ktora je prva 64bit, ale aj tak, nic nezvycajne ked VS vytuhne, debugger ma problem s vecsimi objektami/strukturami, atd. Ale to sme uz odbocili od temy.
VS by potrebovalo prekopat, ale bohuzial nema moc konkurenciu (aspon na windowse) tak naco....
Kontext. Přemýšlet prosím.
Visual Studio si udělalo svou slávu na visuálním návrháři, proto se to ostatně jmenuje Visual. Problém je v tom, že ten návrhář jednak velmi rád padá, a druhak ti umožní přepnout do kódu, ten poeditovat a následně si s ním neporadí.
Jako IDE je samozřejmě normálně použávaný, o tom není řeč.
Pak jsem vlastně zapoměl na nejslavnější RAD (po Delphi): XCode. Ale s ním mám málo zkušeností a slyšel jsem, že ten visuálná návrhář se taky moc nepoužívá. Ale zde to není má zkušenost.
Nemyslím, že to by byl benefit JavaScriptu. Tím je spíš to, že je v každém prohlížeči. Co je příčina a co je následek nelze jednoduše říci. Ale jinak i JavaScript má jisté drobné výhody ve vztahu k prostředí, ve kterém obvykle běží. Jakkoliv bych v těch prohlížečích taky raději viděl něco podstatně rozumnějšího.