{"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\/sq\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","title":{"rendered":"Loj\u00ebrat me Rust p\u00ebr 24 or\u00eb: eksperience personale e zhvillimit","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Loj\u00ebrat me Rust p\u00ebr 24 or\u00eb: eksperience personale e zhvillimit\" src=\"\/wp-content\/uploads\/2019\/03\/ea25406c43ac90ce2e33e290168d1083.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nN\u00eb k\u00ebt\u00eb artikull, do t\u00eb flas p\u00ebr p\u00ebrvoj\u00ebn time personale n\u00eb zhvillimin e nj\u00eb loje t\u00eb vog\u00ebl me Rust. Krijimi i versionit funksional zgjati rreth 24 or\u00eb (p\u00ebrgjith\u00ebsisht kam punuar n\u00eb mbr\u00ebmje ose gjat\u00eb fundjavave). Loja ende \u00ebsht\u00eb larg p\u00ebrfundimit, por mendoj se p\u00ebrvoja do t\u00eb jet\u00eb e dobishme. Do t\u00eb flas p\u00ebr at\u00eb q\u00eb kam m\u00ebsuar dhe disa v\u00ebzhgime q\u00eb kam b\u00ebr\u00eb gjat\u00eb nd\u00ebrtimit t\u00eb loj\u00ebs nga e para.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox rekomandon:<\/b> Kursi praktik dyvje\u00e7ar <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\">\u00abUn\u00eb jam nj\u00eb zhvillues web PRO\u00bb<\/a><\/noindex>.<\/p>\n<p><b>Kujtojm\u00eb:<\/b> <i>p\u00ebr t\u00eb gjith\u00eb lexuesit e \u00abHabra\u00bb \u2014 zbritje prej 10,000 rublesh p\u00ebr regjistrimin n\u00eb \u00e7do kurs Skillbox me kodin promovues \u00abHabr\u00bb.<\/i><\/p><\/blockquote>\n<p><\/p>\n<h3>Pse Rust?<\/h3>\n<p>\nE zgjodha k\u00ebt\u00eb gjuh\u00eb sepse kam d\u00ebgjuar shum\u00eb mir\u00eb p\u00ebr t\u00eb dhe po shoh q\u00eb po b\u00ebhet gjithnj\u00eb e m\u00eb e njohur n\u00eb fush\u00ebn e zhvillimit t\u00eb loj\u00ebrave. Para se t\u00eb shkruaja loj\u00ebn, kisha nj\u00eb p\u00ebrvoj\u00eb t\u00eb vog\u00ebl n\u00eb zhvillimin e aplikacioneve t\u00eb thjeshta me Rust. Kjo ishte pik\u00ebrisht e mjaftueshme p\u00ebr t\u00eb ndjer\u00eb nj\u00eb liri t\u00eb caktuar gjat\u00eb shkruarjes s\u00eb loj\u00ebs.<\/p>\n<h3>Pse nj\u00eb loj\u00eb dhe cila loj\u00eb?<\/h3>\n<p>\nKrijimi i loj\u00ebrave \u00ebsht\u00eb arg\u00ebtim! Do doja q\u00eb t\u00eb ishin m\u00eb shum\u00eb arsye, por p\u00ebr projektet \u00absht\u00ebpiake\u00bb, zgjedh tema q\u00eb nuk jan\u00eb shum\u00eb t\u00eb lidhura me pun\u00ebn time t\u00eb zakonshme. Cila \u00ebsht\u00eb loja? Doja t\u00eb krijoja di\u00e7ka si nj\u00eb simulator tenisi, ku bashkohen Cities Skylines, Zoo Tycoon, Prison Architect dhe vet\u00eb tenisi. N\u00eb p\u00ebrgjith\u00ebsi, doli nj\u00eb loj\u00eb p\u00ebr nj\u00eb akademi tenisi, ku njer\u00ebzit vijn\u00eb p\u00ebr t\u00eb luajtur.<\/p>\n<h3>P\u00ebrgatitja teknike<\/h3>\n<p>\nDoja t\u00eb p\u00ebrdorja Rust, por nuk dija sakt\u00ebsisht se sa shum\u00eb duhet t\u00eb filloja nga e para. Nuk doja t\u00eb shkruaja piksel shader dhe t\u00eb p\u00ebrdorja drag-n-drop, k\u00ebshtu q\u00eb k\u00ebrkoja zgjidhje m\u00eb fleksib\u00ebl.<\/p>\n<p>Gjeta disa burime t\u00eb dobishme q\u00eb po i ndaj me ju:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"http:\/\/arewegameyet.com\/\">Are we game yet<\/a><\/noindex> \u2014 nj\u00eb list\u00eb e elementeve t\u00eb nevojshme p\u00ebr zhvillimin e loj\u00ebrave n\u00eb Rust;<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/www.reddit.com\/r\/rust_gamedev\">subreddit p\u00ebr zhvillimin e loj\u00ebrave me Rust;<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/kenney.nl\">Piksel-art falas.<\/a><\/noindex><\/li>\n<\/ul>\n<p>\nStudjova disa motor\u00eb loj\u00ebrash Rust, p\u00ebrzgjedhjen p\u00ebrfundimtare e b\u00ebra me Piston dhe ggez. K\u00ebto i kisha hasur gjat\u00eb pun\u00ebs n\u00eb projektin e m\u00ebparsh\u00ebm. N\u00eb fund zgjodha ggez, sepse m\u00eb dukej m\u00eb e p\u00ebrshtatshme p\u00ebr realizimin e nj\u00eb loje t\u00eb vog\u00ebl 2D. Struktura modulare e Piston-it \u00ebsht\u00eb shum\u00eb e nd\u00ebrlikuar p\u00ebr nj\u00eb zhvillues fillestar (ose ata q\u00eb punojn\u00eb p\u00ebr her\u00eb t\u00eb par\u00eb me Rust).<\/p>\n<h3>Struktura e loj\u00ebs<\/h3>\n<p>\nKalova pak koh\u00eb duke menduar p\u00ebr arkitektur\u00ebn e projektit. Hapi i par\u00eb \u00ebsht\u00eb t\u00eb krijoj \u00abtok\u00ebn\u00bb, njer\u00ebzit dhe k\u00ebndet e tenisit. Njer\u00ebzit duhet t\u00eb l\u00ebvizin n\u00ebp\u00ebr k\u00ebnde dhe t\u00eb presin. Lojtar\u00ebt duhet t\u00eb ken\u00eb aft\u00ebsi q\u00eb p\u00ebrmir\u00ebsohen me kalimin e koh\u00ebs. P\u00ebr m\u00eb tep\u00ebr, duhet t\u00eb ekzistoj\u00eb nj\u00eb redaktor q\u00eb lejon shtimin e njer\u00ebzve dhe k\u00ebndeve t\u00eb rinj, por kjo nuk \u00ebsht\u00eb m\u00eb falas.<\/p>\n<p>Pasi e mendova gjith\u00e7ka, fillova pun\u00ebn. <\/p>\n<h3>Krijimi i loj\u00ebs<\/h3>\n<p>\n<b>Fillimi: rrethkthes dhe abstrahime<\/b><\/p>\n<p>Mora nj\u00eb shembull nga ggez dhe arrita t\u00eb kem nj\u00eb rreth n\u00eb ekran. E \u00e7uditshme! Tani pak abstrahime. M\u00eb dukej se ishte mir\u00eb t\u00eb abstrahoja nga ideja e objektit t\u00eb loj\u00ebs. \u00c7do objekt duhet t\u00eb merret me renderim dhe p\u00ebrdit\u00ebsim, si\u00e7 \u00ebsht\u00eb treguar k\u00ebtu:<\/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>\nKy cop\u00eb kodit m\u00eb lejoi t\u00eb siguroj nj\u00eb list\u00eb t\u00eb shk\u00eblqyer objektesh q\u00eb mund t\u00eb p\u00ebrdit\u00ebsoj dhe renderoj n\u00eb nj\u00eb cik\u00ebl t\u00eb barabart\u00eb<\/p>\n<pre><code class=\"rust\">mpl event::EventHandler p\u00ebr MainState {\n    fn update(&amp;mut self, context: &amp;mut Context) -&gt; GameResult&lt;()&gt; {\n        \\\/\\\/ P\u00ebrdit\u00ebso t\u00eb gjith\u00eb objektet\n        p\u00ebr objekt n\u00eb self.objects.iter_mut() {\n            objekt.update(context)?;\n        }\n\n        Ok(())\n    }\n\n    fn draw(&amp;mut self, context: &amp;mut Context) -&gt; GameResult&lt;()&gt; {\n        graphics::clear(context);\n\n        \\\/\\\/ NDraw gjith\u00eb objektet\n        p\u00ebr objekt n\u00eb self.objects.iter_mut() {\n            objekt.draw(context)?;\n        }\n\n        graphics::present(context);\n\n        Ok(())\n    }\n}<\/code><\/pre>\n<p>\nmain.rs \u00ebsht\u00eb e nevojshme sepse aty ndodhen t\u00eb gjitha rreshtat e kodit. Kalova pak koh\u00eb p\u00ebr t\u00eb ndar\u00eb skedar\u00ebt dhe p\u00ebr t\u00eb optimizuar struktur\u00ebn e direktorive. K\u00ebtu \u00ebsht\u00eb si duket gjith\u00e7ka pas k\u00ebsaj:<br \/>\n<i>resources -&gt; k\u00ebtu jan\u00eb t\u00eb gjitha asetet (imazhet)<br \/>\nsrc<br \/>\n \u2014 entitetet<br \/>\n \u2014 game_object.rs<br \/>\n \u2014 circle.rs<br \/>\n \u2014 main.rs -&gt; cikli kryesor<\/i><\/p>\n<p><b>Njer\u00ebzit, katet dhe imazhet<\/b><\/p>\n<p>Hapi tjet\u00ebr \u00ebsht\u00eb krijimi i objektit t\u00eb loj\u00ebs Person dhe ngarkimi i imazheve. T\u00eb gjitha duhet t\u00eb nd\u00ebrtohen mbi baza flak\u00ebsh 32*32.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat me Rust p\u00ebr 24 or\u00eb: eksperience personale e zhvillimit\" src=\"\/wp-content\/uploads\/2019\/03\/265ed79e6784ef0180cfdc5aa8d96a4c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Fushat e tenisit<\/b><\/p>\n<p>Pas hulumtimit se si duken fushat e tenis, vendosa t\u00eb b\u00ebj nd\u00ebrtimin e tyre nga flak\u00eb 4*2. Fillimisht mund t\u00eb kisha b\u00ebr\u00eb nj\u00eb imazh t\u00eb till\u00eb ose t\u00eb bashkoja 8 flak\u00eb t\u00eb ve\u00e7anta. Por m\u00eb von\u00eb kuptova se ishin t\u00eb nevojshme vet\u00ebm dy flak\u00eb unike, dhe ja pse.<\/p>\n<p>Ne kemi gjithsej dy flak\u00eb t\u00eb tilla: 1 dhe 2.<\/p>\n<p>\u00c7do seksion i fush\u00ebs p\u00ebrb\u00ebhet nga flak\u00eb 1 ose flak\u00eb 2. Ato mund t\u00eb pozicionohen si zakonisht ose t\u00eb jen\u00eb t\u00eb kthyer n\u00eb 180 grad\u00eb.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat me Rust p\u00ebr 24 or\u00eb: eksperience personale e zhvillimit\" src=\"\/wp-content\/uploads\/2019\/03\/90d07caea0dee8673ada5d44963ab347.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>M\u00ebnyra kryesore e nd\u00ebrtimit<\/b><\/p>\n<p>Pas arritjes s\u00eb renderimit t\u00eb fushave, njer\u00ebzve dhe hartave, kuptova se m\u00eb nevojitej edhe nj\u00eb m\u00ebnyr\u00eb baz\u00eb nd\u00ebrtimi. E realizova k\u00ebshtu: kur shtypet butoni \u2014 objekti \u00ebsht\u00eb i zgjedhur dhe klikimi e vendos at\u00eb n\u00eb vendin e duhur. Pra, butoni 1 lejon zgjedhjen e fush\u00ebs, nd\u00ebrsa butoni 2 lejon zgjedhjen e lojtarit.<\/p>\n<p>Por duhet t\u00eb kujtoj se \u00e7far\u00eb do t\u00eb thot\u00eb 1 dhe 2, k\u00ebshtu q\u00eb shtova nj\u00eb wireframe p\u00ebr ta b\u00ebr\u00eb t\u00eb qart\u00eb se cili objekt \u00ebsht\u00eb i zgjedhur. K\u00ebtu \u00ebsht\u00eb si duket.<\/p>\n<p><img decoding=\"async\" alt=\"Loj\u00ebrat me Rust p\u00ebr 24 or\u00eb: eksperience personale e zhvillimit\" src=\"\/wp-content\/uploads\/2019\/03\/09b92828fb9b8d4bfa5d5178ca99613c.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<b>Pyetje p\u00ebr arkitektur\u00ebn dhe refaktorizimin<\/b><\/p>\n<p>Tani kam kam kam kam kam, por t\u00eb punojn\u00eb wireframes, \u00e7do entitet objekti duhet t\u00eb informohet n\u00ebse objektet vet\u00eb jan\u00eb n\u00eb modin e demonstrimit, ose thjesht \u00ebsht\u00eb vizatuar nj\u00eb korniz\u00eb. Kjo nuk \u00ebsht\u00eb shum\u00eb e p\u00ebrshtatshme.<\/p>\n<p>M\u00eb duket se duhet t\u00eb rip\u00ebrcaktohet arkitektura q\u00eb t\u00eb identifikohen disa kufizime:<\/p>\n<ul>\n<li>prania e nj\u00eb entiteti q\u00eb i tregon dhe p\u00ebrdit\u00ebson vetveten \u00ebsht\u00eb nj\u00eb problem, pasi ky entitet nuk do t\u00eb mund \"ta dij\u00eb\" se \u00e7far\u00eb duhet t\u00eb renderoj\u00eb - imazhi dhe wireframe;<\/li>\n<li>mungesa e nj\u00eb instrumenti p\u00ebr ndarjen e pronave dhe sjelljes nd\u00ebrmjet entiteteve t\u00eb ve\u00e7anta (shembuj - prona is_build_mode ose vizatimi i sjelljes). Mund t\u00eb p\u00ebrdorej trash\u00ebgimia, megjith\u00ebse n\u00eb Rust nuk ka nj\u00eb m\u00ebnyr\u00eb normale p\u00ebr ta realizuar k\u00ebt\u00eb. Ajo q\u00eb m\u00eb nevojitej me t\u00eb v\u00ebrtet\u00eb ishte kompozimi;<\/li>\n<li>nj\u00eb instrument p\u00ebr interaksionin e entiteteve me nj\u00ebri-tjetrin ishte i nevojshmi, p\u00ebr t'i caktuar njer\u00ebzit n\u00eb l\u00ebndina;<\/li>\n<li>entitetet vet\u00eb p\u00ebrb\u00ebnin nj\u00eb p\u00ebrzierje t\u00eb t\u00eb dh\u00ebnave dhe logjik\u00ebs, e cila shpejt dilte jasht\u00eb kontrollit.<\/li>\n<\/ul>\n<p><\/p>\n<blockquote><p><i>Kam b\u00ebr\u00eb nj\u00eb studim t\u00eb m\u00ebtejsh\u00ebm dhe kam zbuluar arkitektur\u00ebn <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Entity_component_system\">ECS \u2014 Sistemi i Komponent\u00ebve t\u00eb Entiteteve<\/a><\/noindex>, i cili p\u00ebrdoret zakonisht n\u00eb loj\u00ebra. Ja p\u00ebrpar\u00ebsit\u00eb e ECS:<\/p>\n<ul>\n<li>t\u00eb dh\u00ebnat jan\u00eb t\u00eb ndara nga logjika;<\/li>\n<li>kompozimi n\u00eb vend t\u00eb trash\u00ebgimis\u00eb;<\/li>\n<li>arkitektur\u00eb e orientuar drejt t\u00eb dh\u00ebnave.<\/li>\n<\/ul>\n<p><\/i><\/p><\/blockquote>\n<p>\nP\u00ebr ECS karakterizohen tre koncepte baz\u00eb:<\/p>\n<ul>\n<li>entitetet \u2014 tip objekti, n\u00eb t\u00eb cilin referohet identifikuesi (mund t\u00eb jet\u00eb nj\u00eb lojtar, nj\u00eb top ose di\u00e7ka tjet\u00ebr);<\/li>\n<li>komponent\u00ebt \u2014 p\u00ebrb\u00ebr\u00ebsit e entiteteve. Shembuj \u2014 komponenti i renderimit, pozita dhe t\u00eb tjera. K\u00ebto jan\u00eb depo t\u00eb t\u00eb dh\u00ebnave;<\/li>\n<li>sistemet \u2014 ato p\u00ebrdorin si objektet ashtu edhe komponent\u00ebt, p\u00ebrve\u00e7se p\u00ebrmbajn\u00eb sjelljen dhe logjik\u00ebn, t\u00eb cilat bazohen n\u00eb k\u00ebto t\u00eb dh\u00ebna. Shembuj \u2014 sistemi i renderimit, q\u00eb kalon p\u00ebrmes t\u00eb gjitha entiteteve me komponent\u00eb p\u00ebr renderim dhe merret me vizatimin.<\/li>\n<\/ul>\n<p>\nPas studimit \u00ebsht\u00eb b\u00ebr\u00eb e qart\u00eb se ECS zgjidh problemet si:<\/p>\n<ul>\n<li>aplikimi i kompozimit n\u00eb vend t\u00eb trash\u00ebgimis\u00eb p\u00ebr organizimin sistematik t\u00eb entiteteve; <\/li>\n<li>\u00e7lirimi nga kaosi i kodit p\u00ebrmes sistemeve t\u00eb menaxhimit; <\/li>\n<li>p\u00ebrdorimi i metodave si is_build_mode p\u00ebr t\u00eb ruajtur logjik\u00ebn e wireframe n\u00eb t\u00eb nj\u00ebjtin vend - n\u00eb sistemin e renderimit.<\/li>\n<\/ul>\n<p>\nJa \u00e7far\u00eb \u00ebsht\u00eb arritur pas implementimit t\u00eb ECS.<\/p>\n<p><i>resources -&gt; k\u00ebtu jan\u00eb t\u00eb gjitha asetet (imazhet)<br \/>\nsrc<br \/>\n \u2014 komponent\u00ebt<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 burimet<br \/>\n \u2014 mouse.rs<br \/>\n \u2014 sistemet<br \/>\n \u2014 rendering.rs<br \/>\n \u2014 constants.rs<br \/>\n \u2014 utils.rs<br \/>\n \u2014 world_factory.rs -&gt; funksionet e fabrik\u00ebs s\u00eb bot\u00ebs<br \/>\n \u2014 main.rs -&gt; cikli kryesor<\/i><\/p>\n<h3>Caktojm\u00eb njer\u00ebzit n\u00eb fushat<\/h3>\n<p>\nECS e b\u00ebri jet\u00ebn m\u00eb t\u00eb leht\u00eb. Tashm\u00eb pata nj\u00eb rrug\u00eb sistematike p\u00ebr t\u00eb shtuar t\u00eb dh\u00ebna n\u00eb entitete dhe p\u00ebr t\u00eb shtuar logjik\u00eb t\u00eb bazuar n\u00eb k\u00ebto t\u00eb dh\u00ebna. Kjo, nga ana tjet\u00ebr, mund\u00ebsoi organizimin e shp\u00ebrndarjes s\u00eb njer\u00ebzve n\u00eb fusha.<\/p>\n<p>\u00c7far\u00eb b\u00ebra:<\/p>\n<ul>\n<li>shtova t\u00eb dh\u00ebnat mbi fushat e caktuara n\u00eb Person;<\/li>\n<li>shtova t\u00eb dh\u00ebnat mbi njer\u00ebzit e shp\u00ebrndar\u00eb n\u00eb TennisCourt;<\/li>\n<li>shtova sistemin e p\u00ebrzgjedhjes s\u00eb fushave, i cili analizojn\u00eb njer\u00ebzit dhe lokacionet, zbulon fushat e disponueshme dhe shp\u00ebrndan lojtar\u00ebt mbi to;<\/li>\n<li>shtova sistemin e l\u00ebvizjes s\u00eb personave, i cili i k\u00ebrkon njer\u00ebzit e caktuar n\u00eb fusha, dhe n\u00ebse ata nuk jan\u00eb aty, d\u00ebrgon njer\u00ebzit aty ku nevojitet.<\/li>\n<\/ul>\n<p>\n<img decoding=\"async\" alt=\"Loj\u00ebrat me Rust p\u00ebr 24 or\u00eb: eksperience personale e zhvillimit\" src=\"\/wp-content\/uploads\/2019\/03\/f2e4632de2cb9d1c3ec7c9d9310b8170.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<h3>T\u00eb shohim p\u00ebrfundimet<\/h3>\n<p>\nM\u00eb p\u00eblqeu shum\u00eb t\u00eb punoja mbi k\u00ebt\u00eb loj\u00eb t\u00eb thjesht\u00eb. M\u00eb shum\u00eb se kaq, jam e k\u00ebnaqur q\u00eb p\u00ebrdora Rust p\u00ebr ta shkruar, sepse:<\/p>\n<ul>\n<li>Rust ofron at\u00eb q\u00eb nevojitet;<\/li>\n<li>ka dokumentacion t\u00eb shk\u00eblqyer, Rust \u00ebsht\u00eb shum\u00eb eleganten;<\/li>\n<li>q\u00ebndrueshm\u00ebria \u00ebsht\u00eb e shk\u00eblqyer;<\/li>\n<li>nuk \u00ebsht\u00eb e nevojshme t\u00eb p\u00ebrdorim klonimin, kopjimin ose veprime t\u00eb ngjashme, gj\u00eb q\u00eb shpesh e b\u00ebja n\u00eb C++;<\/li>\n<li>Options jan\u00eb shum\u00eb t\u00eb p\u00ebrshtatshme p\u00ebr t'u punuar, gjithashtu trajtojn\u00eb shkaktar\u00ebt e gabimeve n\u00eb m\u00ebnyr\u00eb t\u00eb shk\u00eblqyer;<\/li>\n<li>n\u00ebse projekti arrin t\u00eb kompiloj\u00eb, n\u00eb 99% t\u00eb rasteve ai funksionon ashtu si\u00e7 duhet. Mesazhet e gabimeve t\u00eb kompilerit, mendoj se jan\u00eb m\u00eb t\u00eb mirat q\u00eb kam par\u00eb.<\/li>\n<\/ul>\n<p>\nZhvillimi i loj\u00ebrave n\u00eb Rust \u00ebsht\u00eb vet\u00ebm duke filluar. Por tashm\u00eb ekziston nj\u00eb komunitet stabil dhe mjaft i madh, q\u00eb po punon p\u00ebr ta b\u00ebr\u00eb Rust t\u00eb hapur p\u00ebr t\u00eb gjith\u00eb. Prandaj, shikoj p\u00ebrpara me optimiz\u00ebm p\u00ebr t\u00eb ardhmen e gjuh\u00ebs, duke pritur me padurim p\u00ebr rezultatet e pun\u00ebs son\u00eb t\u00eb p\u00ebrbashk\u00ebt.<\/p>\n<blockquote><p><b>Skillbox rekomandon:<\/b><\/p>\n<ul>\n<li>Kurs online <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\">\u00abProfesioni zhvillues frontend\u00bb<\/a><\/noindex>.<\/li>\n<li>Kurs praktik <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\">\u00abMobil developer PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Kurs praktik nj\u00ebvje\u00e7ar <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\">\u00abZhvillues PHP nga 0 n\u00eb PRO\u00bb<\/a><\/noindex>.<\/li>\n<\/ul>\n<p>\n<\/p><\/blockquote>\n<p>Burimi: <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.2 - 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\/sq\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\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\/sq\/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\udd47Loj\u00eb n\u00eb Rust p\u00ebr 24 or\u00eb: p\u00ebrvoja personale e zhvillimit | ProHoster","description":"N\u00eb k\u00ebt\u00eb artikull do t\u00eb flas p\u00ebr p\u00ebrvoj\u00ebn time personale.","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/igra-na-rust-za-24-chasa-lichnyj-opyt-razrabotki","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","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\/sq\/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\/sq\/wp-json\/wp\/v2\/posts\/29846","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=29846"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/29846\/revisions"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=29846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=29846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=29846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}