Nejperspektivnější programovací jazyk Rust | robot_dreams Czech
should_authorize_via_email
email.input_code tel.input_code
 
email.code_actual_for tel.code_actual_for
apply_exit_text
session_ended
to_homepage
Lukáš Hozda: Rust je zlatá střední cesta mezi programovacími jazyky

Lukáš Hozda: Rust je zlatá střední cesta mezi programovacími jazyky

Rozhovor s odborníkem a lektorem na vývoj v jazyce Rust

Ve světě softwaru je developerský jazyk Rust neoddělitelnou součástí diskuze o bezpečném a efektivním kódování. S nástupem Rustu jako moderního nástroje pro vývoj systémového softwaru, ale i webových aplikací se tento nováček stává jedním z nejperspektivnějších programovacích jazyků na scéně. Proto jsme oslovili Lukáše Hozdu, lektora našeho kurzu Rust Developer, aby nám poskytl hlubší pohled na tento fascinující jazyk a jeho souvislosti s moderními technologiemi a developerskou prací.

související kurzy:

Rust Developer

Lukáš Hozda

IT Metodolog v Braiins Systems

O kurzu
hozda-lukas-65c370f009423015684146.png
 

Lukáš Hozda

Než se pustíme do rozhovoru, pojďme se blíže seznámit s naším lektorem Lukášem Hozdou. Lukáš působí v Braiins Systems na pozici IT metodologa a zároveň spravuje interní vzdělávací oddělení společnosti. Vytváří a provozuje interní vzdělávací materiály, pořádá workshopy a přednášky, a také se podílí na náborovém procesu, kde zastává roli technického garanta pro Rust a Python. Následně zprostředkovává technický onboarding nových zaměstnanců a konzultuje s vývojáři správné použití Rustu a dalších technologií.

Rust v praxi

Rust nabízí revoluční funkce, které přinášejí nové paradigma v bezpečnosti a optimalizaci kódu. Nejde pouze o jazyk, který by byl optimalizován pro konkrétní typ aplikace; je navržen tak, aby byl univerzálně použitelný v celé řadě odvětví, od vestavěných systémů až po webové servery. Jeho bezpečnostní model a systém vlastnictví z něj činí jeden z nejbezpečnějších jazyků, což je důvod, proč si Rust získává stále více příznivců.

Vývoj v Rustu není pouze o kódování; je to komplexní ekosystém, který zahrnuje nástroje, knihovny a komunitu, která spolupracuje na posouvání hranic toho, co je možné v oblasti softwarového inženýrství. Lukáš Hozda je jedním z těch, kteří v tomto ekosystému aktivně působí, a jeho zkušenosti a expertní znalosti jsou cenným přínosem pro každého, kdo se chce v Rustu vzdělávat.

Proto se v tomto rozhovoru zaměříme na několik klíčových témat: Jaká je role Rustu v moderním světě software oproti jiným jazykům? Jakým výzvám čelí vývojáři při práci s tímto jazykem? A jaké nástroje a knihovny preferuje náš odborný lektor? Na tyto a mnoho dalších otázek nalezneš odpovědi v nadcházejícím rozhovoru s Lukášem Hozdou.

V čem se Rust liší od jiných systémových programovacích jazyků? Jaké jsou hlavní výhody používání Rustu oproti jiným programovacím jazykům, jako je C++ nebo Python?

Oproti C/C++ a Pythonu a vlastně většině jiných mainstreamových jazyků, například jazyku Java, C#, JS, Go, Ruby, Perl a PHP, Rust vychází z trochu jiných kořenů. Původní inspirací byly funkcionální jazyky OCaml a SML, posléze přišly další inspirace, například Haskell nebo Cyclone. Zmíněné jazyky figurují spíše v akademické sféře a patří (s výjimkou Cyclone) do kategorie více high-level jazyků, které mají větší míru abstrakce od hardwaru a nejsou určeny pro systémové programování, které vyžaduje výkonnost a precizní kontrolu nad prostředky, jako jsou paměť, vlákna nebo sockety.

