Π˜Π³Ρ€Π° Π½Π° Rust Π·Π° 24 часа: ΠΎΠΏΠΈΡ‚ Π·Π° Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

Π˜Π³Ρ€Π° Π½Π° Rust Π·Π° 24 часа: ΠΎΠΏΠΈΡ‚ Π·Π° Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

Π’ Ρ‚Π°Π·ΠΈ статия Ρ‰Π΅ говоря Π·Π° моя Π»ΠΈΡ‡Π΅Π½ ΠΎΠΏΠΈΡ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΌΠ°Π»ΠΊΠ° ΠΈΠ³Ρ€Π° Π² Rust. Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° Ρ€Π°Π±ΠΎΡ‚Π΅Ρ‰Π° вСрсия ΠΎΡ‚Π½Π΅ ΠΎΠΊΠΎΠ»ΠΎ 24 часа (ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ… Π²Π΅Ρ‡Π΅Ρ€ ΠΈΠ»ΠΈ ΠΏΡ€Π΅Π· ΠΏΠΎΡ‡ΠΈΠ²Π½ΠΈΡ‚Π΅ Π΄Π½ΠΈ). Π˜Π³Ρ€Π°Ρ‚Π° Π΄Π°Π»Π΅Ρ‡ Π½Π΅ Π΅ Π·Π°Π²ΡŠΡ€ΡˆΠ΅Π½Π°, Π½ΠΎ мисля, Ρ‡Π΅ ΠΎΠΏΠΈΡ‚ΡŠΡ‚ Ρ‰Π΅ бъдС Π²ΡŠΠ·Π½Π°Π³Ρ€Π°ΠΆΠ΄Π°Π²Π°Ρ‰. Π©Π΅ сподСля ΠΊΠ°ΠΊΠ²ΠΎ Π½Π°ΡƒΡ‡ΠΈΡ… ΠΈ някои наблюдСния, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈΡ…, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ… ΠΈΠ³Ρ€Π°Ρ‚Π° ΠΎΡ‚ Π½ΡƒΠ»Π°Ρ‚Π°.

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°: Π”Π²ΡƒΠ³ΠΎΠ΄ΠΈΡˆΠ΅Π½ практичСски курс β€žΠΠ· съм PRO ΡƒΠ΅Π± Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊβ€œ.

НапомнямС Π²ΠΈ: Π·Π° всички Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ Π½Π° "Habr" - ΠΎΡ‚ΡΡ‚ΡŠΠΏΠΊΠ° ΠΎΡ‚ 10 000 Ρ€ΡƒΠ±Π»ΠΈ ΠΏΡ€ΠΈ записванС във всСки курс Skillbox, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ промоционалния ΠΊΠΎΠ΄ Π½Π° "Habr".

Π—Π°Ρ‰ΠΎ Rust?

Π˜Π·Π±Ρ€Π°Ρ… Ρ‚ΠΎΠ·ΠΈ Π΅Π·ΠΈΠΊ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ съм Ρ‡ΡƒΠ²Π°Π» ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€ΠΈ Π½Π΅Ρ‰Π° Π·Π° Π½Π΅Π³ΠΎ ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌ, Ρ‡Π΅ става всС ΠΏΠΎ-популярСн Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΈΠ³Ρ€ΠΈ. ΠŸΡ€Π΅Π΄ΠΈ Π΄Π° напиша ΠΈΠ³Ρ€Π°Ρ‚Π°, ΠΈΠΌΠ°Ρ… ΠΌΠ°Π»ΠΊΠΎ ΠΎΠΏΠΈΡ‚ Π² Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° прости прилоТСния Π² Rust. Π’ΠΎΠ²Π° бСшС Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ, Π·Π° Π΄Π° ΠΌΠΈ Π΄Π°Π΄Π΅ усСщанС Π·Π° свобода, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ пиша ΠΈΠ³Ρ€Π°Ρ‚Π°.

Π—Π°Ρ‰ΠΎ ΠΈΠ³Ρ€Π°Ρ‚Π° ΠΈ какъв Π²ΠΈΠ΄ ΠΈΠ³Ρ€Π°?

