Tak nevim. sudo-rs rozbilo Ansible tim, ze zmenilo text promptu, a pokud vim, tak zatim nema zadny zpusob, jak vynutit puvodni chovani.
Zprávička je sice o coreutils, ale co vím s tím sudem, tak sudo-rs to řešit nebude (won't fix, my jsme 100% kompatibilitu neslibovali) a v Ansible modulu to začali řešit, ale naráží to na lokalizace.
Jediný workaround bez předchozí změny v systému (nalinkování původního suda jako výchozí) je teď v tom, že se v nějakém pre-tasku vydetekuje přítomnost /usr/bin/sudo.ws (tzn. původní sudo, které je tam pořád přítomné). A pak se nastaví, aby se používalo (ansible_become_exe: /usr/bin/sudo.ws).
Proč zrovna padla volba na Rust a ne třeba na Go nebo Python?
Proč to vlastně přepisovat? Co je v tom za výzvu? Ze to jde? Nadbytek Rust a nedostatek c++ vývojářů?
Na otázku se nemá odpovídat otázkou, ale tentokrát nemůžu jinak. Tedy proč ne v assembleru? Běh by byl rozhodně rychlejší, než ten nejlépe zkompilovaný Basic nebo JS.
Ten ale není memory safe, takže nesplňuje základní mantru.
Ale mohlo by se to napsat v Brainfucku, nebo alespoň v Laconicu. TM jsou memory safe by definition.
17. 9. 2026, 14:51 editováno autorem komentáře
Já myslím, že už jste to podchytil. Mně se líbí ten váš unsafe blok s PEEK a POKE.. :D Už se těším na balíčky coreutils-bs, sudo-bs.. :)
Hlavne je to jazyk dostatočne nízkoúrovňový pre tvorbu systémových utilít. Prekladaný do strojového kódu cieľovej platformy, bez GC, bez obludného runtime.
Jsou to nízkoúrovňové utility, u kterých chcete, aby rychle nastartovaly a neměly žádnou zbytečnou režii. Tím určitě padá Python, a Go pro tohle také není vhodný – je to vysokoúrovňový jazyk, který má režii (třeba automatická správa paměti). Rust je stejně nízkoúrovňový, jako C, ale má vlastnosti (zejména týkající se bezpečnosti), které C nemá.
Proč zrovna padla volba na Rust a ne třeba na Go nebo Python?
Protože cílem nebylo přepsat coreutils. Cílem je přepsat úplně všechen kód v C a C++ do Rustu, protože Rust je úplně nejlepší programovací jazyk všech dob. Protože memory safety (ať už to v pojetí Rustu znamená cokoliv) je ta jediná úplně nejdůležitější věc v IT. Coreutils jsou jen jeden malý krok na této křížové výpravě. A všichni, kdo si myslí, že tenhle projekt je blbost, nebo dokonce nemají rádi Rust, jsou dinosauři odmítající pokrok.
Je to tak. Memory safety, taková pitomost ... Proč lidi chtěj pořád něco zabezpečovat. Všechno otevřené všem, nikdo si aspoň nebude muset pamatovat hesla. Mailinator nám příkladem.
Martin Beran napsal nesmysl. Toho si všiml každý. Není potřeba rozebírat z toho nesmyslu úplně každý detail.
To není nesmysl, ale lehce sarkastické vyjádření postoje nezanedbatelné části fanoušků Rustu. Nechci nikomu křivdit, tak se nebudu vyjadřovat k tomu, kolik takových je. Možná mám prostě jen smůlu...
Ne, není. Možná by se našlo pár takových lidí (naprosto zanedbatelná část), ale podobní by se našli pro jakýkoli jazyk.
Vy všichni nechápete, že Rust je jen jedna etapa ve vývoji programovacích jazyků. A ano, přepsat všechen kód v C a C++ do něčeho jiného je více než žádoucí a není důvod sem psát to, co je napsáno na stránce projektu uutils (C například předělávalo svůj tooling mnohokrát a vždy to byla ergonomická tragédie).
Jo, mohli jste to přepsat do jiného jazyka, pokud máte lepší. A až/pokud bude někdy pro tyhle věci nějaký jazyk lepší než Rust, můžete, jsem zvědav na přidanou hodnotu.
Vy všichni nechápete, že Rust je jen jedna etapa ve vývoji programovacích jazyků.
Hodně nešťastná etapa.
A ano, přepsat všechen kód v C a C++ do něčeho jiného je více než žádoucí
Ne, není. A rozhodně ne do Rustu.
C například předělávalo svůj tooling
Jaký tooling máte na mysli? Pod pojmem "tooling programovacího jazyka" si představuji kompilátor, standardní knihovnu, language server pro editor/IDE, generátor dokumentace (Doxygen), statické analyzátory, podporu pro debugger. U linkeru už je docela diskutabilní, jestli patří do toolingu jazyka. Různé build systémy a package managery tam podle mého názoru určitě nepatří.
Jo, mohli jste to přepsat do jiného jazyka, pokud máte lepší.
Proč? Co je špatného na C++, popř. na C pro již existující kód nebo na platformách, kde není k dispozici C++?
Projevuješ úžasnou dávku nepochopení. Nebo nechápavého spíš děláš.
> Hodně nešťastná etapa.
O tomhle se můžeme přít donekonečna. Mezitím jednotlivci, menší firmy i ty obrovské přepisují spoustu kódu z C a C++ do Rustu a nevím o nikom, kdo by to dělal naopak (snad někde v embed světě to je možné, ale tam coreutils nespadají). Vyzýval jsem, abyste zkusili ty utility přepsat do něčeho jiného než do Rustu, ale to jsi asi nezaznamenal a rozhodně neudělal.
> Jaký tooling máte na mysli?
Nastuduj si, co dělá třeba cargo a srovnej to s hrůzami typu cmake.
> Co je špatného na C++, popř. na C pro již existující kód nebo na platformách, kde není k dispozici C++?
Tak nějak všechno. a v kódu GNU Core Utilities to je jasně vidět. Nové programovací jazyky nevznikají a hlavně se neprosazují proto, že ty předchozí nemají chybu.
> package managery tam podle mého názoru určitě nepatří.
Neberu vám váš názor, ale víte jak. Já jako dokážu pokácet strom holými nehty, ale přeci jenom už bych musel být hodně zoufalej. A to třeba jsem tak strašná konzerva, že IDE používám nerad a jen na Javu a C#.
Memory safety je supr věc, ale Rust je hlavně docela pohodlný na vyjadřování (vocuď-pocuď samozřejmě). Tak ony jsou i jiné jazyky, které jsou pěkné, pohodlné a s moderní syntaxí. Ale ne každý je tak nízkoúrovňový a štíhlý. A ony jsou samozřejmě i jiné jazyky, které jsou nízkoúrovňové a štíhlé, ale zase nejsou tak pohodlné na psaní nebo nemají memory safety...
Rust je hlavně docela pohodlný na vyjadřování
Možná ano, pokud se ovšem nesrovnává s C++.
s moderní syntaxí
Co to je, ta moderní syntax?
nebo nemají memory safety
A tuší někdo, co to memory safety v pojetí Rustu přesně je a jaké má všechny důsledky?
> "s moderní syntaxí"
> Co to je, ta moderní syntax?
Moderní syntax je syntax která opravila chyby a omyly C/C++ které se nahromadili od roku 1985 a reflektuje že je rok 2010+ a máme tu úplně jinou sortu programátoru kteří jsou zvyklí na trochu jiné features a syntax v programovacích jazycích. Jinak řečeno to je podobné jako že C++ mělo moderní syntax oproti např. ASM
17. 9. 2026, 23:37 editováno autorem komentáře
Moderní syntax je syntax která opravila chyby a omyly C/C++
Spíš nahradila podivnosti syntaxe C a C++ jinými podivnostmi, které nejsou o moc lepší nebo horší, jen jsou nové a jiné. Hlavně když za jeden den koukám do zdrojáků v C, C++, Pythonu, make, cmake a shellu, tak málo co ocením tak, jako sedmou variantu zápisu příkazu if :-)
nahromadili od roku 1985
C je ještě o hezkých pár let starší.
Ale stejně mám pocit, že "moderní" je tady myšleno jako "lepší", ale ve skutečnosti to neznamená vůbec nic.
> Ale stejně mám pocit, že "moderní" je tady myšleno jako "lepší", ale ve skutečnosti to neznamená vůbec nic.
Mám výhodu v tom, že já to prostě zkusil a porovnal s jazyky které znám a mohu porovnat.
> Co to je, ta moderní syntax?
Moderna syntax je taka, o ktorej ti ludia pouzivajuci Rust povedia, ze je moderna. Pripadne v nej musis rozlisovat medzi tabom a medzerov, lebo YAML-like jazyk.
A se kterým C++? On se ten jazyk dost mění a bordel způsobuje i míchání verzi standardu v jednom projektu.
Verze 89 je proti 11 a proti 17/20 docela rozdíl. A to nemluvím o STL nebo (především) magii v boostu.
Autoptr vs unique/shared. Korutiny (a syntaxe pro ne). Move, explicitní this, atd.
C++ je kanon namířený na vlastní nohu bez pojistek. A můj ne úplně malý embedded projekt je v Rustu kratší a čitelnější než byl v C++.
Ale to co sa stalo C++ caka aj Rust, daj tomu par rokov a zacnu sa v nom objavovat "lepsie" sposobi ako nieco robit a zacne byt preplacany divnymi featurami.
Možná. Ale jak bývalo c++ docela konzervativní, tak poslední dobou se celkem utrhlo ze řetězu a děla velké změny. A už jim nezbývají písmenka na ty nové operátory, takže to vypadá hrozně a za chvíli z toho bude Perl.
Rust taky dělá změny, ale zatím jsou docela střídmé a pomalé (někdy až moc).
Rust má filozofii safety-first.
C++ má filozofii safety-optional.
I kdyby se z Rustu stal stejný bastard jako z C++, tak už jen toto ho prostě podrží.
> A tuší někdo, co to memory safety v pojetí Rustu přesně je a jaké má všechny důsledky?
To ti řeknu naprosto přesně.
Rustař dostane zadání, zkontroluje všechny panic a řekne, že na 99% to nespadne. (A já jako zadavetel se 70% jistotou dokážu pracovat.)
C++ dostane zadání, dá tomu enormní množství úsilí (většinou to nebejvají žádní blbci), prožene to hromadou toolů, které mají zkontrolovat všechno možný i nemožný, ale když se zeptám, zda mi zaručí, že to u klienta spadne, jen hořce pokrčí rameny.
Supeeer. Panbuh s nama a Rust pryc.
Zrovna onehda sem narazil na docker kontejner, jehoz soucasti byl i meega script "easy-rsa".
Vsechno fungovalo, dokud nebylo potreba udelat renew certifikatu, pak nastalo peklo a hledani chyby v tom nekolikaset radkovem easy-script-pekle.
Easy-rsa pocita s behem na linux, na BSD, dokonce i na Windows. S cim nepocita, ze v linuxu bude prikaz "date" nahrazeny symlinkem na busybox verzi. Ta je samozrejme kompatabilni, jen ne na 100%.
Tak se teda tesim na ten Rust a nefunkcnost hromady stavajicich scriptu. Idealne pak ladit ty preinstall a postinstall, nebo scripty pro upgrade (treba pri upgrade verze mariadb), to si deti povzdechnou, kde ten fotr je, kde se zas zasekl :-)
Nemyslím si, že to bude tak hrozné.
- ty projekty z uutils se poměrně intenzivně snaží, aby byly z hlediska funkcí a parametrů byly pokud možno plně kompatibilní s původními verzemi. U Busyboxu nebo Toyboxu je to něco jiného, tam jde o co nejmenší single-call binárku, a základní funkcionalitu v embedded zařízeních, i na úkor toho, že zdaleka nepokryjí všechno.
- sudo-rs a ntpd-rs, které Ubuntu v nových verzích používá také, jsou jiné projekty.. a rovnou deklarují, že se to může funkčně rozcházet (viz ten zmíněný Ansible). Ale to zas není nic nového, nebo úplně specifického. doas nebo openntpd také úmyslně nemá všechny funkce a stejné parametry jako původní projekty.
- Rust, okolo kterého se tady vždycky strhne vášnivá debata, může být valné většině lidí úplně jedno, pokud do těch projektů nepřispívají nebo si z toho nesestavují své balíčky, neřeší toolchain atd.
Prostě si jedna větší distribuce rozhodla, že nahradí nějaké komponenty.. pokud to bude fungovat správně a bude to kompatibilní, což je u uutils deklarovaným cílem, je to fuk. Pokud ne, člověk to musí stejně nějak prvotně vyřešit, obejít, vrátit původní GNU variantu příp. nahlásit chybu. Ale tohle by to úplně stejné nezávisle na použitém jazyce.
Jinak tyhle věci s kompatibilitou skriptů a nástrojů okolo se řeší od nepaměti.. různé verze shellů a neportablních skriptů, BSD vs GNU nástroje.. i dnes stačí, že někdo používá třeba nové konstrukce v Bashi a pak to třeba nechodí na macOSu, kde je asi 15 let stará verze, co je poslední GPL-2.
Stran toho OpenVPN easy-rsa, to bylo vždycky trochu peklo. Je tam strašně větvení podle platformy a s Busyboxem už to teď počítá (ten jeho date totiž umí přes -/+ offsetovat jen sekundy, ne dny, hodiny). Vždycky, když jsem to někde viděl, včetně Windows verze, kde to má bundlovaný svůj build shellu a coreutils.. tak jsem si říkal, že s těmi všemi plaformami, už to měli dávno předělat z shellu třeba do Pythonu.
Každý jazyk potřebuje nějaký prostor, kde se má předvést. Protože na papíře to všechno vypadá dobře, ale realita je realita.
Začalo se v malém. To se zdá, že se osvědčilo.
Tak se přidávají další a další výzvy.
Přepsat celé coreutils mi přijde jako dost slušný skok.
A mě jako fandy do Rustu přirozeně zajímá, kde se škobrtalo.
Samozrejme, ze prinesou.
Jednem pocit moralni nadrazenosti, protoze oni jsou prece ti lepsi.
Druhym spoustu zbytecnych problemu a propaleneho casu do reseni veci, ktere fungovali, a timto byli rozbity.
umožňuje to mj. i změnu licence. Pokud by to byl přepis z C do C pod jinou licencí, tak to samozřejmě zavání právničinou, ale přepis do jiného jazyka (i když třeba 1:1), to už zní líp ... :/
a asi prave o tu zmenu licencie ide v prvom rade :)
a hlavne lahsie namotas niekoho na prepis do ineho "lepsieho" jazyka ako prepis do toho isteho tam by sa uz viaceri pytali, ze aky to ma zmysel :)
a s tou pravnicinou to moze zavanat aj pri prepise do ineho jazyka ak by sa ukazalo, ze ten prepis je vlastne do velkej miery "preklad"
lebo zobrat celu funkciu a len ju syntakticky prepisat v ruste a pritom zmenit licenciu by asi nebolo pravne uplne ciste
Pro někoho evidentně ne. Někdo si evidentně stále myslí, že něco nějak nakódovat = spolehlivý design a bezpečná implementace. O testování se vůbec nebudeme bavit, to je asi pro ty samé lidi příliš silné kafe.
Pěkný flame, ale ti, co brojí proti Rustu tady zatím nepřinesli jediný argument, proč je Rust špatná volba. Našel by se někdo, kdo dokáže pragmaticky shrnout, proč zrovna Rust ne? A když ví, že Rust ne, pak jistě ví, který jazyk ano a proč, takže také prosím i o tyto informace.
Zdvořilá žádost: Pokud nemáte odpovědi na všechny otázky z tohoto postu, neobtěžujte se s odpovědí vůbec. Ušetříte čas sobě i ostatním.
18. 9. 2026, 07:53 editováno autorem komentáře
Tak ono dost lidem vadí i jen to, že se přepisuje něco, co přepisovat není potřeba jen proto, že Rust. (Osobně je mi to úplně jedno když to bude fungovat, já to neplatím, ale takhle nějak je chápu.)
Ja bych to zobecnil, ze vadi ten ideologicky zapal a vnucovani toho, ze rust je "nejlepsi na svete a jedina spravna cesta". Be zohledu na realne vlastnosti a toho, co dava nebo nedava pragmaticky smysl.
@Dushino 18.09.2026 07:49 Otázka není proč Rust, ale proč to vůbec přepisovat, pokud to funguje. Víte kolik tahle změna způsobí zákazníkům výdajů? Pokud dělají na serverech aktualizace, tak se adminům rozpadne spousta skriptů a playbooků, protože ... proč vlastně? Co tím zákazník reálně získá? To jen vygeneruje víc práce pro IT bez jakékoliv reálné hodnoty pro zákazníka. Pokud mají interního ajťáka, bude mít další zbytečnou práci. Pokud mají externí firmu, budou platit víc za víc práce s aktualizací a opravami rozbitých skriptů, ale proč? Protože se nějaká vepřová hlava rozhodla zahodit či ignorovat část staré funkcionality a kašle na zpětnou kompatibilitu? Pokrok má vylepšovat a jít kupředu, ne rozbíjet co funguje a vracet se zpět. Nic proti Rustu, ale proč tak hloupě?
18. 9. 2026, 08:51 editováno autorem komentáře
@lnk 18.09.2026 08:53
Nepřestanou existovat, ale už je s tím zbytečná práce navíc. Zbytečně vyhozený čas interního IT a zbytečně vyhozené peníze za externí IT.
Hele a všimnul sis, že GNU Core Utils nebyly první a jediné a že v OSS světě se úplně normálně dělají alternativy (a každá volba má náklady). Holt lidi pořád něco "zbytečně" vylepšují a přitom naše prababička měla suchou latrínu a jak byla čiperná!
Ano, to je princip evoluce. Pokud je nějaká věc neživotaschopná, nepřežije a pokud je životaschopná, rozšíří se.
> Důležité je si všimnout, že "životaschopná" neznamená automaticky "lepší".
Příroda nemá jiný test, než že se daný produkt vyzkouší. Lepší a horší jsou dost subjektivní kategorie a musí se říct v čem. Přežití je test realitou. Byl Pascal lepší než Algol? Bylo C lepší než Pascal? Jak v čem, ale zjevně byly praktičtější v dané době, v dané situaci.
Vždy si vzpomenu na to, jak si lidé stěžovali, že Betamax byl lepší než VHS a v lecčems byl, ale existovaly dobré důvody, proč prohrál. A dnes to je jedno, překonané jsou obě tyto technologie.
Lepší a horší jsou dost subjektivní kategorie a musí se říct v čem.
Ano. A pro daného člověka v danou chvíli jsou to ty důležité kategorie. Přežití je test úplně jiné metriky - životaschopnosti k konkrétním prostředí. Nevypovídá vůbec nic o kategoriích lepší/horší, protože může záviset na okolnostech pro hodnotitele irelevantních nebo zcela náhodných.
> Ano. A pro daného člověka v danou chvíli jsou to ty důležité kategorie. Přežití je test úplně jiné metriky - životaschopnosti k konkrétním prostředí. Nevypovídá vůbec nic o kategoriích lepší/horší, protože může záviset na okolnostech pro hodnotitele irelevantních nebo zcela náhodných.
Já jsem slovo "lepší" použil ale přesně v tom významu "lepší pro vás, kteří nemáte rádi Rust". C je špatný jazyk, sám ho nechceš používat. Přepis do "moderního" idiomatického C++ naopak možný je a když ho někdo udělá, bude srovnání. Ale nestalo se, pokud vím. Jsem na to zvědav. Nahoďte cabin (nebo jiný ekvivalent carga) a moderní C++ a Rustu to natřete!
"Aby to bylo bezpečnější " - teorie, za určitých okolností iluze, za určitých pravda
"a lépe udržovatelné." - to je taky teorie
V případě přepisu coreutils je základní argument, proč je Rust špatná volba jednoduchý: správná volba je nepřepisovat. Proč Rust ne i na cokoliv jiného by bylo na dlouhé povídání. Věnoval jsem mu docela dost času a je opravdu unikátní. Snad u žádného jiného programovacího jazyka se mi nestalo, že by mi s dalším studiem a pokusy o použití přibývaly pouze argumenty proti. Odpověď, který jazyk místo Rustu je jednoduchá: C++. Pokud kód musí běžet na platformě, kde není dobrý kompilátor C++, tak C. Seznam důvodů by byl opět hodně dlouhý. Asi hlavní je ten, že mají historii, jsou osvědčené v praxi a zároveň se přizpůsobují novým potřebám při zachování kontinuity. Jestli moje tvrzení chcete rozporovat, tak prosím o konkrétní argumenty. Důkaz úporným tvrzením není důkaz, není potřeba stále opakovat, že všichni ví, že C a C++ jsou špatné, Rust je nejlepší a když se řekne "memory safety", není už potřeba nic dalšího dodávat.
Zajímalo by mě, jestli jsi dospěl i k tomu, že nějaký konkrétní jazyk je lepší než C++. Protože tady se to láme. To, že jsi jako dobrou náhradu "tam, kde není dobrý kompilátor C++" navrhnul C, už Tě tak trochu diskvalifikuje z debaty, protože C je trošku lepší assembler a výhody vyšších abstrakcí snad nikdo rozumný nemůže popírat. Leda snad kdyby v roce 1988 upadnul do kómatu a vzbudil se někdy předevčíre,.
Zajímalo by mě, jestli jsi dospěl i k tomu, že nějaký konkrétní jazyk je lepší než C++.
V kategorii kompilovaných univerzálních programovacích jazyků jsem nic lepšího nenašel.
Tě tak trochu diskvalifikuje z debaty, protože C je trošku lepší assembler a výhody vyšších abstrakcí snad nikdo rozumný nemůže popírat.
Tak nějak jsem implicitně předpokládal, že "tam, kde není dobrý kompilátor C++" budou nějaké embedded nebo obskurní/historické platformy, kde bude každý rád aspoň za C, aby nemusel všechno psát v assembleru.
> V kategorii kompilovaných univerzálních programovacích jazyků jsem nic lepšího nenašel.
Pak jsi možná málo hledal. A možná je "lepší" pro Tebe něco jiného než třeba pro mě. To je v pořádku, to je ten konkurenční boj. Třeba C++ přežije a vyvine se v něco, co konečně budu chtít používat i já. Nebo ne a bude vytlačováno dál do pozadí.
> kde bude každý rád aspoň za C, aby nemusel všechno psát v assembleru.
Mně tohle přijde jako strašlivá rezignace. Jasně, je to niche, ale C prostě není dobrý jazyk, to před sebou žádnou reálnou možnost nápravy už nemá. Uznat, že tam holt C je "lepší než nic (ASM)", je OK. Ale divit se, že ho někdo používat nechce a hledá alternativy? To se nediv.
18. 9. 2026, 09:45 editováno autorem komentáře
Pak jsi možná málo hledal.
Máš kandidáty (něco jiného než Rust)?
C prostě není dobrý jazyk, to před sebou žádnou reálnou možnost nápravy už nemá.
Bez konkrétních metrik pro hodnocení je to bezobsažné tvrzení. V závislosti na výběru metrik může a nemusí být pravdivé.
Ale divit se, že ho někdo používat nechce a hledá alternativy?
Tomu se nedivím, já C taky nechci používat, když nemusím a existuje v dané situaci lepší alternativa. Což podle mých měřítek v případě coreutils neexistuje, protože nejlepší volba ne nepřepisovat je.
> Máš kandidáty (něco jiného než Rust)?
Já je mám hledat? Jazyků existuje spousta. Chápu, že nemají často takový ekosystém, aby se daly využít v praxi (tam je rozdíl mezi Rustem či třeba Go a "zbytkem" - že bylo dost sil na to, aby to někdo dotáhnul do stavu masové použitelnosti). Ale zajímá mě, jestli by sis vybral něco, co by mělo třeba lepší syntaxi atd.
> Bez konkrétních metrik pro hodnocení je to bezobsažné tvrzení.
> Tomu se nedivím, já C taky nechci používat, když nemusím
Tohle je konkrétní metrika. Že ani lidé, kteří jsou z tábora "konzerv", často daný jazyk dobrovolně používat nechtějí. C nemá vyšší abstrakce, je plné podivností typu for (;;) a switch a neviděl jsem zatím žádný náznak, že by se to mělo změnit (už si naštěstí nikdo nemyslí, že je normální, aby pointerová aritmetika byla rychlejší než přístup přes index, ale to je konkrétní příklad mentálního stavu, který za C historicky byl).
Že vznikají jazyky typu C3 (který toho mění poměrně málo), jen ukazuje, že i konzervám došla trpělivost a C nemá důvěru, že se z něj stane něco výrazně lepšího.
Já je mám hledat? Jazyků existuje spousta.
Já jsem hledal a nenašel. Ty tvdíš, že jazyků existuje spousta a že jsem možná málo hledal. To ve mně vzbuzuje naději, že víš o nějakém jazyku, který mi při hledání unikl.
podivností typu for (;;)
To je drobnost, kterých se najde spousta asi v každém jazyce.
už si naštěstí nikdo nemyslí, že je normální, aby pointerová aritmetika byla rychlejší než přístup přes index
Proč by to nemělo být normální? Aby bylo indexování stejně rychlé, je potřeba dostatečně chytrý procesor nebo optimalizující kompilátor. Navíc algoritmy zapsané pomocí pointerové aritmetiky se často lépe zobecňují v generickém kódu než indexování. Proto taky existují iterátory.
konzervám došla trpělivost a C nemá důvěru
Z toho, že si jen někdo chce zkusit navrhnout vlastní jazyk, bych nedělal závěry o tom, že C je beznadějně ztracené.
> Aby bylo indexování stejně rychlé, je potřeba dostatečně chytrý procesor nebo optimalizující kompilátor.
Ano a o tomhle se bavíme. Že C je myšlenkový produkt zcela jiné doby. Rust a C++ dělají spoustu optimalizací, které se v C realizovat moc nedají (zero-overhead abstractions, kde indexování pole je asi nejprimitivnější příklad).
> Z toho, že si jen někdo chce zkusit navrhnout vlastní jazyk, bych nedělal závěry o tom, že C je beznadějně ztracené.
To je jen jeden střípek z mozaiky. Nejpozději v době objevení se C++ a Objective-C bylo jasné, že C je pro větší projekty nepříliš vhodné. A "zběsilé" tempo vylepšování s každým dalším standardem to jenom potvrzuje.
Zbytek nekomentuju, nemá to valného smyslu.
Jestli moje tvrzení chcete rozporovat, tak prosím o konkrétní argumenty.
To jste nepochopil princip diskutování. Když předkládáte nějaké tvrzení, je na vás, abyste ho doložil argumenty. Ne na oponentech, aby ho vyvrátili.
Nemáš pravdu, on to osobně zkoušel a udělal se mu názor, takže ho musíme přesvědčit my:
Proč Rust ne i na cokoliv jiného by bylo na dlouhé povídání. Věnoval jsem mu docela dost času a je opravdu unikátní. Snad u žádného jiného programovacího jazyka se mi nestalo, že by mi s dalším studiem a pokusy o použití přibývaly pouze argumenty proti.
Jenže to je stále vágní - žádný konkrétní argument. Už jen fakt, že není schopen napsat nějaké vybrané dva - tři konkrétní argumenty je podezřelý a shazuje celé tvrzení. Tím se nesnažím popřít, že Rust je pro daného člověka zlo. Snažím se říct, že bez argumentů je to něco jako konspirační teorie.
Jen pár bodů, co se mi na Rustu nelíbí: Borrow checker, který odmítá korektní kód, protože jeho správnost ve svém axiomatickém systému neumí dokázat. Sémantika safe/unsafe. S tím související množství knihovního kódu, který existuje jen proto, aby se to celé dalo aspoň trochu používat a daly se dělat věci, které jsou v jiných jazycích triviální. Explicitní rozlišování hodnot a referencí v argumentech funkcí. Podivnosti typu phantom data. Celý systém maker. Nedostatečné vyjadřovací schopnosti nástrojů pro generické programování. Implementace dynamic dispatch. Nic moc nástroje pro psaní dokumentace (rustdoc). Propojení jazyka, build systému a package manageru (cargo).
No tak Rust se vydal cestou předvídatelného kódu, což má nějaké náklady, ale spoustu věcí to řeší, třeba při paralelizaci atd. Nelze mu vyčítat, že konkrétní rozhodnutí má konkrétní náklady, protože nic neřešit je vždy pohodlné a "bezpečné".
> Propojení jazyka, build systému a package manageru (cargo).
To není propojení, to je konkrétní řešení. Pořád můžeš používat rustc s nějakým jiným systémem, ale prakticky nikdo to (pochopitelně) nechce.
> Nic moc nástroje pro psaní dokumentace (rustdoc)
Jako fakt? Ve srovnání s čím? Nikde jsem neviděl tak skvěle zdokumentovaný kód všech knihoven (i s prokliky do zdrojáku) jako u Rustu.
> Explicitní rozlišování hodnot a referencí v argumentech funkcí.
V C++ se nerozlišuje mezi hodnotou a referencí?
> Celý systém maker
Ve srovnání s čím?
18. 9. 2026, 11:49 editováno autorem komentáře
protože nic neřešit je vždy pohodlné a "bezpečné"
Neříkám neřešit nic, ale řešit jinak (např. statická analýza, testy + runtime sanitizers).
> Nic moc nástroje pro psaní dokumentace (rustdoc)
Jako fakt? Ve srovnání s čím?
Doxygen
> Explicitní rozlišování hodnot a referencí v argumentech funkcí.
V C++ se nerozlišuje mezi hodnotou a referencí?
Rozlišuje. Ale při volání funkce nemusím explicitně rozlišovat, jestli do funkce posílám hodnotu nebo referenci. A to jsem ještě zapomněl nutnost v definici funkce vypisovat typy všech parametrů a návratové hodnoty.
> Celý systém maker
Ve srovnání s čím?
C++ templates, constexpr, consteval
Statickou analýzu Rust dělá. Při kompilaci.
Ale vy spíš myslíte dobrovolnou statickou analýzu nad výsledkem. S tím došla průmyslu trpělivost, spousta projektů ji nedělala a paměťové chyby jsou dnes už nepřijatelné bezpečnostní, reputační a finanční riziko.
Potom Vám vadí už samotný záměr jazyka označit pointery za unsafe a nedovolit kód, který se nedá prokázat. Jo, to komplikuje věci.
Ale pokud to chcete, můžete právě použít unsafe. Které slouží k označení kódu, kde za správnost ručí programátor. (A jen pro jistotu: Ano vím, že je to složitější, protože aliasing pravidla)
Překvapivě (nebo spíš ani ne) unsafe bloky lidem vadí a snaží se je minimalizovat ve prospěch těch "formálně správných" safe algoritmů.
Jiným směrem se vydal třeba Zig. Zachoval pointery, ale omezil dopad chyb pomocí arena alokátorů. Což řeší ergonomii vývojáře, ale některé problémy to chytit neumí a nemůže.
Runtime kontroly jsou i v Rustu, ale z mého pohledu jsou akorát k zlosti. Program by prostě neměl u zákazníka padat, ideální je, když tam ta chyba přístupu nebo souběhu vůbec být nemůže (resp alespoň je omezena četnost na minimum).
A valgrind je něco, co sice pomůže, ale je to časově náročné, vyžaduje to fakt důkladné testy (které se v Rustu píšou taky výrazně snáz a jednotněji než v C++) atd.
Mimochodem, nevím jak jste přišel na to, že musíte v Rustu při volání rozlišovat jestli posíláte hodnotu nebo referenci. To totiž není pravda. Jediný takový běžný případ je explicitní označení reference jako mutable, což je záměr, aby si toho programátor všiml.
Mimochodem, nevím jak jste přišel na to, že musíte v Rustu při volání rozlišovat jestli posíláte hodnotu nebo referenci.
fn main() {
let i: i32 = 123;
f(i)
}
fn f(a: &i32) {
println!("a={}", a);
}
Když tohle zkusím na play.rust-lang.org, tak chce, abych místo f(i) napsal f(&i).
A tohle snad v C nebo C++ projde? Ano, posílání skaláru do parametru, který očekává pointer/referenci samozřejmě vyžaduje pointer/referenci.
https://www.programiz.com/online-compiler/7dIOV8cx0h8W0
/tmp/IKQvEsbShs/main.cpp: In function 'int main()':
/tmp/IKQvEsbShs/main.cpp:13:10: error: invalid conversion from 'int' to 'int*' [-fpermissive]
13 | test(v);
| ^
| |
| int
/tmp/IKQvEsbShs/main.cpp:4:16: note: initializing argument 1 of 'void test(int*)'
4 | void test(int *val) {
| ~~~~~^~~
U reference to v C++ projde. Ale to už je pak design rozhodnutí jazyka, který chce, aby uživatel některé věci "odsouhlasil".
Ano, to jsem zkoušel a projde to. I když tohle je zrovna ta mutable varianta. Ekvivalentní tomu Rustu by asi bylo
const int& val
.
A tady je pak hlavní rozdíl v tom, jestli to bude teoreticky dělat kopii nebo ne, ale oba jazyky to stejně pravděpodobně vyoptimalizují pryč. V -O0 to oproti skaláru malý rozdíl bude.
> Neříkám neřešit nic, ale řešit jinak (např. statická analýza, testy + runtime sanitizers).
Tohle všechno bylo před Rustem. Zjevně byl důvod zvolit něco jiného (runtime kontrola jako alternativa compile-time kontroly, jako fakt?)
> Doxygen
Tohle mi přijde jako typické "já jsem zvyklý na tohle". Rustdoc se většinou bere jako výhoda a ne naopak, ale jistě se dá mnoho zlepšovat.
> Ale při volání funkce nemusím explicitně rozlišovat, jestli do funkce posílám hodnotu nebo referenci.
Tohle má nějaké výhody. Byť třeba i minimální.
> A to jsem ještě zapomněl nutnost v definici funkce vypisovat typy všech parametrů a návratové hodnoty.
Tohle je IMO úplně správně.
> C++ templates, constexpr, consteval
Opět - výhody a nevýhody. Za mě jsou makra v lecčems lepší koncept, navíc se tady asi plete role traits + bounds, const fn a maker.
Tohle všechno bylo před Rustem.
Ale mezitím se to taky zlepšilo.
runtime kontrola jako alternativa compile-time kontroly, jako fakt?
Runtime kontrola tam, kde to v compile-time nejde. I Rust je runtime kontrol plný.
Tohle mi přijde jako typické "já jsem zvyklý na tohle".
Když ta nová alternativa nemá půlku featur...
Tohle má nějaké výhody. Byť třeba i minimální.
A taky nevýhody.
Tohle je IMO úplně správně.
Tak rozumný jazyk si typy často dokáže odvodit. C++ to zvládá docela dobře, Haskell je v tom fakt dobrý.
Za mě jsou makra v lecčems lepší koncept
Když jsem si s makry v Rustu hrál, tak jsem měl asi poprvé v životě pocit, že templaty v C++ jsou na používání fakt příjemné :-)
Jen pár bodů, co se mi na Rustu nelíbí
Když to shrnu, vadí vám, že jazyk kontroluje některé věci, ve kterých se často dělají chyby.
To ale není chyba Rustu. To je záměr všech jazyků nad assemblerem. Že vám takové jazyky nevyhovují, to je možné. Ale není to jejich chyba. A neznamená to, že když ty jazyky používá někdo jiný, že je to špatně.
Když to shrnu, vadí vám, že jazyk kontroluje některé věci, ve kterých se často dělají chyby.
To jste shrnul jen asi první dva body a ještě mi podsouváte, co jsem nenapsal. Mně nevadí, že jazyk něco kontroluje. Mně vadí, že pro řešení jednoho principiálně neřešitelného úkolu mi nutí jednu aproximaci a nenechá mě vybrat.
Buďte rád, že nepoužíváte Eiffel nebo ADA. Design by contract. Kontroly (některých) vstupních a výstupních podmínek kompilátorem, atd.
https://en.wikibooks.org/wiki/Ada_Programming/Contract_Based_Programming
Rust Vás nechá vybrat. Od toho je právě to kouzelné slovo unsafe. Které by ovšem mělo spíš vypadat "za_tohle_ručím_já", jen by se to blbě psalo. A pak máte clippy a miri, které umí dělat externí analýzu a kontrolu.
Buďte rád, že nepoužíváte Eiffel nebo ADA. Design by contract.
C++: assert, static_assert, C++26 contracts: pre, pos, contract_assert. GCC 16 už to umí.
kouzelné slovo unsafe
Které znamená něco jako: "Kvůli tomuto jednomu unsafe řádku zkontroluj minimálně celý modul, případně všechny nadřazené moduly, pokud do nich potenciální problém může probublat."
clippy a miri
Já bych čekal, že v Rustu takové nástroje nebudou potřeba, nebo se budou volat povinně automaticky z kompilátoru nebo cargo.
To jste shrnul jen asi první dva body a ještě mi podsouváte, co jsem nenapsal.
Spíš první čtyři.
Mně vadí, že pro řešení jednoho principiálně neřešitelného úkolu mi nutí jednu aproximaci a nenechá mě vybrat.
Jenže on ten principiálně neřešitelný úkol má mnoho pro praxi dostatečných řešení. Jiné jazyky problém paměťové bezpečnosti řeší automatickou správou paměti, třeba s GC. Je to omezení? Je. Je v pořádku, že ty jazyky existují, že se používají, a předešlo to spoustě problémů? Ano. Nutí vás někdo ty jazyky používat? Nenutí. Tak v čem je problém? Vy si budete řešit pár svých úloh, kde vám automatická správa paměti nebo borrow checker překáží. A všichni ostatní budou programovat v jazycích, které paměťovou bezpečnost nějak ošetřují, protože to předejde významnému množství chyb a urychluje to vývoj.
Navíc Rust vás nechá si vybrat. Na rozdíl od Pythonu, JavaScriptu nebo Javy.
Jiné jazyky problém paměťové bezpečnosti řeší automatickou správou paměti, třeba s GC.
Jenže tyhle jazyky se netváří, že jsou lepší náhrada za C a C++.
Ale tváří. Java vznikla, aby nahradila C a C++. Go určitě také mělo částečně nahradit C a C++, částečně možná Python a některé další jazyky. I Python měl v menší části nahradit C, možná i C++.
Přičemž „nahradit“ v tomto případě neznamená, že by bylo cílem, aby C a C++ úplně zaniklo. Ale příslušný jazyk měl za cíl převzít některé typy aplikací dříve psané v C a C++.
A úplně stejně je na tom Rust. Cílem Rustu není vymýtit C a C++ z povrchu zemského. Cílem je některé typy aplikací psát v Rustu místo C nebo C++.
Myslel jsem nahradit ve smyslu úplně nahradit. Tedy aby se cokoliv, co by se dřív psalo v C nebo v C++, nyní psalo lépe v novém jazyce.
> proč Rust ne i na cokoliv jiného by bylo na dlouhé povídání. Věnoval jsem mu docela dost času a je opravdu unikátní. Snad u žádného jiného programovacího jazyka se mi nestalo, že by mi s dalším studiem a pokusy o použití přibývaly pouze argumenty proti. Odpověď, který jazyk místo Rustu je jednoduchá: C++.
Já jsem si vždycky myslel, že C/C++ bude ještě dlouho kralovat u microkontrolerů a podobné nízkoúrovňové havěti. No, a pak jsem narazil na Tock OS, a musel jsem svůj předpoklad přehodnotit. Rust dokázal monolitické jádro OS dostat na úplně jiný level.
Rust mi přijde jako zajímavá volba, i kdyz o specifické syntaxi a způsobu buildění by se dalo diskutovat, nejvíc mě překvapuje cíl: vzít nějaký software a dat si za cíl reimplementovat ho v jiném jazyce. Přijde mi to pošetilé. To je celé.
fanusik konspiracnych teorii by povedal, ze pri prepise open source programov mozno nejde vobec o lepsiu bezpecnost, o lepsiu udrziavatelnost, o nutnost prepisu z dovodu chybajucich programatorov v tom starom jazyku, ale o to, ze si niekto prepisom programov pod gpl licenciou na ich kopie pod bsd/mit licenciami pripravuje podu na to aby dalsi vyvoj tychto programov mohol neskor vo vhodnom case uzavriet
no a aby ho to nestalo cely majetok(ktory sa uz zmensuje) tak na to vyuziva tu vyhajpovanu atmosferu okolo rustu :)
je jasne, ze skoro nikto by nezacal vo velkom prepisovat plne funkcne a bezpecne programy v c/c++ do c/c++ len aby zmenil licenciu na taku aby sa gpl programy zrazu dali uzavriet. no ale ked sa na to vyuzije to nadsenie okolo rustu tak zrazu je to uz o niecom inom a popri tom nadseni okolo rustu niekto ich vmanevruje do toho, ze podme to prepisat pod pre komercne spolocnosti priaznivejsiu licenciu :)
ale toto by povedal fanusik konspiracnych teorii a mozno to je inak, ale keby sa niekto o to snazil tak by ta snaha nevypadala inac :) :)
preco vlastne rustaci maju obsesiu v prepisovani plne funkcnych a bezpecnych programov do rustu a este k tomu aj vo velkom pouzivaju inu licenciu ako ten povodny program.
preco nevytvaraju programy ktore v open source chybaju? nemaju napady a preto len kopiruju?
uz len pockat kedy niekto oznami zaciatok prepisu linuxu do rustu a samozrejme pod bsd/mit licenciou :)
Tahle teorie trochu kulhá. Chápu její logiku, ale to už je jednodušší vzít existující alternativy z BSD systémů nebo rovnou na nějaké *BSD přejít. Což je mimochodem dobrý způsob, jak zjistit, že svět není jen GNU/Linux.
A taky je to dobrý argument pro přijetí alternativních implementací coreutils. Protože pokud někdo závisí na přesném chování GNU coreutils, tak jakákoliv odchylka (busybox, posixové Mac OS nástroje, ...) mu jeho skripty rozbije.
Tohle je jiné - začít přepisovat GNU tooly a knihovny v jiném jazyce pod MIT licencí může fakt být začátek ďábelského plánu. Pak už nebude GNU/Linux ale Ubuntu/Linux.
Tohle bude chtít hodně popcornu.
Má to tři drobné vady:
1. vies dokazat? tvrdenie zakladatelov nieje dokaz, ludia zvyknu aj klamat ak si to doteraz nevedel :)
2. naraz nie, ale postupne :)
3.to je pravda, ale ked velke firmy zacnu pouzivat tie nove implementacie tak sa zmensi pocet ludi na udrzbu tych povodnych
> preco vlastne rustaci maju obsesiu v prepisovani plne funkcnych a bezpecnych programov
Hm, tady někdo zjevně nečetl Murphyho zákony.
> preco nevytvaraju programy ktore v open source chybaju? nemaju napady a preto len kopiruju?
Lebo to vies zadat AI
Z dobrého důvodu. Komunita se rozhodla, že chybové hlášky musí být čitelné, názorné a ukázat možnosti řešení. Což těm agentům (a lidem) opravdu hodně pomáhá.
Na druhé straně bývalo C++, kde musel vzniknout speciální preprocesor pro překlad STL chyb (s extrémním rozvojem zanořených šablon) do lidštiny.
V tomhle duchu, by se mily pane, dalo ptat Vas na to same. Vzdyt to je na cele knihy textu, co uz jste tady vsechno mily pane popsal. Akorat, ze to ani za ten papir nestoji, co :-D
Co jste kdy nejak pozitivne ovlivnil celym timhle svym pusobenim? Opakuji, pozitivne. Negativa jsou vcelku jasna a jsou uplne jasne videt, kdyz uz jsou tady vsichni ostatni tak vyskoleni, ze preventivne odsekavaji, ze s Vami zrovna ""diskutovat"" (jak tomu rikate a ja to v tom nikdy nevidel) o tematu nehodlaji. Tomu rikam kvalitni prace, to stoji za to.
Absolutne nijak nemeni vubec nic na tom, co jsem napsal. I kdyz ji prectu jeste dvacetkrat. Naopak jste dal dalsi ukazku, jak je to Vase pusobeni zbytecne, az toxicke.
borisj se přiznal, že ví, že píše konspirační teorii. Proč ji sem tedy vkládá? Já žádné konspirační teorie nikam nepíšu, natož vědomě.
Naopak jste dal dalsi ukazku, jak je to Vase pusobeni zbytecne, az toxicke.
Otázka je, zda tohle neplatí spíš pro vaše komentáře.
"borisj se přiznal, že ví, že píše konspirační teorii."
a teraz co? konspiracna teoria je teoriou kym sa nepotvrdi, potom to uz nieje konspiracna teoria ale pravda a nie raz sa to stalo, stava a bude stavat :)
ja viem, ty si fanusik oficialnych sprav co povedia autority, co autorita povie, to je pravda a nijak inak :)
Mne se nestava, ze by si lidi otevreli diskuzi na Root.cz, placli se do cela, ze a jeje, zase Snajdr, tak to jdu delat neco uzitecnejsiho... O jmenu Jirsak toto ale slysim na libovolnem komunitnim srazu _vzdycky_.
Ale to skrz prave demonstrovanou neschopnost sebereflexe nemate, jak pochopit. Kde byste mel zapnout mozek, radsi pridate na manipulativnich vyjadrenich. Dal to tedy rozebirat nema smysl. Pro mne finalni potvrzeni, ze rozklikavat diskuze nema cenu, nejsem zvedavy na neuzitecnou Jirsakovo potrebu ke vsemu spamovat. Doslova spamovat. To, co tu roky predvadite, za mne neni nic jineho.
Ucet muzu tedy smazat, na nic ho nebudu potrebovat, tady se ucastnit diskuzi nema smysl.
Needless to say, na Snajdra nikdo neměl potřebu udělat a zveřejnit Greasemonkey script, který polovina místního osazenstva úspěšně používá, a který má k dokonalosti jedinou malou chybu, že nesnižuje počet nových příspěvků, takže se člověk prvně musí prokliknout než zjistí, že zase nic rozumného.