Rust ale umožňuje low-level programování, navzdory tomu, že je velmi výkonný a umožňuje modelování komplexních abstrakcí. Tento cíl si vyžádal určité kompromisy v návrhu jazyka. Striktnost překladače Rustu a silná statická analýza není jenom z důvodu bezpečnosti – otevírá také cestu optimalizacím, které jsou důležité pro výkonnost jazyka.

Jeden z klíčových rozdílů od mainstreamových jazyků je přístup Rustu k objektově orientovanému programování. S výjimkou C, které není objektově orientované vůbec, a JavaScriptu, který do vydání standardu ECMAScript 6 podporoval pouze OOP přes prototypování, jsme v mainstreamových jazycích zvyklí na dědičný model s třídami. Programátor například v Javě vytváří třídy, které mají určité vlastnosti a metody, pak třídy, které od nich dědí a vytváří hierarchii, kde se na sebe nabalují definice čím dál specifičtějších tříd. Tento model je dobrý a intuitivní například pro modelování grafického rozhraní, v aplikaci by mohla existovat následující postupka tříd: Object → Widget →  Button → AnimatedButton.

Rust používá kompoziční OOP model. Data jsou oddělená od chování a hlavním nositelem OOP jsou takzvané traity a trait objekty. Trait reprezentuje určité chování, pro které má mít objekt, který daný trait implementuje, kapacitu. Ze standardní knihovny zmíním pro ukázku trait Display, který implementují datové typy, které lze vypsat jako text, a Add, který vyjadřuje schopnost se sčítat operátorem ‚+‘ s jinými hodnotami téhož nebo jiného typu.

Dalším rozdílem je preference move sémantiky oproti copy sémantice. Pokud předáme hodnotu nějakého neprimitivního typu jako parametr funkci, tak ve většině programovacích jazyků dojde buď ke kopii (to je případ jazyka C), nebo k automatickému předání reference na daný objekt (případ Pythonu, Javy a dalších). V Rustu dojde k opravdovému přesunutí hodnoty do funkce, kam byla předána jako parametr. V původní funkci hodnota už nebude v dalším kódu dostupná, pokud jsme ji předali jinam. To umožňuje nevytvářet zbytečné kopie dat a dovoluje nám to mít kontrolu nad tím, kdy se co kopíruje nebo kdy chceme předat referenci místo objektu samotného.

Jaké jsou některé běžné „gotchas“ nebo nástrahy, na které by si nováčci v Rustu měli dávat pozor?

Určitě se budu trochu opakovat, ale jde hlavně o learning curve. To, že je Rust složitější se naučit, je pro Rust Foundation známý problém a během posledních několika let se situace výrazně zlepšila.

Které IDEs, frameworky a nástroje doporučuješ pro práci s Rustem?

Rustový toolchain zahrnuje rust-analyzer, což je velmi kvalitní implementace tzv. Language Serveru. Language Server Protocol odděluje analýzu a funkce založené na sémantice kódu od editoru, a tudíž editorům stačí implementovat language server protokol a rust-analyzer potom zprostředkuje většinu funkcionality typické pro IDE.

Tím nejrozšířenějším řešením v komunitě je stáhnout si editor Visual Studio Code a nainstalovat si do něj rust-analyzer plugin. Pro ty, kteří si přejí vysloveně používat nějaké IDE, tak mohu doporučit JetBrains IntelliJ s Rust rozšířením. JetBrains před pár dny ohlásilo RustRover, který má být samostatným Rust IDE. Zatím jsem ho ještě neměl šanci vyzkoušet.

Já sám jako fanoušek terminálu a práce v příkazové řádce používám Kakoune, modální editor podobný Vimu. Platí to, co jsem říkal o GUI editorech – díky language server protokolu Kakoune komunikuje s rust-analyzerem a mně je dostupná většina funkcionality, kterou bych čekal v IDE.

Situace editorů a dalších nástrojů pro vývoj Rustu se každý den posouvá dopředu mílovými kroky. V komunitě je typické vytvářet stránky s názvem „Are We X Yet?“, které sledují pokrok v různých aspektech ekosystému Rustu. Pro IDE se jedná o areweideyet.com. Dále doporučuji používat nástroje zahrnuté v rustovém toolchainu – například linter clippy a formátovač rustfmt.