Π‘ΡŠΠ·Π΄Π°Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΈΠ³Ρ€ΠΈ Π΅ Π·Π°Π±Π°Π²Π½ΠΎ! Иска ΠΌΠΈ сС Π΄Π° ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, Π½ΠΎ Π·Π° β€žΠ΄ΠΎΠΌΠ°ΡˆΠ½ΠΈβ€œ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈ ΠΈΠ·Π±ΠΈΡ€Π°ΠΌ Ρ‚Π΅ΠΌΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π½Π΅ са Ρ‚Π²ΡŠΡ€Π΄Π΅ тясно ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½Π°Ρ‚Π° ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Π°. ΠΊΠ°ΠΊΠ²Π° ΠΈΠ³Ρ€Π° Π΅ Ρ‚ΠΎΠ²Π° Π˜ΡΠΊΠ°Ρ… Π΄Π° направя Π½Π΅Ρ‰ΠΎ ΠΊΠ°Ρ‚ΠΎ тСнис симулатор, ΠΊΠΎΠΉΡ‚ΠΎ ΠΊΠΎΠΌΠ±ΠΈΠ½ΠΈΡ€Π° Cities Skylines, Zoo Tycoon, Prison Architect ΠΈ самия тСнис. ΠšΠ°Ρ‚ΠΎ цяло сС ΠΎΠΊΠ°Π·Π° ΠΈΠ³Ρ€Π° Π·Π° тСнис акадСмия, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΈΠ΄Π²Π°Ρ‚ Π΄Π° играят.

ВСхничСско ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠ΅

Π˜ΡΠΊΠ°Ρ… Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Rust, Π½ΠΎ Π½Π΅ Π·Π½Π°Π΅Ρ… ΠΊΠΎΠ»ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Ρ‰Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ°, Π·Π° Π΄Π° Π·Π°ΠΏΠΎΡ‡Π½Π°. НС исках Π΄Π° пиша пиксСлни ΡˆΠ΅ΠΉΠ΄ΡŠΡ€ΠΈ ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ drag-n-drop, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‚ΡŠΡ€ΡΠ΅Ρ… Π½Π°ΠΉ-Π³ΡŠΠ²ΠΊΠ°Π²ΠΈΡ‚Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ.

НамСрих ΠΏΠΎΠ»Π΅Π·Π½ΠΈ рСсурси, ΠΊΠΎΠΈΡ‚ΠΎ сподСлям с вас:

ΠŸΡ€ΠΎΡƒΡ‡ΠΈΡ… няколко ΠΈΠ³Ρ€Π°Π»Π½ΠΈ двигатСля Π½Π° Rust, ΠΊΠ°Ρ‚ΠΎ Π² ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΈΠ·Π±Ρ€Π°Ρ… Piston ΠΈ ggez. ΠŸΠΎΠΏΠ°Π΄Π½Π°Ρ… Π½Π° тях, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅Ρ… ΠΏΠΎ ΠΏΡ€Π΅Π΄ΠΈΡˆΠ΅Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚. Π’ ΠΊΡ€Π°ΠΉΠ½Π° смСтка ΠΈΠ·Π±Ρ€Π°Ρ… ggez, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΠΌΠΈ сС стори ΠΏΠΎ-подходящ Π·Π° внСдряванС Π½Π° ΠΌΠ°Π»ΠΊΠ° 2D ΠΈΠ³Ρ€Π°. ΠœΠΎΠ΄ΡƒΠ»Π½Π°Ρ‚Π° структура Π½Π° Piston Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ слоТна Π·Π° Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‰ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ (ΠΈΠ»ΠΈ някой, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ с Rust Π·Π° ΠΏΡŠΡ€Π²ΠΈ ΠΏΡŠΡ‚).

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° Π½Π° ΠΈΠ³Ρ€Π°Ρ‚Π°

