Zajímavé, že nové projekty se C++ v jádře nijak nebrání. Třeba Zirkon používá subset C++17:
https://fuchsia.dev/fuchsia-src/development/languages/c-cpp/cxx
Trvat na tom, že nějaká feature je v projektu zakázaná se dá řešit přímo na úrovni CI. Možná Linus jen nemá rád C++ - ono když něco nesnášíš, argumenty si vždycky najdeš. Ale rozhodně bych to neinterpretoval tak, že C++ v jádře je špatné...
Klíčové je slovo “subset”. Rust i C++ mají společnou množinu problematických vlastností, které tolik nevadí v jádře, ale na vyšší úrovni ano. Pro Rust asi hovoří jednoduchost syntaxe oproti C++. Nicméně jádro jde psát v kde čem, Microsoft si napsal jádro OS v C# a v Japonsku měli výzkumný projekt, v jehož rámci napsali jádro v Prologu (resp. jeho paralelizované variantě), to jen Unix a jeho dědicové závisí na C (ostatně C vzniklo kvůli portaci Unixu).
Jenže C++ je otesánek, který nemá nikdy dost. Přidává další a další vlastnosti a způsoby, jak řešit totéž. S každou další revizí budeš pořád dokola s někým řešit, že tohle je fakt cool vlastnost a hodilo by se ji povolit.
Zircon, pokud se nepletu, je pořád výzkumný projekt a hračka Google. Argumentovat tím, že někdo napsal nějaké jádro v nějakém jiném jazyce sice můžeš, ale bylo by dobré srovnávat srovnatelné a s Linuxem se může srovnávat máloco.
Tak Rust se tím ani netají, že se v jistém slova smyslu hlásí tam, kde je C++ doma. Taky jsem opakovaně zaznamenal, že máš vůči Rustu výhrady (zmiňoval jsi runtime) - no proč ne. U mě je Rust poměrně kvalitně zamaskovaný funkcionální jazyk s imperativní syntaxí. Něco, co mi asi sedí filosofií nejvíce.
Normální je mít výhrady ke každému jazyku, Rust je ještě v pohodě, důležité je používat jazyky v kontextech, kam patří. Že je Rust kvalitní je pravda (sedí na LLVM), všechny moderní jazyky jsou dobře implementované. BTW Rust žádný runtime nemá (a je to IMHO dobře, zvlášť pro nasazení v jádře). Nicméně skutečně funkcionální není, na to má moc slabý typový systém (přítomnost flatMap z něj funkcionální jazyk nedělá).
> BTW Rust žádný runtime nemá (a je to IMHO dobře, zvlášť pro nasazení v jádře).
Ano, tohle jsem měl na mysli. I když - co Tokio a spol.? Nebo třeba https://blog.mgattozzi.dev/rusts-runtime/
> Nicméně skutečně funkcionální není, na to má moc slabý typový systém (přítomnost flatMap z něj funkcionální jazyk nedělá).
Nejde o flatMap, jde mi o to, že je z velké části založen na výrazech a ne na příkazech, má ADT a pattern matching, je defaultně immutable apod. Určitě věřím, že to někoho neuspokojí a představoval by si nějakou Mirandu, Agdu nebo nevím co. Ale doufám, že je aspoň trochu jasné, kam mířím.
Tokio je technicky knihovna, ne? BTW zrovna Tokio asi v jádru chtít nebudou :)
To s tím ADT apod. je právě někdy problém, fláknout na nízkoúrovňový jazyk ADT a další superabstraktní koncepty, to prostě musí zákonitě někde drhnout. S mírnou nadsázkou je Rust jednoduše asembler s monádama :) Už teď pozoruju, jak se v různých projektech rozhodují jen pro podmnožinu Rustu (stejně jako v C++), to není úplně dobrý směr vývoje, to je přesně pozice "too high a level for systems programming, too low a level for general programming". To druhé už je (pře)obsazené, tak ať se Rust drží svého kopyta, tam má šanci.
Nicméně skutečně funkcionální není, na to má moc slabý typový systém (přítomnost flatMap z něj funkcionální jazyk nedělá).
To je hrozna blbost. Typovy system funkcionalni jazyk nedela, viz cela rodina Lispovych jazyku. Co dela funkcionalni jazyk funkcionalnim, je referencni transparentnost a tady je videt u rustu velky posun timto smerem (ve srovnani s jinymi jazyky pro systemove programovani).
"Rust nemá runtime" je od nich ale je to vědomá nadsázka a není myšlená tak úplně vážně (podobně jako třeba "Rewrite it in Rust"). Rust má podobné runtime jako C++: inicializuje zásobník, alokátor a další struktury, převezme env proměnné a argv, zavolá případné konstruktory statických proměnných, nastaví handler na panic s příslušným výstupem, (pokud program není zkompilovaný, aby při panice rovnou abortoval) atd. a nakonec zavolá main. Po návratu z main ještě provede příslušný cleanup a pokud main vrací Result, vyhodnotí ho.