V rustovém ekosystému je zatím typické nevytvářet velké všeobjímající frameworky, jako je například Spring v Javě nebo Django v Pythonu, ale spíš menší oddělené frameworky a knihovny, které se zaměřují na jeden konkrétní aspekt. Mohu zmínit pár zajímavých frameworků – tokio na psaní asynchronních aplikací; rayon na jednoduchou paralelizaci programů; rocket, actix-web a warp na vývoj webového back-endu, serde na serializaci/deserializaci řady datových formátů, diesel jako ORM na práci s databázemi.

V jakých konkrétních oblastech vývoje software vidíš největší potenciál pro Rust? Myslíš, že by mohl nahradit jazyky jako C/C++ v systémovém programování?

Domnívám se, že mezi C a C++ reprezentuje Rust v některých aspektech zlatou střední cestu. C je fascinující programovací jazyk a dle mého názoru by se s ním měl každý programátor seznámit alespoň jednou za život, aby pochopil, jak věci fungují na nízké úrovni (tedy blízko k hardwaru). 

C je zároveň vrcholem minimalismu a skvělého designu pro podmínky, ve kterých vznikl – v době před půl stoletím, kdy ty nejsilnější počítače měly sotva zlomek výkonu našich telefonů a megabajt byl považovaný za velkou jednotku velikosti. To, že se dodnes C používá, je výpovědí o genialitě jeho autora. Nevýhodou je, že minimalismus jazyka C byl za cenu ergonomie, bezpečnosti a funkcionalit, které by umožňovaly jednoduše modelovat komplexní koncepty. V C projektech je na programátora uvalena obrovská zodpovědnost, cizímu kódu je velmi těžké věřit, programy jsou náročné na údržbu a entropie v codebase roste velmi rychle.

C++ má některé stejné a některé opačné problémy. Bezpečnost a správná práce s pamětí jsou pořád relevantním problémem, stejně tak jako odpovědnost programátora. Na druhou stranu je C++ přímým opakem minimalismus. Zatím poslední vydaný standard, C++20, má 1853 stránek formátu A4. C++ umožňuje nepřeberné množství přístupů a obsahuje velké množství nástrojů, jak programovat. To vede k tomu, že je široké spektrum „různých C++“, které se od sebe velmi liší. Pro společnosti, které významně investují do vývoje v C++ bývá nutné si „vykrojit“ vlastní podmnožinu C++, kterou zvolí pro svoje projekty. Na internetu jsou volně dostupné C++ style guides od Mozilly, Microsoftu nebo Googlu a jsou mezi nimi podstatné rozdíly. Situaci C++ nepomáhá zpětná kompatibilita s C. Nezkušení nebo neukáznění programátoři mixují přístupy z C a C++ dohromady, čímž vytvářejí nepřehledný kód nebo nové, zajímavé a nepředvídatelné chyby ve svých programech.

Rust nabízí zlatou střední cestu v tom, že není tak minimalistický a nehlídaný jako C, ale zdaleka není tak komplexní, všeobjímající a nesoustředěný jako C++. Je to projekt vytvořený relativně nedávno – oproti C a C++, které by oba mohly se svým věkem vykonávat funkci senátorů, a tak se může vyvarovat chybám minulosti a zohledňovat výzkum v teoretické informatice za poslední dekády.

Samotná příručka Rustu tvrdí, že Rust není zvláště originální jazyk – pouze přináší akademické a nemainstreamové poznatky v podobě, která je pro mainstream vhodná.

Jak Rust ovlivňuje současné trhy práce, zvláště v oblastech jako backend, embedded systémy a systémové inženýrství?

Rust patří mezi nejrychleji rostoucí jazyky současnosti, co se podílu na trhu týče. V komerčním prostředí můžeme rozlišit dvě velké skupiny, které mají různé motivace k volbě Rustu, konkrétně startupy a velké korporáty.

U startupů je motivace poměrně jednoduchá – bývají mnohem přívětivější moderním technologiím, ochotné experimentovat a volit nástroje a přístupy i na základě méně technických důvodů, jako je například open-source dostupnost nebo online komunita dané technologie.