ΠŸΡ€Π΅ΠΊΠ°Ρ€Π°Ρ… извСстно Π²Ρ€Π΅ΠΌΠ΅ Π² обмислянС Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° Π½Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°. ΠŸΡŠΡ€Π²Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ "зСмя", Ρ…ΠΎΡ€Π° ΠΈ тСнис ΠΊΠΎΡ€Ρ‚ΠΎΠ²Π΅. Π₯ΠΎΡ€Π°Ρ‚Π° трябва Π΄Π° сС Π΄Π²ΠΈΠΆΠ°Ρ‚ ΠΈΠ· ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π° ΠΈ Π΄Π° Ρ‡Π°ΠΊΠ°Ρ‚. Π˜Π³Ρ€Π°Ρ‡ΠΈΡ‚Π΅ трябва Π΄Π° ΠΈΠΌΠ°Ρ‚ умСния, ΠΊΠΎΠΈΡ‚ΠΎ сС подобряват с Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ. ОсвСн Ρ‚ΠΎΠ²Π° трябва Π΄Π° ΠΈΠΌΠ° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° добавятС Π½ΠΎΠ²ΠΈ Ρ…ΠΎΡ€Π° ΠΈ ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π°, Π½ΠΎ Ρ‚ΠΎΠ²Π° Π²Π΅Ρ‡Π΅ Π½Π΅ Π΅ Π±Π΅Π·ΠΏΠ»Π°Ρ‚Π½ΠΎ.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ обмислих всичко, сС Π·Π°Ρ…Π²Π°Π½Π°Ρ… Π·Π° Ρ€Π°Π±ΠΎΡ‚Π°.

БъздаванС Π½Π° ΠΈΠ³Ρ€Π°

Начало: ΠšΡ€ΡŠΠ³ΠΎΠ²Π΅ ΠΈ абстракции

Π’Π·Π΅Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ ggez ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ… ΠΊΡ€ΡŠΠ³ Π½Π° Π΅ΠΊΡ€Π°Π½Π°. чудСсно! Π‘Π΅Π³Π° ΠΌΠ°Π»ΠΊΠΎ абстракции. ΠœΠΈΡΠ»Π΅Ρ…, Ρ‡Π΅ Π±ΠΈ Π±ΠΈΠ»ΠΎ Ρ…ΡƒΠ±Π°Π²ΠΎ Π΄Π° сС абстрахирам ΠΎΡ‚ идСята Π·Π° ΠΎΠ±Π΅ΠΊΡ‚ Π½Π° ΠΈΠ³Ρ€Π°. ВсСки ΠΎΠ±Π΅ΠΊΡ‚ трябва Π΄Π° бъдС ΠΈΠ·ΠΎΠ±Ρ€Π°Π·Π΅Π½ ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅ посочСно Ρ‚ΡƒΠΊ:

// the game object trait
trait GameObject {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()>;
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()>;
}
 
// a specific game object - Circle
struct Circle {
    position: Point2,
}
 
 impl Circle {
    fn new(position: Point2) -> Circle {
        Circle { position }
    }
}
impl GameObject for Circle {
    fn update(&mut self, _ctx: &mut Context) -> GameResult<()> {
        Ok(())
    }
    fn draw(&mut self, ctx: &mut Context) -> GameResult<()> {
        let circle =
            graphics::Mesh::new_circle(ctx, graphics::DrawMode::Fill, self.position, 100.0, 2.0)?;
 
         graphics::draw(ctx, &circle, na::Point2::new(0.0, 0.0), 0.0)?;
        Ok(())
    }
}

Π’Π°Π·ΠΈ част ΠΎΡ‚ ΠΊΠΎΠ΄Π° ΠΌΠΈ Π΄Π°Π΄Π΅ Ρ…ΡƒΠ±Π°Π² списък с ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ³Π° Π΄Π° Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π°ΠΌ ΠΈ изобразя Π² ΡΡŠΡ‰ΠΎ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° Ρ…ΡƒΠ±Π°Π² Ρ†ΠΈΠΊΡŠΠ».

mpl event::EventHandler for MainState {
    fn update(&mut self, context: &mut Context) -> GameResult<()> {
        // Update all objects
        for object in self.objects.iter_mut() {
            object.update(context)?;
        }
 
        Ok(())
    }
 
    fn draw(&mut self, context: &mut Context) -> GameResult<()> {
        graphics::clear(context);
 
        // Draw all objects
        for object in self.objects.iter_mut() {
            object.draw(context)?;
        }
 
        graphics::present(context);
 
        Ok(())
    }
}

