{"id":29846,"date":"2019-10-31T21:32:19","date_gmt":"2019-10-31T18:32:19","guid":{"rendered":"https:\/\/prohoster.info\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\/"},"modified":"2019-10-31T21:32:19","modified_gmt":"2019-10-31T18:32:19","slug":"igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","status":"publish","type":"post","link":"https:\/\/prohoster.info\/cs\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","title":{"rendered":"Hra v Rustu za 24 hodiny: osobn\u00ed zku\u0161enost z v\u00fdvoje","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Hra v Rustu za 24 hodiny: osobn\u00ed zku\u0161enost z v\u00fdvoje\" src=\"\/wp-content\/uploads\/2019\/03\/ea25406c43ac90ce2e33e290168d1083.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nV tomto \u010dl\u00e1nku se pod\u011bl\u00edm o osobn\u00ed zku\u0161enost s v\u00fdvojem mal\u00e9 hry v Rustu. Vytvo\u0159en\u00ed funk\u010dn\u00ed verze trvalo p\u0159ibli\u017en\u011b 24 hodin (v\u011bt\u0161inou jsem pracovala ve\u010der nebo o v\u00edkendech). Hra je je\u0161t\u011b daleko od dokon\u010den\u00ed, ale mysl\u00edm, \u017ee zku\u0161enost bude u\u017eite\u010dn\u00e1. Pov\u00edm v\u00e1m, co jsem se nau\u010dila, a o n\u011bkter\u00fdch poznatc\u00edch, kter\u00e9 jsem ud\u011blala p\u0159i stavb\u011b hry od nuly.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox doporu\u010duje:<\/b> Dvouro\u010dn\u00ed praktick\u00fd kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/iamwebdev.skillbox.ru\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=WEBDEVPRO&amp;utm_content=articles&amp;utm_term=rust24\">\u201eJsem webov\u00fd v\u00fdvoj\u00e1\u0159 PRO\u201c<\/a><\/noindex>.<\/p>\n<p><b>P\u0159ipom\u00edn\u00e1me:<\/b> <i>pro v\u0161echny \u010dten\u00e1\u0159e \"Habra\" \u2013 sleva 10 000 korun p\u0159i registraci na jak\u00fdkoli kurz Skillbox s promok\u00f3dem \"Habr\".<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Pro\u010d Rust?<\/h3>\n<p>\nZvolila jsem tento jazyk, proto\u017ee jsem o n\u011bm sly\u0161ela hodn\u011b dobr\u00e9ho a vid\u00edm, \u017ee se st\u00e1v\u00e1 st\u00e1le obl\u00edben\u011bj\u0161\u00edm ve sv\u011bt\u011b v\u00fdvoje her. P\u0159ed psan\u00edm hry jsem m\u011bla malou zku\u0161enost s v\u00fdvojem jednoduch\u00fdch aplikac\u00ed v Rustu. To bylo pr\u00e1v\u011b dost na to, abych poc\u00edtila ur\u010ditou svobodu b\u011bhem psan\u00ed hry.<\/p>\n<h3>Pro\u010d pr\u00e1v\u011b hra a jak\u00e1 hra?<\/h3>\n<p>\nVytv\u00e1\u0159en\u00ed her je z\u00e1bava! Cht\u011bla bych, aby bylo v\u00edce d\u016fvod\u016f, ale pro \u201edom\u00e1c\u00ed\u201c projekty vol\u00edm t\u00e9mata, kter\u00e1 nejsou p\u0159\u00edli\u0161 \u00fazce spjata s mou b\u011b\u017enou prac\u00ed. Jak\u00e1 hra? Cht\u011bla jsem vytvo\u0159it n\u011bco jako tenisov\u00fd simul\u00e1tor, kde se m\u00eds\u00ed Cities Skylines, Zoo Tycoon, Prison Architect a samoz\u0159ejm\u011b tenis. V podstat\u011b, stvo\u0159ila jsem hru o tenisov\u00e9 akademii, kam lid\u00e9 p\u0159ich\u00e1zej\u00ed hr\u00e1t.<\/p>\n<h3>Technick\u00e1 p\u0159\u00edprava<\/h3>\n<p>\nCht\u011bla jsem pou\u017e\u00edt Rust, ale nev\u011bd\u011bla jsem p\u0159esn\u011b, jak moc \u201eod nuly\u201c budu pot\u0159ebovat za\u010d\u00edt. Necht\u011bla jsem ps\u00e1t pixelov\u00e9 shadery a pou\u017e\u00edvat drag-n-drop, tak\u017ee jsem hledala co nejflexibiln\u011bj\u0161\u00ed \u0159e\u0161en\u00ed.<\/p>\n<p>Na\u0161la jsem u\u017eite\u010dn\u00e9 zdroje, kter\u00fdmi se s v\u00e1mi pod\u011bl\u00edm:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/arewegameyet.com\/\">Are we game yet<\/a><\/noindex> \u2014 seznam pot\u0159ebn\u00fdch prvk\u016f pro v\u00fdvoj her v Rustu;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/rust_gamedev\">Rust game dev subreddit;<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kenney.nl\">Zdarma pixel-art.<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nProzkoumala jsem n\u011bkolik hern\u00edch engin\u016f v Rustu a nakonec vybrala Piston a ggez. S nimi jsem se setkala p\u0159i pr\u00e1ci na p\u0159edchoz\u00edm projektu. Nakonec jsem zvolila ggez, proto\u017ee se zd\u00e1l b\u00fdt vhodn\u011bj\u0161\u00ed pro realizaci mal\u00e9ho 2D projektu. Modul\u00e1rn\u00ed struktura Piston je p\u0159\u00edli\u0161 slo\u017eit\u00e1 pro za\u010d\u00ednaj\u00edc\u00edho v\u00fdvoj\u00e1\u0159e (nebo pro toho, kdo poprv\u00e9 pracuje s Rustem).<\/p>\n<h3>Struktura hry<\/h3>\n<p>\nStr\u00e1vila jsem n\u011bjak\u00fd \u010das p\u0159em\u00fd\u0161len\u00edm o architektu\u0159e projektu. Prvn\u00ed krok \u2014 vytvo\u0159it \u201ezemi\u201c, lidi a tenisov\u00e9 kurty. Lid\u00e9 by se m\u011bli pohybovat po kurtech a \u010dekat. Hr\u00e1\u010di by m\u011bli m\u00edt dovednosti, kter\u00e9 se vyv\u00edjej\u00ed s \u010dasem. Nav\u00edc by m\u011bli m\u00edt editor, kter\u00fd umo\u017e\u0148uje p\u0159id\u00e1vat nov\u00e9 lidi a kurty, ale to u\u017e nen\u00ed zdarma.<\/p>\n<p>Po pe\u010dliv\u00e9m promy\u0161len\u00ed jsem se pustila do pr\u00e1ce. <\/p>\n<h3>Vytvo\u0159en\u00ed hry<\/h3>\n<p>\n<b>Za\u010d\u00e1tek: kruhy a abstrakce<\/b><\/p>\n<p>Vzala jsem si p\u0159\u00edklad z ggez a dostala jsem kruh na obrazovce. \u00da\u017easn\u00e9! Te\u010f trochu abstrakce. P\u0159i\u0161lo mi rozumn\u00e9 abstrahovat od my\u0161lenky hern\u00edho objektu. Ka\u017ed\u00fd objekt by m\u011bl b\u00fdt vykreslen a aktualizov\u00e1n, jak je uvedeno zde:<\/p>\n<pre><code class=\"rust\">\/\/ the game object trait\ntrait GameObject {\n    fn update(&amp;mut self, _ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt;;\n    fn draw(&amp;mut self, ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt;;\n}\n \n\/\/ a specific game object - Circle\nstruct Circle {\n    position: Point2,\n}\n \n impl Circle {\n    fn new(position: Point2) -&gt; Circle {\n        Circle { position }\n    }\n}\nimpl GameObject for Circle {\n    fn update(&amp;mut self, _ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt; {\n        Ok(())\n    }\n    fn draw(&amp;mut self, ctx: &amp;mut Context) -&gt; GameResult&lt;()&gt; {\n        let circle =\n            graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;\n \n         graphics::draw(ctx, &amp;circle, na::Point2::new(0.0, 0.0), 0.0)?;\n        Ok(())\n    }\n}<\/code><\/pre>\n<p>\nTento \u00fasek k\u00f3du mi umo\u017enil z\u00edskat skv\u011bl\u00fd seznam objekt\u016f, kter\u00e9 mohu aktualizovat a vykreslovat ve stejn\u011b skv\u011bl\u00e9m cyklu.<\/p>\n<pre><code class=\"rust\">mpl event::EventHandler pro MainState {\n    fn update(&amp;mut self, context: &amp;mut Context) -&gt; GameResult {\n        \/\/ Aktualizovat v\u0161echny objekty\n        for object in self.objects.iter_mut() {\n            object.update(context)?;\n        }\n \n        Ok(())\n    }\n \n    fn draw(&amp;mut self, context: &amp;mut Context) -&gt; GameResult {\n        graphics::clear(context);\n \n        \/\/ Vykreslit v\u0161echny objekty\n        for object in self.objects.iter_mut() {\n            object.draw(context)?;\n        }\n \n        graphics::present(context);\n \n        Ok(())\n    }\n}<\/code><\/pre>\n<p>\nmain.rs je nezbytn\u00fd, proto\u017ee obsahuje v\u0161echny \u0159\u00e1dky k\u00f3du. Str\u00e1vila jsem n\u011bjak\u00fd \u010das rozd\u011blen\u00edm soubor\u016f a optimalizac\u00ed struktury adres\u00e1\u0159\u016f. Takto to nyn\u00ed vypad\u00e1:<br \/>\n<i>resources -&gt; zde jsou v\u0161echny zdroje (obr\u00e1zky)<br \/>\nsrc<br \/>\n \u2014 entities<br \/>\n \u2014 game_object.rs<br \/>\n \u2014 circle.rs<br \/>\n \u2014 main.rs -&gt; hlavn\u00ed smy\u010dka<\/i><\/p>\n<p><b>Lid\u00e9, m\u00edsta a obr\u00e1zky<\/b><\/p>\n<p>Dal\u0161\u00ed krok je vytvo\u0159en\u00ed hern\u00edho objektu Person a na\u010dten\u00ed obr\u00e1zk\u016f. V\u0161e by m\u011blo b\u00fdt postaveno na dla\u017edic\u00edch o rozm\u011brech 32*32.<\/p>\n<p><img decoding=\"async\" alt=\"Hra v Rustu za 24 hodiny: osobn\u00ed zku\u0161enost z v\u00fdvoje\" src=\"\/wp-content\/uploads\/2019\/03\/265ed79e6784ef0180cfdc5aa8d96a4c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Tenisov\u00e9 kurty<\/b><\/p>\n<p>Po prozkoum\u00e1n\u00ed tvaru tenisov\u00fdch kurt\u016f jsem se rozhodla ud\u011blat je z dla\u017edic 4*2. Zpo\u010d\u00e1tku bylo mo\u017en\u00e9 ud\u011blat obr\u00e1zek t\u00e9to velikosti bu\u010f jako jeden obr\u00e1zek, nebo slo\u017een\u00edm osmi samostatn\u00fdch dla\u017edic. Ale pak jsem si uv\u011bdomila, \u017ee pot\u0159ebuji jen dv\u011b unik\u00e1tn\u00ed dla\u017edice, a tady je d\u016fvod.<\/p>\n<p>Celkem m\u00e1me dv\u011b takov\u00e9 dla\u017edice: 1 a 2.<\/p>\n<p>Ka\u017ed\u00e1 sekce kurtu se skl\u00e1d\u00e1 z dla\u017edice 1 nebo dla\u017edice 2. Mohou b\u00fdt um\u00edst\u011bny norm\u00e1ln\u011b nebo oto\u010deny o 180 stup\u0148\u016f.<\/p>\n<p><img decoding=\"async\" alt=\"Hra v Rustu za 24 hodiny: osobn\u00ed zku\u0161enost z v\u00fdvoje\" src=\"\/wp-content\/uploads\/2019\/03\/90d07caea0dee8673ada5d44963ab347.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Hlavn\u00ed re\u017eim stav\u011bn\u00ed (sestavov\u00e1n\u00ed)<\/b><\/p>\n<p>Po dosa\u017een\u00ed vykreslov\u00e1n\u00ed kurt\u016f, lid\u00ed a map jsem pochopila, \u017ee tak\u00e9 pot\u0159ebuji z\u00e1kladn\u00ed re\u017eim sestavov\u00e1n\u00ed. Implementovala jsem to tak, \u017ee kdy\u017e je stisknuto tla\u010d\u00edtko \u2013 objekt je vybr\u00e1n a kliknut\u00ed ho um\u00edst\u00ed na spr\u00e1vn\u00e9 m\u00edsto. Tak\u017ee tla\u010d\u00edtko 1 umo\u017e\u0148uje vybrat kurt a tla\u010d\u00edtko 2 umo\u017e\u0148uje vybrat hr\u00e1\u010de.<\/p>\n<p>Ale mus\u00edme si tak\u00e9 pamatovat, co znamen\u00e1 1 a 2, tak\u017ee jsem p\u0159idala dr\u00e1tov\u00fd model, aby bylo jasn\u00e9, kter\u00fd objekt je vybr\u00e1n. Takto to vypad\u00e1.<\/p>\n<p><img decoding=\"async\" alt=\"Hra v Rustu za 24 hodiny: osobn\u00ed zku\u0161enost z v\u00fdvoje\" src=\"\/wp-content\/uploads\/2019\/03\/09b92828fb9b8d4bfa5d5178ca99613c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Ot\u00e1zky o architektu\u0159e a refaktoringu<\/b><\/p>\n<p>Nyn\u00ed m\u00e1m n\u011bkolik hern\u00edch objekt\u016f: lidi, kurty a patra. Ale aby dr\u00e1tov\u00e9 modely fungovaly, je t\u0159eba ka\u017ed\u00e9mu objektu \u0159\u00edci, zda jsou v re\u017eimu zobrazen\u00ed, nebo zda je pouze nakreslena r\u00e1me\u010dek. To nen\u00ed zrovna pohodln\u00e9.<\/p>\n<p>Mysl\u00edm, \u017ee by bylo dobr\u00e9 p\u0159epracovat architekturu, aby se objevila n\u011bkter\u00e1 omezen\u00ed:<\/p>\n<ul>\n<li>existence entity, kter\u00e1 se zobrazuje a aktualizuje sama, je probl\u00e9m, proto\u017ee tato entita nem\u016f\u017ee 'poznat', co m\u00e1 vykreslit \u2014 obr\u00e1zek nebo dr\u00e1tov\u00fd model;<\/li>\n<li>absence n\u00e1stroje pro sd\u00edlen\u00ed vlastnost\u00ed a chov\u00e1n\u00ed mezi jednotliv\u00fdmi entitami (p\u0159\u00edklad \u2014 vlastnost is_build_mode nebo vykreslen\u00ed chov\u00e1n\u00ed). Mohla by se pou\u017e\u00edt d\u011bdi\u010dnost, a\u010dkoli v Rustu nen\u00ed norm\u00e1ln\u00ed zp\u016fsob, jak ji realizovat. Co jsem skute\u010dn\u011b pot\u0159ebovala \u2014 byla kompozice;<\/li>\n<li>n\u00e1stroj pro vz\u00e1jemnou interakci entit byl pot\u0159ebn\u00fd k p\u0159id\u011blen\u00ed lid\u00ed na kurty;<\/li>\n<li>samotn\u00e9 entity p\u0159edstavovaly sm\u011bs dat a logiky, co\u017e velmi rychle vy\u0161lo z kontroly.<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i>Provedla jsem dal\u0161\u00ed studii a objevila architekturu <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity_component_system\">ECS \u2014 Syst\u00e9m komponent a entit<\/a><\/noindex>, kter\u00fd se obvykle pou\u017e\u00edv\u00e1 ve hr\u00e1ch. Zde jsou v\u00fdhody ECS:<\/p>\n<ul>\n<li>data jsou odd\u011blena od logiky;<\/li>\n<li>kompozice m\u00edsto d\u011bdi\u010dnosti;<\/li>\n<li>architektura zam\u011b\u0159en\u00e1 na data.<\/li>\n<\/ul>\n<p><\/i><\/p><\/blockquote>\n<p>\nECS se vyzna\u010duje t\u0159emi z\u00e1kladn\u00edmi koncepty:<\/p>\n<ul>\n<li>entity \u2014 typ objektu, na kter\u00fd odkazuje identifik\u00e1tor (to m\u016f\u017ee b\u00fdt hr\u00e1\u010d, m\u00ed\u010d nebo n\u011bco jin\u00e9ho);<\/li>\n<li>komponenty \u2014 z nich se entity skl\u00e1daj\u00ed. P\u0159\u00edklad \u2014 renderovac\u00ed komponent, um\u00edst\u011bn\u00ed a dal\u0161\u00ed. To jsou \u00falo\u017ei\u0161t\u011b dat;<\/li>\n<li>syst\u00e9my \u2014 ty pou\u017e\u00edvaj\u00ed jak objekty, tak komponenty a obsahuj\u00ed chov\u00e1n\u00ed a logiku, kter\u00e1 se zakl\u00e1d\u00e1 na t\u011bchto datech. P\u0159\u00edklad \u2014 renderovac\u00ed syst\u00e9m, kter\u00fd proch\u00e1z\u00ed v\u0161echny entity s komponenty pro vykreslen\u00ed a star\u00e1 se o vykreslov\u00e1n\u00ed.<\/li>\n<\/ul>\n<p>\nPo studiu bylo jasn\u00e9, \u017ee ECS \u0159e\u0161\u00ed n\u00e1sleduj\u00edc\u00ed probl\u00e9my:<\/p>\n<ul>\n<li>pou\u017eit\u00ed kompozice m\u00edsto d\u011bdi\u010dnosti pro syst\u00e9movou organizaci entit; <\/li>\n<li>zbaven\u00ed se chaosu k\u00f3du d\u00edky syst\u00e9m\u016fm \u0159\u00edzen\u00ed; <\/li>\n<li>vyu\u017eit\u00ed metod jako is_build_mode k uchov\u00e1n\u00ed logiky dr\u00e1tov\u00e9ho modelu na stejn\u00e9m m\u00edst\u011b \u2014 v renderovac\u00edm syst\u00e9mu.<\/li>\n<\/ul>\n<p>\nToto je v\u00fdsledek po zaveden\u00ed ECS.<\/p>\n<p><i>resources -&gt; zde jsou v\u0161echny zdroje (obr\u00e1zky)<br \/>\nsrc<br \/>\n \u2014 komponenty<br \/>\n \u2014 position.rs<br \/>\n \u2014 person.rs<br \/>\n \u2014 tennis_court.rs<br \/>\n \u2014 floor.rs<br \/>\n \u2014 wireframe.rs<br \/>\n \u2014 mouse_tracked.rs<br \/>\n \u2014 resources<br \/>\n \u2014 mouse.rs<br \/>\n \u2014 syst\u00e9my<br \/>\n \u2014 rendering.rs<br \/>\n \u2014 constants.rs<br \/>\n \u2014 utils.rs<br \/>\n \u2014 world_factory.rs -&gt; world factory functions<br \/>\n \u2014 main.rs -&gt; hlavn\u00ed smy\u010dka<\/i><\/p>\n<h3>P\u0159i\u0159azujeme lidi na kurty<\/h3>\n<p>\nECS mi usnadnila \u017eivot. Nyn\u00ed jsem m\u011bl syst\u00e9movou cestu pro p\u0159id\u00e1v\u00e1n\u00ed dat k entit\u00e1m a p\u0159id\u00e1v\u00e1n\u00ed logiky na z\u00e1klad\u011b t\u011bchto dat. To na opl\u00e1tku umo\u017enilo organizovat rozd\u011blen\u00ed lid\u00ed na kurty.<\/p>\n<p>Co jsem ud\u011blala:<\/p>\n<ul>\n<li>p\u0159idala jsem data o p\u0159i\u0159azen\u00fdch kurtech do osoby;<\/li>\n<li>p\u0159idala jsem data o rozd\u011blen\u00fdch lidech do TennisCourt;<\/li>\n<li>p\u0159idala jsem CourtChoosingSystem, kter\u00fd umo\u017e\u0148uje analyzovat lidi a m\u00edsta, objevovat dostupn\u00e9 kurty a rozd\u011blovat hr\u00e1\u010de na n\u011b;<\/li>\n<li>p\u0159idala jsem syst\u00e9m PersonMovementSystem, kter\u00fd hled\u00e1 lidi p\u0159i\u0159azen\u00e9 na kurty, a pokud tam nejsou, pos\u00edl\u00e1 lidi tam, kam je t\u0159eba.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Hra v Rustu za 24 hodiny: osobn\u00ed zku\u0161enost z v\u00fdvoje\" src=\"\/wp-content\/uploads\/2019\/03\/f2e4632de2cb9d1c3ec7c9d9310b8170.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>Shrnut\u00ed<\/h3>\n<p>\nPr\u00e1ce na t\u00e9to jednoduch\u00e9 h\u0159e se mi velmi l\u00edbila. Nav\u00edc jsem r\u00e1da, \u017ee jsem pro jej\u00ed naps\u00e1n\u00ed pou\u017eila Rust, proto\u017ee:<\/p>\n<ul>\n<li>Rust v\u00e1m d\u00e1v\u00e1 to, co pot\u0159ebujete;<\/li>\n<li>m\u00e1 skv\u011blou dokumentaci, Rust je velmi elegantn\u00ed;<\/li>\n<li>st\u00e1lost je skv\u011bl\u00e1;<\/li>\n<li>nemus\u00edte se uchylovat ke klonov\u00e1n\u00ed, kop\u00edrov\u00e1n\u00ed nebo jin\u00fdm podobn\u00fdm v\u011bcem, kter\u00e9 jsem \u010dasto d\u011blala v C++;<\/li>\n<li>Options jsou velmi pohodln\u00e9 na pr\u00e1ci, tak\u00e9 skv\u011ble zpracov\u00e1vaj\u00ed chyby;<\/li>\n<li>pokud se projekt poda\u0159ilo zkompilovat, 99% \u0161anc\u00ed, \u017ee funguje, a to p\u0159esn\u011b tak, jak m\u00e1. Chybov\u00e9 hl\u00e1\u0161en\u00ed p\u0159eklada\u010de se mi zd\u00e1 b\u00fdt nejlep\u0161\u00ed, jak\u00e9 jsem vid\u011bla.<\/li>\n<\/ul>\n<p>\nV\u00fdvoj her na Rustu teprve za\u010d\u00edn\u00e1. Ale ji\u017e existuje stabiln\u00ed a pom\u011brn\u011b velk\u00e1 komunita, kter\u00e1 pracuje na tom, aby Rust otev\u0159ela v\u0161em. Tak\u017ee se d\u00edv\u00e1m do budoucnosti jazyka s optimismem, netrp\u011bliv\u011b o\u010dek\u00e1vaj\u00edc\u00ed v\u00fdsledky na\u0161\u00ed spole\u010dn\u00e9 pr\u00e1ce.<\/p>\n<blockquote><p><b>Skillbox doporu\u010duje:<\/b><\/p>\n<ul>\n<li>Online kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/frontend-developer\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=FRENDEV&amp;utm_content=articles&amp;utm_term=rust24\">\u201eProfese frontend v\u00fdvoj\u00e1\u0159\u201c<\/a><\/noindex>.<\/li>\n<li>Praktick\u00fd kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/agima\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=AGIMA&amp;utm_content=articles&amp;utm_term=rust24\">\"Mobiln\u00ed v\u00fdvoj\u00e1\u0159 PRO\"<\/a><\/noindex>.<\/li>\n<li>Praktick\u00fd ro\u010dn\u00ed kurz <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/php\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PHPDEV&amp;utm_content=articles&amp;utm_term=rust24\">\u201ePHP v\u00fdvoj\u00e1\u0159 od 0 do PRO\u201c<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\n<\/p><\/blockquote>\n<p>Zdroj: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/444364\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u0433\u0440\u044b \u043d\u0430 Rust. \u041d\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0448\u043b\u043e \u043e\u043a\u043e\u043b\u043e 24 \u0447\u0430\u0441\u043e\u0432 (\u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0430 \u043f\u043e \u0432\u0435\u0447\u0435\u0440\u0430\u043c \u0438\u043b\u0438 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u043d\u044b\u0445). \u0418\u0433\u0440\u0430 \u0435\u0449\u0435 \u0434\u0430\u043b\u0435\u043a\u0430 \u043e\u0442 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f, \u043d\u043e \u044f \u0434\u0443\u043c\u0430\u044e, \u0447\u0442\u043e \u043e\u043f\u044b\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u0447\u0435\u043c\u0443 \u043d\u0430\u0443\u0447\u0438\u043b\u0430\u0441\u044c, \u0438 \u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f\u0445, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0438 \u0438\u0433\u0440\u044b \u0441 \u043d\u0443\u043b\u044f. [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-29846","post","type-post","status-publish","format-standard","hentry"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/cs\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0418\u0433\u0440\u0430 \u043d\u0430 Rust \u0437\u0430 24 \u0447\u0430\u0441\u0430: \u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/cs\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:32:19+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:32:19+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Hra na Rust za 24 hodin: osobn\u00ed zku\u0161enost v\u00fdvoje | ProHoster","description":"V tomto \u010dl\u00e1nku se pod\u011bl\u00edm o sv\u016fj osobn\u00ed zku\u0161enost.","canonical_url":"https:\/\/prohoster.info\/cs\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"cs_CZ","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0418\u0433\u0440\u0430 \u043d\u0430 Rust \u0437\u0430 24 \u0447\u0430\u0441\u0430: \u043b\u0438\u0447\u043d\u044b\u0439 \u043e\u043f\u044b\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 | ProHoster","og:description":"\u0412 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e \u043b\u0438\u0447\u043d\u043e\u043c \u043e\u043f\u044b\u0442\u0435.","og:url":"https:\/\/prohoster.info\/cs\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:32:19+00:00","article:modified_time":"2019-10-31T18:32:19+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"29846","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-20 22:43:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:47:36","updated":"2026-01-20 22:43:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/29846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/comments?post=29846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/posts\/29846\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/media?parent=29846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/categories?post=29846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/cs\/wp-json\/wp\/v2\/tags?post=29846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}