Korporáty typu Google, Microsoft, Mozilla a Facebook investují do Rustu spíše z ekonomických důvodů. Oproti jazykům jako je Python, Ruby nebo Java bude doba vývoje ekvivalentního projektu v Rustu delší, výsledkem ale bude kód, který je rychlejší, bezpečnější a více udržitelný na dlouhodobou správu. 

Silná statická analýza v Rustu přináší odpovědnost za určité aspekty kvality a robustnosti kódu z programátora na překladač. To umožňuje více věřit cizímu kódu a předcházet řadě bezpečnostních chyb a selhání, které mohou způsobit korporátům milionové škody. Jako příklad lze zmínit například kauzu Heartbleed, kde chyba ovlivňovala všudypřítomnou bezpečnostní knihovnu OpenSSL. Přes publicitu této chyby a rychlou opravu v další verzi OpenSSL, dodnes běží na světě tisíce serverů, které jsou vůči Heartbleedu zranitelné. 

Problém spočíval v absenci kontroly délky vstupu a přístupu k paměti. V C je za tyto kontroly zodpovědný programátor, Rust by neoprávněný přístup detekoval v některých případech už při kompilaci, v jiných za běhu programu a chybě by předešel.

Rust stál také u zrodu nové vlny jazyků označovaných za „náhrady C++“, do této kategorie patří také Zig, Carbon nebo Cppfront (technicky vzato o pár let dříve před Rustem vznikl jazyk D, který byl také považován za náhradu C++, D se ale nikdy nedostalo širokého využití a dodnes zůstává spíše obskurním jazykem). 

Pokud tento trend bude pokračovat, dojde k diverzifikaci odvětví, kterým C++ po dlouhou dobu dominovalo. Intelektuální diverzita přináší inovaci, takže můžeme doufat v posun jazyků a odvětvích, ve kterých jsou používané.

Jaký dopad může mít osvojení Rustu na kariéru softwarových inženýrů?

Mohu zmínit svojí osobní zkušenost. Před tím, než jsem v roce 2015 začal poprvé používat Rust, psal jsem většinu svých projektů buď v C, nebo v C#. Naučit se Rust tehdy byla těžká cesta, jazyku tehdy chyběla řada ergonomických funkcí a výukových materiálů, které proces dnes významně zjednodušují.

Rust mě přinutil více přemýšlet nad tím, co se děje v mém programu z hlediska bezpečnosti a výkonu. Také jsem začal preferovat více funkcionální přístup k programování – používat iterátory místo smyček, psát funkce vyšších řádů, eliminovat vedlejší efekty a globální proměnné, vytvářet konkrétnější typy a kódovat informace do jejich definic prostřednictvím generických parametrů, jejichž platnost může ověřit překladač už při kompilaci.

Zodpovědnější přístup k programování jsem si přenesl i do jiných programovacích jazyků a domnívám se, že to vede k tomu, že kód, který napíšu, je robustnější. Tuto uvědomělost při používání i jiných jazyků mi potvrdila řada známých a kolegů, kteří také používají Rust.

Nesmíme opomenout ale ani ekonomický aspekt. Trh Rustu zatím stále roste rychleji než počet programátorů v tomto jazyce. Existuje tedy vysoká poptávka, zejména ve firmách pocházejících z USA nebo z Anglie. Firmy pocházející z České republiky a našich východních sousedů teprve Rust objevují.

V jakém rozsahu používáš Rust na tvojí pozici v Braiins Systems? Existují projekty, které byly konkrétně zlepšeny díky přechodu na Rust?

Rust je můj denní chléb. Nedalo by se říci, že bych soustavně programoval na některém z našich projektů, každodenně ale konzultuji s kolegy zapeklité problémy, otázky a plánování řešení různých úloh v Rustu.

Co tě přivedlo k výuce Rustu a jaká je tvoje osvědčená metoda v učení tohoto specifického jazyka?

Jsem experimentátor a průzkumník. Celý život jsem rád zkoušel jednak staré obskurní a jednak moderní, nové a neznámé technologie. Vyzkoušel jsem desítky programovacích jazyků a Rust byl jeden z těch, které mě zaujaly. Připadalo mi, že je tam vyvážený poměr technické zajímavosti a praktičnosti.