main.rs Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° всички Ρ€Π΅Π΄ΠΎΠ²Π΅ ΠΊΠΎΠ΄. ΠžΡ‚Π΄Π΅Π»ΠΈΡ… ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° раздСлянС Π½Π° Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° структурата Π½Π° дирСкторията. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ изглСТдашС слСд Ρ‚ΠΎΠ²Π°:
рСсурси -> Ρ‚ΡƒΠΊ са всички Π°ΠΊΡ‚ΠΈΠ²ΠΈ (изобраТСния)
SRC
- образувания
β€” game_object.rs
β€” ΠΊΡ€ΡŠΠ³.rs
β€” main.rs -> основСн Ρ†ΠΈΠΊΡŠΠ»

Π₯ΠΎΡ€Π°, ΠΏΠΎΠ΄ΠΎΠ²Π΅ ΠΈ изобраТСния

Π‘Π»Π΅Π΄Π²Π°Ρ‰Π°Ρ‚Π° ΡΡ‚ΡŠΠΏΠΊΠ° Π΅ Π΄Π° ΡΡŠΠ·Π΄Π°Π΄Π΅Ρ‚Π΅ ΠΎΠ±Π΅ΠΊΡ‚ Π·Π° ΠΈΠ³Ρ€Π° Person ΠΈ Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ изобраТСния. Всичко трябва Π΄Π° бъдС ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΎ Π½Π° Π±Π°Π·Π°Ρ‚Π° Π½Π° ΠΏΠ»ΠΎΡ‡ΠΊΠΈ 32*32.

Π˜Π³Ρ€Π° Π½Π° Rust Π·Π° 24 часа: ΠΎΠΏΠΈΡ‚ Π·Π° Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

ВСнис ΠΊΠΎΡ€Ρ‚ΠΎΠ²Π΅

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΎΡƒΡ‡ΠΈΡ… ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ‚ тСнис ΠΊΠΎΡ€Ρ‚ΠΎΠ²Π΅Ρ‚Π΅, Ρ€Π΅ΡˆΠΈΡ… Π΄Π° Π³ΠΈ направя ΠΎΡ‚ ΠΏΠ»ΠΎΡ‡ΠΊΠΈ 4*2. ΠŸΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ бСшС възмоТно Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ с Ρ‚Π°ΠΊΡŠΠ² Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΠ»ΠΈ Π΄Π° сС сглобят 8 ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΏΠ»ΠΎΡ‡ΠΊΠΈ. Но Ρ‚ΠΎΠ³Π°Π²Π° Ρ€Π°Π·Π±Ρ€Π°Ρ…, Ρ‡Π΅ са Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΈ само Π΄Π²Π΅ ΡƒΠ½ΠΈΠΊΠ°Π»Π½ΠΈ ΠΏΠ»ΠΎΡ‡ΠΊΠΈ ΠΈ Π΅Ρ‚ΠΎ Π·Π°Ρ‰ΠΎ.

ΠžΠ±Ρ‰ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π΄Π²Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° ΠΏΠ»ΠΎΡ‡ΠΊΠΈ: 1 ΠΈ 2.

Всяка сСкция Π½Π° ΠΈΠ³Ρ€ΠΈΡ‰Π΅Ρ‚ΠΎ сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ ΠΏΠ»ΠΎΡ‡ΠΊΠ° 1 ΠΈΠ»ΠΈ ΠΏΠ»ΠΎΡ‡ΠΊΠ° 2. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΎ ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΡ€Π½Π°Ρ‚ΠΈ Π½Π° 180 градуса.

Π˜Π³Ρ€Π° Π½Π° Rust Π·Π° 24 часа: ΠΎΠΏΠΈΡ‚ Π·Π° Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

