Hlavní navigace

Názor k článku Ukazatele v Rustu aneb temná strana Síly od klokan - Při vší úctě váš příspěvek svědčí o tom,...

  • Článek je starý, nové názory již nelze přidávat.
  • 18. 5. 2017 9:56

    klokan

    Při vší úctě váš příspěvek svědčí o tom, že problém není ve smyslu Rustu, ale v tom, do jaké míry tomu (ne)rozumíte. V C++ můžu mít unique_ptr, jak ale zaručím, že je ukazatel skutečně jediný? Nijak. Není nejmenší problém mít na tentýž objekt zároveň shared_ptr, takže paměť se mi kdykoli může uvolnit pod rukama. Především je ale úplně jisté, že kromě toho "unique" ukazatele se někde v programu k tomu samému objektu přistupuje taky jako T*. Nemusím snad mluvit o tom, že ukazatele i s celou slavnou STL (a i C++ reference) můžou klidně být NULL, ukazovat do nealokované paměti atd. To všechno jsou jenom berličky, které ale vůbec neřeší podstatu problému.

    Obecně k vašemu dojmu ze seriálu se dají říct dvě věci. Věcí, které Rust umí a C++ ne je hodně, ale samozřejmě u takovýchto jednoduchých příkladů se neprojeví. Cokoli tady autor demonstruje se samozřejmě dá udělat i v C++ (nebo v assembleru). Teprve při práci na větším a složitějším projektu se dají ocenit věci jako právě ona rigoróznost a z ní vyplývající garance, algebraické typy, mimořádně pokročilý typový systém, relativně dobrá podpora funkcionálního programování (Rust rozhodně není pravý funkcionální jazyk, ale jde v tomto směru mnohem dále, než jakýkoli jiný mainstream jazyk), vynikající možnosti paralelizace, jaké nemá ani Go (natož C++!), metaprogramování, kterému se snad kromě D nevyrovná žádný jiný statický jazyk, integrovaná podpora testů, které se můžou týkat i dokumentace, nástroj cargo, atd... a to všechno s tím, že výsledný kód typicky běží stejnou rychlostí jako C - kdepak C++ - ale někdy i násobně vyšší, právě díky snadné a bezpečné paralelizaci.

    Zadruhé je nutné mít na paměti, proč Rust vůbec existuje. Vyvíjí ho Mozilla spolu s projektem Servo a to na základě jejich dlouholetých zkušeností se správou velkého a složitého programu v C++, totiž Gecka. Rust je přímo navržen tak, aby se poučil z C++ a vyhnul se problémům a vadám typickým pro C++ projekty. Je to situace analogická s tím, jak Ada vznikla na základě neblahých zkušeností DoD s Fortranem. V žádném případě nikdo neříká, že je Rust "dokonalý", ale tvrdit, že nemá smysl, protože C++ atd... je v podstatě stejné, jako tvrdit, k čemu Wayland když máme X11.