Informatika je jeden z oborů, které patří mezi mé koníčky, rád ji studuji ve volném čase. Co se naučím, poté rád sdílím s blízkými, přáteli nebo se svými studenty. V roce 2016 jsem mezi přáteli poprvé takhle učil Rust, v roce 2017 jsem si na Gymnáziu Jana Keplera otevřel kurz Programování v Rustu.

Moje osvědčená metoda pro výuku Rustu je správný balanc teorie a praxe s osobními anekdotami. Teorie je pro studium Rustu klíčová, člověk se bez ní neobejde, na druhou stranu některé teoretické aspekty je těžké pochopit, když si to jedinec nevyzkouší na praktické ukázce.  Příběhy a ukázky z praxe umožňují zasadit koncepty do konkrétního kontextu a pomoci budovat myšlení rustovým způsobem. Obecným cílem mojí výuky je rozložit zmírnit onu „learning curve“ tak, aby si studenti postupně osvojovali koncepty bez frustrace, která je pro začátečníky v Rustu typická.

Jakým způsobem kurz pomáhá studentům, kteří mají zkušenosti s jinými programovacími paradigmaty v adaptaci na Rust?

Jasným vymezením toho, co je stejné a toho, co se liší. Řekneme si, kde člověk může v pořádku spoléhat na přístupy, na které je už zvyklý, a kde to nejde – místa, kde je Rust v něčem specifický a volí přístupy, které jsou ve sice výsledku velmi ergonomické a dobře odůvodněné, ale pro začátečníky neobvyklé.

Kurz Rust Developer

Přidej se k nám v robot_dreams a získej komplexní znalosti Rustu, jednoho z nejvíce inovativních a bezpečných programovacích jazyků.. Náš kurz je strukturován tak, aby uspokojil potřeby různých IT profesionálů: od back-endových vývojářů, přes embedded a systems inženýry až po full-stack developery.

Kurz Rust Developer je zaměřen na praktickou aplikaci jazyka ve tvém každodenním kódování, včetně náročných oblastí jako jsou ownership & borrowing, lifetimes a výkonné nástroje pro tvorbu produkčního kódu. Je vhodný pro ty, kteří již mají základní programovací znalosti alespoň jednoho programovacího jazyka a rádi by získali nové dovednosti pro uplatnění v různých segmentech IT.

Absolvováním kurzu získáš:

  • Systémové znalosti a dovednosti potřebné pro efektivní programování v Rustu.
  • Schopnost správně modelovat abstraktní koncepty a implementovat robustní a výkonné aplikace.
  • Detailní znalost nástrojů a frameworků relevantních pro moderní Rust vývoj, včetně tokio, tracing, anyhow a thiserror.
  • Certifikát, který podloží tvé nové znalosti a dovednosti pro potenciální zaměstnavatele.

Formát kurzu obsahuje 20 interaktivních online lekcí, živé kódování, diskuzní fóra a domácí úkoly, které ti umožní aplikovat teoretické znalosti na praktické projekty. Veškeré domácí úkoly jsou kontrolovány naším zkušeným lektorem Lukášem Hozdou a kurz zahrnuje i QA sessions, feedback sessions a finální projekt.

Cílem kurzu není pouze naučit se programovat v Rustu, ale stát se špičkovým Rust vývojářem, který rozumí jazyku na hluboké úrovni a je schopen plně využít jeho potenciál. Ať už jsi zkušený programátor, nebo hledáš možnost diverzifikace svých dovedností, tento kurz je pro tebe kritickým krokem na tvojí cestě k excelenci. 

Získej cenné dovednosti a znalosti, které posunou tvou IT kariéru na novou úroveň a vstup do světa, kde výkon, bezpečnost a inovace jdou ruku v ruce s kvalitním a dostupným vzděláním.

Autor: Jan Bílek

Zajímá tě jak si stojí Rust oproti jiným jazykům? Máme pro tebe srovnání s Pythonem!

Více článků
Příručka od robot_dreams s příkladem syntaxe
Kam se dnes posouvají technologické hranice robotiky?