ОсновСн Ρ€Π΅ΠΆΠΈΠΌ Π½Π° конструиранС (ΠΌΠΎΠ½Ρ‚Π°ΠΆ).

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ успях Π΄Π° постигна изобразяванС Π½Π° сайтовС, Ρ…ΠΎΡ€Π° ΠΈ ΠΊΠ°Ρ€Ρ‚ΠΈ, ΠΎΡΡŠΠ·Π½Π°Ρ…, Ρ‡Π΅ Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ ΠΈ основСн Ρ€Π΅ΠΆΠΈΠΌ Π½Π° сглобяванС. Π Π΅Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ… Π³ΠΎ Ρ‚Π°ΠΊΠ°: ΠΏΡ€ΠΈ натисканС Π½Π° Π±ΡƒΡ‚ΠΎΠ½Π° ΠΎΠ±Π΅ΠΊΡ‚ΡŠΡ‚ сС ΠΈΠ·Π±ΠΈΡ€Π° ΠΈ Ρ‰Ρ€Π°ΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ Π³ΠΎ поставя Π½Π° ΠΆΠ΅Π»Π°Π½ΠΎΡ‚ΠΎ място. И Ρ‚Π°ΠΊΠ°, Π±ΡƒΡ‚ΠΎΠ½ 1 Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΊΠΎΡ€Ρ‚, Π° Π±ΡƒΡ‚ΠΎΠ½ 2 Π²ΠΈ позволява Π΄Π° ΠΈΠ·Π±Π΅Ρ€Π΅Ρ‚Π΅ ΠΈΠ³Ρ€Π°Ρ‡.

Но всС ΠΎΡ‰Π΅ трябва Π΄Π° ΠΏΠΎΠΌΠ½ΠΈΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°Ρ‚ 1 ΠΈ 2, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΡ… Ρ‚Π΅Π»Π΅Π½Π° Ρ€Π°ΠΌΠΊΠ°, Π·Π° Π΄Π° станС ясно ΠΊΠΎΠΉ ΠΎΠ±Π΅ΠΊΡ‚ Π΅ ΠΈΠ·Π±Ρ€Π°Π½. Π•Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°.

Π˜Π³Ρ€Π° Π½Π° Rust Π·Π° 24 часа: ΠΎΠΏΠΈΡ‚ Π·Π° Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

АрхитСктура ΠΈ Π²ΡŠΠΏΡ€ΠΎΡΠΈ Π·Π° Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ½Π³

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌ няколко ΠΎΠ±Π΅ΠΊΡ‚Π° Π·Π° ΠΈΠ³Ρ€Π°: Ρ…ΠΎΡ€Π°, ΠΊΠΎΡ€Ρ‚ΠΎΠ²Π΅ ΠΈ ΠΏΠΎΠ΄ΠΎΠ²Π΅. Но Π·Π° Π΄Π° работят Ρ‚Π΅Π»Π΅Π½ΠΈΡ‚Π΅ Ρ€Π°ΠΌΠΊΠΈ, Π½Π° всСки ΠΎΠ±Π΅ΠΊΡ‚ трябва Π΄Π° сС ΠΊΠ°ΠΆΠ΅ Π΄Π°Π»ΠΈ самитС ΠΎΠ±Π΅ΠΊΡ‚ΠΈ са Π² дСмонстрационСн Ρ€Π΅ΠΆΠΈΠΌ ΠΈΠ»ΠΈ Ρ€Π°ΠΌΠΊΠ°Ρ‚Π° просто Π΅ Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½Π°. Π’ΠΎΠ²Π° Π½Π΅ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡƒΠ΄ΠΎΠ±Π½ΠΎ.

