https://diziet.dreamwidth.org/19480.html
Rust is woke technology that embodies a woke understanding of what it means to be a programming language.
Of course, as ever, dissing something for being woke is nasty and fascist-adjacent.
@xChaos LOL, woke je koukám nadúžíváno v negativním kontextu, co? C/C++ má a bude pořád mít svoje místo. Rust je zajimavý, ale pořád to nebude kompletní náhrada C/C++ řekl bych.
@jan sakra, já k tomu dal špatný link, oba linky jsou z Rust fóra na NYXu...
tady zdůrazňují, že je to v pozitivním kontextu, každý kdo to používá v negativním kontextu se snaží o kulturní válku, ale kulturní válka proti Rustu nedává smysl, protože fakt není důvod, proč by rychlý kompilovaný kód měl segfaultovat, když si programátor nedá bacha.
Přiznám se, že já zatím s Rustem pohnul minimálně a některé koncepty jsou pro mě překvapivé, ale současně hluboce chápu, proč to tak vymysleli (i když něco bych třeba udělal osobně jinak). Asi je to po letech první věc, kde bych normálně chtěl chodit na přednášky a pak se účastnit nějakých organizovaných cvičení, nebo se zapojit do projektu, vedeného někým zdatným...
@jan ano, první feedback od vývojářů, co se programováním fakt chtějí živit je, že vlastně pracovních míst na Rust je míň, než programátorů, co by to chtěli používat.
Takže je to asi něco, co skončí jako součást opensource, ne korporátní vývojářské komunity...
@xChaos tak Rust používá i Microsoft a je hodně míst kde tohle potřebuješ řešit, takže i v korporátu Rust má svoje místo, ale že by nějak ohrožoval C/C++ dle mého názoru nehrozí. Možná za 10 let to bude jinak, ale aktuálně si myslím, že je toho kódu napsáno už moc, aby to někdo přepisoval.
@jan v případě Linuxu je to jednoznačné: Linus Thorvalds nikdy nepustil do kernelu moduly napsané v C++, ale moduly napsané v Rustu ano.
Rust byl vedlejší projekt vývoje projektu Mozilla, a já jako někdo, kdo před mnoha a mnoha lety taky napsal webový browser v C, i když jen malinkatý, rozhodně chápu, proč tu potřebu pocítili.
Což neznamená, že se ještě ve svém věku někdy zvládnu přizpůsobit konvencím, které Rust zavádí (např. už jen samotné přiřazení proměnné tam znamená "move", ne "copy" - když chceme referenci na stejný objekt, píše se to jinak), ale líbí se mi, že to podporuje multiplatformnost na úrovni přenositelnosti zdrojového kódu.
Přiznám se, že jsem nikdy nebyl fanouškem binární přenositelnosti na úrovni interpretace bytecode (Java, .NET). Ale zase je pravda, že dnes používám většinou interpretovaný Python, ale to je taky přenositelnost na úrovni zdrojového kódu, akorát to běží pomalu, protože to není kompilované.
Kupodivu - i některým chybám, které je rutinně možné udělat i v Pythonu a je nutné je odchytávat pomocí try - expect, prostě Rust dokáže předejít tím, že takový kód vůbec nedovolí zkompilovat.
Je to podobný skok, jako bylo před lety samotné kontrolování syntaxe compilerem - třeba kdysi Basic byl interpretovaný způsobem, kdy syntax error mohl nastat až za běhu programu, to by nám dnes taky už připadalo nepřijatelné...
@xChaos napsat browser v C je docela asi opruz co? V jakým UI frameworku jsi to psal? Ano, díra v browseru je díra do systému, takže tam to rozhodně dává smysl.
Tak ono v .NETu se toho za tu dobu změnilo celkem dost, takže krom interpretovaného kódu, který se JIT kompiluje do strojového, už dnes máme AOT, který celý .NET projekt zkompiluje do nativního kódu. Má to sice své omezení, ale benefity jsou rychlost a hlavně paměťová bezpečnost. Navíc kód v .NET už dneska beží fakt všude.
@jan v žádným frameworku, bylo to pod DOSem. Měl jsem vlastní framework (ne vlastní grafickou knihovnu, vyšel jsem z existující, ale měl jsem určité widgety nad ní). Klid, javascript interpreter jsem tehdy fakt nedal, byl to v podstatě jen HTML parser...
Ano, Rust je právě o tom, že paměťová bezpečnost by měla být srovnatelná s Javou nebo .NET. Uživatelský komfort se v některých ohledech blíží Pythonu (ale jen blíží - některé idomatické konstrukce v Pythonu jsou fakt geniální...)
@pavel @jan no v podstatě ano, C a C++ jsou navzdory podobnosti části syntaxe (to ale bylo tak před 30 lety, navíc) úplně odlišné jazyky.
Přístup ke správě paměti mají ale kupodivu podobný: v obou může existovat pointer, ukazující na paměť, která už byla uvolněna (zatím neinicializované pointery se dají uhlídat snadněji...). A v obou jazycích v základním použití není hlídané překročení hranic polí. (C navíc přidává unikátní koncept memory leaku, tedy neuvolněné paměti... to v C++ možná tak snadno nejde? já vlastně moderní C++ léta neviděl..)
Vyšší výkon, který se kdysi díky té absenci kontrol podařilo dosahovat, je dnes už dost diskutabilní výhoda (velká část rychlost je daná už tím, že se to kompiluje přímo do binárky).
A protože Rust tu část s hlídáním paměti dělá compile-time a ne run-time, tak tam vlastně žádná režie s tím zvýšením bezpečnosti ani není. Ale je dost těžké se naučit tím způsobem přemýšlet - protože pochopit, proč některé věci Rust zavádí, se dá jen díky chybám, které člověk dokáže udělat jen v C...
@pavel @xChaos 😂 ok a není lepší to spíš nekomentovat než hned urážet? Kód v C i v C++ jsem kolikrát kombinoval v hobby projektech na ESP32 a bylo to psané C nebo C++? Vím jak vypadá C, umím napsat funkční kód v C++ i v C. Rozhodně C++ je něco jiného než C, logicky. 😉 Rust jak jsem psal vypadá zajímavě, ale zatím nebyl čas si s tím hrát.
@jan no já na to spíš nemám věk. schopnost absorbovat nové věci klesá...
No, jinak C/C++ je rodina jazyků s určitou syntaxí + navíc jde o kompilované jazyky, assemblery, s přenositelností na úrovni zdrojového kódu, ne binárky. C syntaxi navenek napodobuje spousta jazyků, které ale používají jinak naprosto jiné paradigma (PHP, JavaScript..).
Z tohohle hlediska Rust taky patří do rodiny C/C++ jazyků a dokonce některé věci napodobuje z C++, vlastně docela hodně - kdybych C++ neviděl nikdy, ztratím se úplně.
Na rozdíl od hříček typu D se ale nezaměřuje jen na zvyšování uživatelského komfortu "pojídačů koláčů" - prakticky každý chce nějaké to foreach(), dneska - ale řeší fakt úplně zásadní otázku toho, jak uhlídat, že pointery neukazujou někam do pr.... (takové staré keltské slovo na bázi slabikotvorného r :-). A ono to světe div se jde uhlídat během compile time - akorát některé věci jsou pak zakázané! Takže člověk musí místo v C začít uvažovat nějak "rustikálně" či co ... na tohle bych právě potřeboval asi od někoho zaškolit, v příkladech se trochu ztrácím.
Jinak automatické uvolňování paměti je v Rustu vlastně (podle mě) zařízené stejně, jako v C++ (ale o tom vlastně vím jen velmi málo). Ale některé věci se tam kvůli tomu dělat nesmí, a to je zřejmě dobře.
Každopádně, přestat používat malloc()/free() ručně je asi stejně zásadní krok pryč od spaghetti code, jako přestat používat goto...
@pavel jako o něco se snažej, ale to asi právě součastí standardu není:
https://safecpp.org/draft.html#the-call-for-memory-safety
Obecně C++ je komplexní jazyk, kde jde předefinovat v podstatě úplně všechno (striktně vzato, to jde i v jiných jazycích či prostředích, ale tohle s tím přímo počítá).
Já osobně zatím fanoušek Rustu nejsem, protože těžko můžu být fanoušek něčeho, co zatím neumím, ale on ten příslib bezpečného kompilovaného kódu je fakt takový svatý grál programování, dá se říct... to, že dnes spadne většinou jen userspace aplikace a ne celý systém, to nás tak jako ukolébalo, že jsme nad tím přestali přemýšlet a všichni se spíš snaží "odchytávat chyby" ...
@jan @pavel jinak asi zajímá věc pro lidi, co se zajímají o C++ je
https://safecpp.org/draft.html#the-call-for-memory-safety
Mě je to z Rustu povědomý, to mut :-)