Jako tyhle podmínky https://lwn.net/Articles/797828/
Že to má něco přinést a ve výchozím stavu vypnuté?
To přijde, jakmile lidi pochopí, že C fakt není žádná výhra: https://kornel.ski/rust-c-speed
Všichni vědí, že C není výhra. Ale je to extrémně jednoduchý jazyk, který se lze snadno naučit (na rozdíl od Rustu). A umí ho (na různé úrovní) stovky tisíc vývojářů. V Céčku se dobře píší jednoduché utility. Navíc ten jazyk Vám nedovolí moc se utrhnout od reality. Určitě je to nechtěný záměr, nicméně v Cčku se komplexní věci dělají špatně, tudíž vás to nutí dělat jednoduché věci a dělat věci jednoduše. V Cčku je dobře vidět, jestli je kód bastl nebo je tam nějaký záměr, koncept.
Je to ale dostatečně silný jazyk, aby se v tom daly psát i komplexní aplikace jako je třeba Postgres, a jazyk sám nebyl brzdou vývoje. U nových projektů bych šel do Go nebo možná do Rustu (i když třeba mne Rust neoslovuje), ale u starších projektů, kde už je vyřešena multiplatformost, tak tam není důvod odcházet od Cčka.
Souhlas,, že kernel je již starý projekt se spoustou věcí vyřešených. Na druhou stranu se předpokládá, že bude žít ještě hodně dlouho a nový kód bude přibývat (zatím stále rychleji). Snaha o jeho vysokou spolehlivost a bezpečnost mi přijde užitečná. A fakt je, že tyto dvě vlastnosti většina přispěvatelů neumí (včetně mě), s výjimkou těch nejzkušenějších.
S prvním odstavcem lze celkem souhlasit (zcela obecně), ale:
1. Fakt chceme, aby aplikace, kterým svěřujeme chod firmy, peníze a někdy i zdraví nebo život psali lidi, kteří se nedokážou naučit Rust? To není až takový úžasný mentální výkon.
2. Dělat jednoduše lze jednoduché aplikace. Jelikož s jazykem, který má menší možnosti abstrakce, narůstá problém uchopitelnosti výsledné aplikace, včetně bezpečnostních aspektů. A jazyk typu C svojí "jednoduchostí" tomu všemu hází pod nohy spíš klacky.
3. V C je určitě vidět, jestli to někdy psal pořádně, ale i "slušně" psaný program bývá plný #ifdefů a goto.
4. Rust (a další jazyky typu C++) tu realitu také pořád ukazuje a dovolí být blízko železu a vědět dost přesně, co se děje.
Ad bod 1)
Z meho oboru - fakt chceme, aby elektroniku navrhovali lidi, co si ubastli neco z Arduina, ale hlubsim principum fungovani soucastek nerozumi?
Po 20 letech zkusenosti v C, nemam zajem se ucit nejaky trendy jazyk z duvodu, ze to ma byt propustka a dukaz mych schopnosti - kdyz ten jazyk nepujde pouzit na tom, kde vsude pouzivam C. Nepotrebuji taky jinej jazyk k tomu, abych si napsal vicevlaknovou aplikaci. Nepotrebuji jazyk, ktery ma kompilator jenom pro x86. Atd.
2) C dela presne to, co tam napiste. Na zbytek mate prece knihovny a makra.
3) ifdefy jsou bud vyvojovy pozustatek (#if 0), slouzi k ladeni ktere se da odstranit (#if DEBUG), pripadne slouzi k portaci pomoci ruznych knihoven, protoze v C, muzete vsechno a vsude - a kdyz je treba pokryt nejakou specialitku protoze to ma jemne odlisne API, tak holt tam prijdou #ifdefy. Naproti tomu RUST ma seznam hodne platforem, ktere se snazi pokryvat - je tohle fakt lepsi nez par ifdefu? Kdyz tam vase platforma neni, mate smolika.
https://doc.rust-lang.org/nightly/rustc/platform-support.html
4) jste asi nevidel poradny C++ kod, napr. templatova onanie je blizko zelezu? Pri pohledu na takovej kod, si nemuzete byt jisty ani co je typ, promenna ci funkce :-)
Tohle jsem slyšel už před 25 lety. Jak to teda že dnes neběží kernel běžného operačního systému třeba na Javě? (dobové články nadšenců psaly o pár stovkách řádků pro HAL aspol. a zbytek v něčem "moderním").
Zatím pohledem z venku je málo vidět víc než pár nasazení na backendech, kde to dává plný smysl ale moc se o tom bohužel nemluví (Dropbox, Discord), pak několik nadšeneckých aktivit na téma https://www.root.cz/zpravicky/nahrada-ls-v-rustu-exa/ ála náhrada, sice to pár switchů nepodporuje ale je to v Rustu, gloria! No a pár výkřiků jak je všecho zastaralé a jak je zářivá budoucnost a hlavně všechno přepsat, což se nezlobte bez konkrétních výsledků mě moc nepřesvědčuje. Dobrá, bylo by dobré zmínit Quantum, ale tam přístup Mozilly která se Rustu zbavila dává jen velmi rozporuplné pocity.
Ani https://www.rust-lang.org/production moc nepřesvědčí (i když npm pobavil) o masivnějším nasazení.
A pak klasická otázka: Proč vidíte budoucnost v aluminiu, chci říci zrovna Rustu a ne třeba Go, C++, D, ...? Nebo do masovnějšího rozšíření nepřijde něco novějšího, blýskavějšího a všechny mladé to přetáhne tam? A pokud ne, nestane se to co se spoustou tzv. moderních jazyků v podobě zpětně nekompatibilních změn, což je dneska dost moderní?
Opravdu jsem zvědav jak /rust v kernelu přesvědčí, ale v našem věku bych už čekal trochu zdravého skepticismu.
1. Je mi jedno, jestli budoucností bude Rust nebo jiný jazyk. Budoucnost je v kvalitním typovém systému, v zachycení chyb v době překladu, v zero cost abstrakcích, v rozumné správě závislostí (moduly, balíky, repozitáře). To jsou věci, které C nemá, C++ je má do určité míry a kazí mu to hlavně ta podmnožina, kterou sdílí s C. Rust je nástupce C++ v tom smyslu, že se snaží dělat dobře, co v C++ je dobře a nepřejímá věci, které v C++ jsou spíše zastaralé.
2. Go má jinou cílovou skupinu a jiné silné stránky než Rust. To samé lze říci o Pythonu nebo třeba JS. Pokud chce někdo psát vše v Javě, já mu to vymlouvat nebudu, ale už teď (na desktopu) mám podstatně víc utilit v Rustu, než v Javě, takže bych řekl, že už to nedoženou. D svůj potenciál, pokud ho mělo, promrhalo.
3. Těch aplikací Rustu je hodně a pokud Tebe nepřesvědčil ten (jistě neúplný) seznam, co se dá dělat. Předpokládám, že ten příklad s Mozillou docela chápeš, přepsat tak velký produkt kompletně do nového jazyka je po mnoha stránkách skoro mission impossible. Ano, bylo by to PR jako kráva, holt se zatím spokojíme s tím, že se Rustem vážně zabývají Microsoft, Facebook, Apple, IBM, Amazon, Huawei a Google. Někde se začít musí.
21. 3. 2021, 17:21 editováno autorem komentáře
Ad 1)
Jako specialista n C++ a člověk co se pokusil proniknout do Rust jen musím odmítnout to, že Rust je nástupce C++.
Rust je nástupce C, alternativou k C++.
Některé věci ukazují, že autoři Rustu vysloveně nesnáší C++ a dělají spoustu věcí na truc jinak. A postupně přijdou na to, že to v tom C++ přeci jen mělo nějakou logiku
Jeden příklad za všechny: "Rust nemá ty strašlivé výjimky - hmm... co takhle přidat nějaký operátor, který víceméně dělá to samé co výjimky? ? ?"
Takže asi tak
@Ink
Taky jsem se věcně ozval. Nesouhlasím s tím, že přechod na Rust blokuje nedostatečná mentální kapacita se Rust naučit. Což jsou přesně evangelistické řeči. Jinak je mi to ukradené, nejsem tak mocný abych to rozhodl nebo vydal poslední soud, na to jsou tady jiní experti. V zájmu diskuze, HOWGH.
21. 3. 2021, 23:20 editováno autorem komentáře
@Poleno Pořád chápeš věci jinak, než jsem je myslel a snad i napsal, ale uznávám, že chyba může být na obou stranách, takže zde moje poslední vyjádření k naší vzájemné debatě:
1. Rust hájím, ale ne proto, abych za každou cenu zvedal počet jeho uživatelů. Jde mi o větší poznání (moje i jiných) a tomu má debata napomoci.
2. Jasně, že přechod blokuje (i) větší vstupní překážka při jeho studiu. To se dá jasně prokázat, nesouhlasit s tím jistě můžeš, ale tohle není věc názoru. Netvrdím, že ten, kdo se Rust nechce učit, je nutně hlupák nebo něco podobného.
Pokud chceš naopak říci, že větší mentální náročnost Rustu není hlavní překážkou, to připouštím. Něco dělá setrvačnost a je samozřejmé, že (jako všechno) má i tenhle jazyk zjevné nevýhody a s těmi je třeba počítat.
Měj se.
@Ink
Je mi líto, možná jste chtěl napsat něco jiného, já vidím jenom to, co jste napsal (a vypadá to, že jsem to nepochopil stejně jenom já ...). Pro připomenutí ...
Fakt chceme, aby aplikace, kterým svěřujeme chod firmy, peníze a někdy i zdraví nebo život psali lidi, kteří se nedokážou naučit Rust? To není až takový úžasný mentální výkon.
Pak nechápu, proč tam hanlivě píšete něco o nějaký úžasných mentálních výkonech, když máte na mysli nějako vstupní překážku při studiu jazyka ...
Je normální, že se lidi nechápou. Já jsem ale tohle konkrétně vysvětlil myslím dostatečně. Je třeba číst celé vlákno v kontextu - P. Stěhule napsal, že výhodou C oproti (třeba) Rustu je jeho poměrná jednoduchost. Já jsem napsal, že to nemusí být vždy výhoda, na čemž trvám.
Domnívám se dále, že studium a pochopení jazyků jako je třeba Rust pomůže lidem zorientovat se lépe v dané problematice a více přemýšlet o struktuře a architektuře aplikací. C nic takového samo o sobě nenabízí - to je jednoduchý imperativní jazyk, který dovoluje všechna data nacpat do jednoho paměťového bloku, na který ukazuje globální proměnná typu void * a všechnu logiku naprogramovat v jedné funkci prošpikované příkazy goto. A pokud má dotyčný štěstí, bude to nějak taky fungovat. Jasně, že takhle extrémně to nikdo nedělá, ale doufám, že si rozumíme, kam směřuju. Něco podobného se často děje i v dynamických jazycích, které mají taktéž nízkou vstupní laťku.
Pokud naznačujete, že v céčku si musí člověk kulturu vybudovat sám (byť na základě nepřeberného množství doporučení a best practices, pořád Vás k tomu nic nenutí) zatímco jazyky jako Rust ho k tomu donutí (borrowing etc), tak asi nebudeme ve sporu.
Taky plný souhlas s tím, že poznat koncepty jiných jazyků rozšíří obzory, a dost myšlenek se dá vykrást i do toho céčka a profitovat z toho.
Vepři budeme v (subjektivním) názoru co z toho je lepší, ale to už je o jiném pohledu.
@1 to je realita - technologie, které není jednoduché se naučit, lidé pokud nebudou muset, nebudou používat. U jazyků, u prostředí, které jsou jednoduché můžete snáze začít, a pak se zkušenostmi vypracovat. V opačném případě to nefunguje. Neznám jedinou složitější technologii, která by se masivněji používala. Pocit ze složitosti je subjektivní, nicméně, pokud se má nějaká technologie rozšířit, tak musí být opravdu jednoduchá.
@2 - Sofistikovanější nástroje zvládají komplexnost aplikací lépe. Nemyslím si, ale že je to vždy k užitku. Místo toho aby se komplexita řešila dekompozicí, tak se akceptuje, a ve výsledku jsou brutálně předesignované aplikace. Lidi pak zapomínají dělat věci jednoduše, a ztrácejí cit pro realitu. Je to takový paradox, - čím máte chytřejší nástroj, tak tím musíte mít víc zkušeností a znalostí, a být lepší, abyste neudělal velkou chybu (v designu). Hloupá technologie vás praští přes ruce mnohem dřív. V databázích je to nádherně vidět. Čím sofistikovanější technologie máte, tím musíte mít lidi s vyššími dovedostmi (nebo nemusíte, ale výsledky jsou pofidérní).
@3 - Podívejte se na zdrojáky Postgresu. Ty ifdefy musíte mít na low level úrovni, kdy řešíte portabilitu, a pracujete s nekompatibilním hw nebo sofwarem. Jakmile jste výš, tak ifdef nepotřebujete.
@4 - ano, ale abyste věděl, co přesně děje, tak potřebujete být na mnohem větším levelu než s tím Cčkem.
Ani já nemám křišťálovou kouli, a nevím, co bude za 10 let - ale dost bych se divil, kdyby to nebylo +/- stejné jako dnes. Prosadily se jen ty technologie, které silně zjednodušily práci, a do kterých šlo rychle naskočit. Fůra skvěle vymyšlených a chytrých věcí zapadlo, prostě proto, že pro ně nemáte lidi.
[Pavel Stěhule]
Pod to bych se s jednou vyhradou podepsal.
Tou vyhradou je je otazka komplexnosti technologii a rozsirenosti. Ono se staci podivat treba na nektere pomerne usazene a dostatecne hmm... stare projekty, jako je treba GTK. To samo o sobe je moloch az hruza a jak jede. To stejny dnesni QT. Jednoduche Framworky jako Fox ci FLTK jsou uplne na okraji preziti. Tak ta jeste Wxs, ale to taky utesitelne bobtna.
Nebo z jineho soudku: V linuxove sfere je velka obliba nadsencu do urcitych technologii je vsem vnutit. Kdyz jsem zacinal, platilo, ze kdo pouziva neco jineho nez glibc je nejvetsi zlo a shori v pekle. Moc me neprekvapuje, ze vitr vlal smerem od milovniku Gnome/GTK.
Dneska se zas silne vsem podsouvaji napr. kontejnery - bez ohledu na komplexnost cele technologie, bez ohledu na to jestli o ne mate zajem ci ne, bez ohledu na to, jestli je vubec POTREBUJETE....
A tak to je i s tim Rustem. Doufam, ze aspon vyvojari kernelu maji dost rozumu a nedopusti aby se to rozlezlo a hlavne, bude se to do jadra cpat, jen kdyz si o to vyslovne reknu.
Jinak s Vami ohledne C - a obzvlaste v kernelu - naprosto souhlasim.
26. 3. 2021, 20:27 editováno autorem komentáře
Ale je to extrémně jednoduchý jazyk, který se lze snadno naučit (na rozdíl od Rustu).
Naučit se C je extrémně jednoduché. Naučit se používat C správně je dost těžké. Linuxové jádro je ve stavu, kdy si nemůžeme dovolit, aby tam přispívali lidé, kteří neumí používat C správně. Naštěstí komunita kolem jádra by takové příspěvky nepustila.
Ten odkazovany clanek zminuje jenom priklady na zlepseni v aplikacnich programech (schvalne, kolik bodu ze sekce "Small wins for rust" plati pro kernel?)
Typicky jsou funkce jadra syscally - bezici na cpu jadru, kde bezi userspace. Pokud by jste chtel ziskat rychlostni vyhodu rustu z jeho schopnosti paralelizace, tak potrebujete vice jader. Ale kde je sehnat? typicky je nutno je ostatnim procesum odebrat.. takze ve vysledku ten vas syscall se muze (ale nemusi) provest rychleji (zalezi na overheadu reschedulingu, aby jste dalsi jadro ziskal vs. objemu prace). Ale ve vysledku bude tento system jako celek pomalejsi - protoze tam pribude zbytecna prace s odebiranim cpu.
Nektere pristupy se hodi pro psani aplikacnich programu, tam at si Rust klidne zustane a vyuziva svych schopnosti pro thread safe, a memory safe veci. Bez moznosti vyuzit tyto featury, je jako pouzivat C++ bez OOP featur. A taky mam pocit, ze tahat tohle do jadra, zavani "systemd" syndromem, protoze se pak aplikace zacnou stehovat do kernelu.
Reagoval jsem na Céčko by mělo jít do důchodu. Ale tím tomu moc nepomohou. Měli by začít přepisovat více věcí aby se to prosadilo. Například tlak z firem by mohl pomoci.
Tedy na tvrzení (pokud ho chápu správně), že by se měl Rust prosazovat především v aplikační oblasti. Na vývoj jaderných modulů nemám jasný názor, ale třeba i tam bude jednou všechno vypadat jinak.
V tom odkazovaném článku chybí jeden big win pro Rust, který plyne z paměťového modelu. Překladač Rustu má informaci o tom, zda reference stejného typu odkazuje na stejné nebo různé objekty. Je tedy možné většinu přístupů přes referenci optimalizovat pomocí noalias (restrict v C) a může to automaticky udělat překladač. V C tohle nikdy nepůjde, překladač C k tomu nemá dost informací. V C se to částečně řeší strict aliasingem, ale ten funguje jen pro objekty různých typů.
Aktuálně tuto optimalizaci Rust nepoužívá, protože LLVM je zabugované a neumí s noalias správně pracovat. Nicméně pracuje se na nápravě a tady je další poměrně velký potenciál k tomu, aby Rust generoval efektivnější kód než C: https://github.com/rust-lang/rust/issues/54878
No rust mi ako vyhra fakt nepride.
https://github.com/johnthagen/min-sized-rust
Bude ten kod stale o tolko rychlejsi ako by bol v C, ak bude optimalizovany tak aby sa velkostou aspom vzdialene priblizil k binarke vytvorenej z C zdrojaku? Alebo bude vyhra to ze kernel s tou istou funkcionalitov nam oproti C narastie 5 az 10 nasobne? Budeme mat wifi routre a podobne zariadenia ktore pouzivaju linuxove jaro s diskom? :D
Nastastie kopa ludi ktory to s C dotiahli dalej ako len k skuskam, hovori C pouzivat. Je to predsalen rokmi overeny nastroj, to ze umeniu s nim dokonale pracovat sa clovek nenauci, pre to sa musi narodit. A to hlavne v aktualnej realite, kde patlali hufne prudia do praxe zo skol, kde kvalita je druhorada, kedze peniaze maju za kvantitu, nie kvalitu absolventov.
No zatímco například php žádné memory-related chyby (které se tu omílají na céčko) nevede a že by to vedlo k nějak bezpečnějšímu webu mi teda moc nepříjde ;-)
Problem je malokedy v konkretnom jazyku, problem je zvedsa medzi stolickou a klavesnicou. V tom pripade to moze pisat trebars v ADA a bude to rovnako bezpecne ako by to pisal v basicu...
Mně na tom, jako mírně poučenému laikovi, není jasná jedna věc. Když je teď populární Rust, tak se dělá podpora pro moduly jádra v Rustu. Pak to bude třeba Go. Pak přijde něco nového, lepšího, třeba Trus. Pak někoho napadne, že by se mohl používat kýho výra třeba FORTRAN... není to v konečném důsledku značně kontraproduktivní?
zacatkem 80. let prislo C-ecko do Evropy a my tenkrat mladi jsme se na ten jazyk vrhli. Pak prisel Pascal, C++, Smalltalk, Ada, Java, Python, ...
Vsechny tyto jazyky slibovaly, ze vyvoj bude rychlejsi a programovani bezpecnejsi.
Bohuzel se to nepotvrdilo. Jsem rad, ze vyoj dospel nyni do faze, kdy konecne dostaneme ten spravny(TM) programovaci jazyk (Rust), s kterym budeme vytvaret bezchybne, rychle a levne programy.
Pokud by to jen oddělilo zrno od plev, pak výhoda. Jen se bojím že to oddělí z úplně stejného důvodu i to zrno - "A proč bych se učil něco co se mi nelíbí, má to nehezkou learning curve takže nad tím strávím nějakou dobu než pochopím jak to vůbec autoři mysleli že se psát má a nebudu se s tím muset prát jak to přesvědčit dělat co chci, když to vlastně teď nepotřebuju, a když už mám trochu času, nebude lepší se podívat radši třeba na Haskell?".
21. 3. 2021, 22:14 editováno autorem komentáře
Tak souhlasím, ale beru to z pohledu "Rust je jen jeden z mnoha dalších pokusů o pokračovatele C v systémovém programování, zatímco Haskell je pro mě úplně nové paradigma" takže pokud mi nejde o konkrétní projekt který už v Rustu je, ale o sebevzdělávání, připadá mi že ten Haskell (v našem případě) mi dá mnohem víc.
Z vlastní zkušenosti C++ programátora můžu říct, že naučení se Rustu může pomoct k vytváření kvalitnějšího kódu v C++. Což mě přivádí na myšlenku, že kdo se nezvládne naučit Rust, neměl by programovat ani v C/C++.
Podpora v kernelu celkem dává smysl- o dost těžší vyrobit memory leak, nepřítomnos GC a blizko k HW.
> Vsechny tyto jazyky slibovaly, ze vyvoj bude rychlejsi a programovani bezpecnejsi.
Mně to Python splnil. Ale zase za cenu toho, že je pomalý, pokud se dělají nějaké výpočty po prvcích (což u mě je typicky zpracování signálu). Takže do něj musím psát moduly v C. Ale i tak je to lepší než psát v C celou aplikaci a řešit hrůzy se soketama, stringama a seznamama.