Π‘Ρ‚Ρ€ΡƒΠ²Π°ΡˆΠ΅ ΠΌΠΈ сС, Ρ‡Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° трябва Π΄Π° бъдС прСосмислСна ΠΏΠΎ Π½Π°Ρ‡ΠΈΠ½, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π·ΠΊΡ€ΠΈΠ²Π° някои ограничСния:

  • НаличиСто Π½Π° ΠΎΠ±Π΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ сам сС изобразява ΠΈ обновява, Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ няма Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° β€žΠ·Π½Π°Π΅β€œ ΠΊΠ°ΠΊΠ²ΠΎ трябва Π΄Π° изобразява – ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Ρ‚Π΅Π»Π΅Π½Π° Ρ€Π°ΠΌΠΊΠ°;
  • липса Π½Π° инструмСнт Π·Π° ΠΎΠ±ΠΌΠ΅Π½ Π½Π° свойства ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ свойството is_build_mode ΠΈΠ»ΠΈ Ρ€Π΅Π½Π΄ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅). Π‘ΠΈ Π±ΠΈΠ»ΠΎ възмоТно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° наслСдяванС, Π²ΡŠΠΏΡ€Π΅ΠΊΠΈ Ρ‡Π΅ няма ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ Π² Rust. Π’ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ наистина сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ…, бСшС ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ;
  • бСшС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ инструмСнт Π·Π° взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ субСктитС Π·Π° Π½Π°Π·Π½Π°Ρ‡Π°Π²Π°Π½Π΅ Π½Π° Ρ…ΠΎΡ€Π° Π² ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π°;
  • самитС ΠΎΠ±Π΅ΠΊΡ‚ΠΈ бяха смСсица ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°, която Π±ΡŠΡ€Π·ΠΎ ΠΈΠ·Π»Π΅Π·Π΅ извън ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ».

Направих ΠΎΡ‰Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅ ΠΈ ΠΎΡ‚ΠΊΡ€ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° ECS - Entity Component System, ΠΊΠΎΠΉΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΠΈΠ³Ρ€ΠΈΡ‚Π΅. Π•Ρ‚ΠΎ прСдимствата Π½Π° ECS:

  • Π΄Π°Π½Π½ΠΈΡ‚Π΅ са ΠΎΡ‚Π΄Π΅Π»Π΅Π½ΠΈ ΠΎΡ‚ Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π°;
  • композиция вмСсто наслСдство;
  • ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€Π°Π½Π° към Π΄Π°Π½Π½ΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π°.

ECS сС Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΈΠ·ΠΈΡ€Π° с Ρ‚Ρ€ΠΈ основни ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ:

  • entities - Ρ‚ΠΈΠΏΡŠΡ‚ ΠΎΠ±Π΅ΠΊΡ‚, към ΠΊΠΎΠΉΡ‚ΠΎ сС отнася ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΡŠΡ‚ (ΠΌΠΎΠΆΠ΅ Π΄Π° Π΅ ΠΈΠ³Ρ€Π°Ρ‡, Ρ‚ΠΎΠΏΠΊΠ° ΠΈΠ»ΠΈ Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ);
  • ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ - ΡΡŠΡ‰Π½ΠΎΡΡ‚ΠΈΡ‚Π΅ са ΡΡŠΡΡ‚Π°Π²Π΅Π½ΠΈ ΠΎΡ‚ тях. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ - Ρ€Π΅Π½Π΄ΠΈΡ€Π°Ρ‰ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚, мСстополоТСния ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ. Π’ΠΎΠ²Π° са складовС Π·Π° Π΄Π°Π½Π½ΠΈ;
  • систСми - Ρ‚Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠ°ΠΊΡ‚ΠΎ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, Ρ‚Π°ΠΊΠ° ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ, плюс ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ°, ΠΊΠΎΠΈΡ‚ΠΎ сС основават Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π΅ систСма Π·Π° изобразяванС, която ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· всички ΠΎΠ±Π΅ΠΊΡ‚ΠΈ с ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ Π·Π° изобразяванС ΠΈ ΠΈΠ·Π²ΡŠΡ€ΡˆΠ²Π° изобразяванСто.

Π‘Π»Π΅Π΄ ΠΏΡ€ΠΎΡƒΡ‡Π²Π°Π½Π΅Ρ‚ΠΎ ΠΌΡƒ стана ясно, Ρ‡Π΅ ECS Ρ€Π΅ΡˆΠ°Π²Π° слСднитС ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ:

  • ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½ΠΈΠ΅ вмСсто наслСдяванС Π·Π° систСмно ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ;
  • ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π°Π½Π΅ Π½Π° Π±ΡŠΡ€ΠΊΠ°Π½ΠΈΡ ΠΊΠΎΠ΄ Ρ‡Ρ€Π΅Π· систСми Π·Π° ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅;
  • ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΊΠ°Ρ‚ΠΎ is_build_mode, Π·Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡ‚Π΅ wireframe Π»ΠΎΠ³ΠΈΠΊΠ°Ρ‚Π° Π½Π° Π΅Π΄Π½ΠΎ ΠΈ ΡΡŠΡ‰ΠΎ място - Π² систСмата Π·Π° изобразяванС.

Π’ΠΎΠ²Π° сС случи слСд Π²ΡŠΠ²Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ECS.

рСсурси -> Ρ‚ΡƒΠΊ са всички Π°ΠΊΡ‚ΠΈΠ²ΠΈ (изобраТСния)
SRC
- ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΈ
—позиция.rs
β€” Ρ‡ΠΎΠ²Π΅ΠΊ.rs
β€” tennis_court.rs
β€” Π΅Ρ‚Π°ΠΆ.rs
- wireframe.rs
β€” mouse_tracked.rs
- рСсурси
β€” мишка.rs
- систСми
β€” rendering.rs
β€” константи.rs
β€” utils.rs
β€” world_factory.rs -> Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° свСтовната Ρ„Π°Π±Ρ€ΠΈΠΊΠ°
β€” main.rs -> основСн Ρ†ΠΈΠΊΡŠΠ»

НазначавамС Ρ…ΠΎΡ€Π° Π² ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π°

ECS Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΆΠΈΠ²ΠΎΡ‚Π° ΠΏΠΎ-лСсСн. Π‘Π΅Π³Π° ΠΈΠΌΠ°Ρ… систСматичСн Π½Π°Ρ‡ΠΈΠ½ Π·Π° добавянС Π½Π° Π΄Π°Π½Π½ΠΈ към ΠΎΠ±Π΅ΠΊΡ‚ΠΈ ΠΈ добавянС Π½Π° Π»ΠΎΠ³ΠΈΠΊΠ° въз основа Π½Π° Ρ‚Π΅Π·ΠΈ Π΄Π°Π½Π½ΠΈ. А Ρ‚ΠΎΠ²Π° ΠΎΡ‚ своя страна Π΄Π°Π΄Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π° ΠΏΠΎ ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π°.

Какво съм Π½Π°ΠΏΡ€Π°Π²ΠΈΠ»:

  • Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π° Π½Π° Π›ΠΈΡ†Π΅;
  • Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π΄Π°Π½Π½ΠΈ Π·Π° Ρ€Π°Π·ΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Ρ…ΠΎΡ€Π° към TennisCourt;
  • Π΄ΠΎΠ±Π°Π²Π΅Π½ CourtChoosingSystem, ΠΊΠΎΠΉΡ‚ΠΎ Π²ΠΈ позволява Π΄Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ Ρ…ΠΎΡ€Π° ΠΈ ΠΊΠΎΡ€Ρ‚ΠΎΠ²Π΅, Π΄Π° ΠΎΡ‚ΠΊΡ€ΠΈΠ²Π°Ρ‚Π΅ Π½Π°Π»ΠΈΡ‡Π½ΠΈ ΠΊΠΎΡ€Ρ‚ΠΎΠ²Π΅ ΠΈ Π΄Π° разпрСдСлятС ΠΈΠ³Ρ€Π°Ρ‡ΠΈ към тях;
  • Π΄ΠΎΠ±Π°Π²ΠΈ PersonMovementSystem, която Ρ‚ΡŠΡ€ΡΠΈ Ρ…ΠΎΡ€Π°, Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π² ΡΡŠΠ΄ΠΈΠ»ΠΈΡ‰Π°Ρ‚Π°, ΠΈ Π°ΠΊΠΎ Π½Π΅ са Ρ‚Π°ΠΌ, ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° Ρ…ΠΎΡ€Π°Ρ‚Π°, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ трябва.

Π˜Π³Ρ€Π° Π½Π° Rust Π·Π° 24 часа: ΠΎΠΏΠΈΡ‚ Π·Π° Π»ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅

Π Π΅Π·ΡŽΠΌΠΈΡ€Π°Π½Π΅

Наистина ΠΌΠΈ харСса Π΄Π° работя Π²ΡŠΡ€Ρ…Ρƒ Ρ‚Π°Π·ΠΈ проста ΠΈΠ³Ρ€Π°. ОсвСн Ρ‚ΠΎΠ²Π° сС Ρ€Π°Π΄Π²Π°ΠΌ, Ρ‡Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ… Rust, Π·Π° Π΄Π° Π³ΠΎ напиша, Π·Π°Ρ‰ΠΎΡ‚ΠΎ:

  • Rust Π²ΠΈ Π΄Π°Π²Π° Ρ‚ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅Ρ‚Π΅;
  • ΠΈΠΌΠ° ΠΎΡ‚Π»ΠΈΡ‡Π½Π° докумСнтация, Rust Π΅ доста Π΅Π»Π΅Π³Π°Π½Ρ‚Π΅Π½;
  • консистСнцията Π΅ Ρ…Π»Π°Π΄Π½Π°;
  • Π½Π΅ Π΅ Π½ΡƒΠΆΠ½ΠΎ Π΄Π° прибягватС Π΄ΠΎ ΠΊΠ»ΠΎΠ½ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΏΠΈΡ€Π°Π½Π΅ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΈ дСйствия, ΠΊΠΎΠΈΡ‚ΠΎ чСсто ΠΏΡ€Π°Π²Π΅Ρ… Π² C++;
  • ΠžΠΏΡ†ΠΈΠΈΡ‚Π΅ са ΠΌΠ½ΠΎΠ³ΠΎ лСсни Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΈ сС справят ΠΌΠ½ΠΎΠ³ΠΎ Π΄ΠΎΠ±Ρ€Π΅ с Π³Ρ€Π΅ΡˆΠΊΠΈΡ‚Π΅;
  • Ако ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΡŠΡ‚ Π΅ успял Π΄Π° бъдС ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€Π°Π½, Ρ‚ΠΎΠ³Π°Π²Π° 99% ΠΎΡ‚ Π²Ρ€Π΅ΠΌΠ΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΊΠ°ΠΊΡ‚ΠΎ трябва. Мисля, Ρ‡Π΅ ΡΡŠΠΎΠ±Ρ‰Π΅Π½ΠΈΡΡ‚Π° Π·Π° Π³Ρ€Π΅ΡˆΠΊΠΈ Π½Π° ΠΊΠΎΠΌΠΏΠΈΠ»Π°Ρ‚ΠΎΡ€Π° са Π½Π°ΠΉ-Π΄ΠΎΠ±Ρ€ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ съм Π²ΠΈΠΆΠ΄Π°Π».

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°Ρ‚Π° Π½Π° ΠΈΠ³Ρ€ΠΈ Π² Rust Π΅Π΄Π²Π° Π·Π°ΠΏΠΎΡ‡Π²Π°. Но Π²Π΅Ρ‡Π΅ ΠΈΠΌΠ° стабилна ΠΈ доста голяма общност, която Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π·Π° Π΄Π° ΠΎΡ‚Π²ΠΎΡ€ΠΈ Rust Π·Π° всички. Π—Π°Ρ‚ΠΎΠ²Π° Π³Π»Π΅Π΄Π°ΠΌ с ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΡŠΠΌ Π½Π° Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ Π½Π° Π΅Π·ΠΈΠΊΠ°, ΠΎΡ‡Π°ΠΊΠ²Π°ΠΉΠΊΠΈ Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ΠΈΡ‚Π΅ ΠΎΡ‚ ΡΡŠΠ²ΠΌΠ΅ΡΡ‚Π½Π°Ρ‚Π° Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Π°.

Skillbox ΠΏΡ€Π΅ΠΏΠΎΡ€ΡŠΡ‡Π²Π°:

Π˜Π·Ρ‚ΠΎΡ‡Π½ΠΈΠΊ: www.habr.com

ДобавянС Π½Π° Π½ΠΎΠ² ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€