on
[ Rustπ¦ ] Rust μ μμ κΆ
Rust μ μΈμ΄λ‘μμ 보νΈμ μΈ κΈ°λ₯μ μ μ μλ€.
μ΄μ ν¬μ€νΈμμ Rust μ κΈ°λ³Έμ μΈ μμ±λ€μ μμ 보μλ€.
μ΄λ² ν¬μ€νΈμμλ Rust μ ν΅μ¬ κ°λ
μ΄λΌκ³ ν μ μλ μμ κΆ
μ λν΄ μμ보μ.
μμ κΆμ΄ λκ°μ? ( Ownership )
μ°λ¦¬λ μ΄μ μ μ¬μ©νλ μΈμ΄λ€μ μ°λ©΄μ, λ³μμ μ ν¨μ±μ λ°λ₯Έ μ€λ₯λ₯Ό λ§μ΄ κ²ͺμ΄μλ€.
- λμ ν λΉμ λ무 λ§μ΄ μ¬μ©νμ¬ μκΈ°λ
memory leak
- memory leak μ ν΄κ²°νκΈ° μν΄ JAVA μμ λμ
ν
GC(Garbage Collector)
- λμΌν heap μμμ κ°λ₯΄ν€κ³ μλ λ³μλ€ λλ¬Έμ μκΈ°λ
Dangling Pointer
- μ ν¨ν κ°μ κ°λ₯΄ν€κ³ μμ§ μμ ν¬μΈνΈ λ€ λλ¬Έμ μκΈ°λ
Exception
λ€ ..
Rust λ μ΄λ¬ν λ¬Έμ λ€μ ν΄κ²°νκΈ° μν΄ μμ κΆ
μ΄λΌλ κ°λ
μ λμ
νλ€.
μμ κΆμ΄λ, λ³μκ° μ΄λ€ κ°μ μμ ν μ μλ κ²μ λ§νλ€.
μμ, Rust μ μμ κΆμ λν κ·μΉμ μμ보μ.
- λ¬μ€νΈμ κ°κ°μ κ°μ ν΄λΉκ°μ μ€λ(owner)λΌκ³ λΆλ¦¬μ°λ λ³μλ₯Ό κ°κ³ μλ€.
- νλ²μ λ± νλμ μ€λλ§ μ‘΄μ¬ν μ μλ€.
- μ€λκ° μ€μ½ν λ°μΌλ‘ λ²μ΄λλ λ, κ°μ λ²λ €μ§λ€(dropped).
Rust λ μ΄λ¬ν μμ κΆ
μ ν΅ν΄, JAVA κ°μ λ³λμ GCλ λμ§ μμΌλ©΄μ, C μ²λΌ memory leak μ μνλ μλ μμ μ±μ ꡬνν΄ λλ€.
λ³μμ μ€μ½ν ( Scope )
ν μΈμ΄μ λμΌνκ², Rust μ λ³μλ μ€μ½ν(Scope)
λ₯Ό κ°μ§λ€.
λ³μλ ν΄λΉ μ€μ½ν λ΄μμλ§ μ¬μ©ν μ μμΌλ©°, μ€μ½νλ₯Ό λ²μ΄λ μ μλμΌλ‘ Drop
λλ€.
λ³μμ κ°μ κ΄κ³ : μ΄λ ( Move )
λ¨Όμ μΌλ°μ μΌλ‘ λ³μκ° κ°μ 볡μ¬νλ μ½λμ μμ λ₯Ό 보μ.
μ μ½λλ y μ κ°μ x μ 볡μ¬νλ κ²μ΄κ³ , μ무 λ¬Έμ μμ΄ λμνλ€.
κ·Έλ¬λ©΄, μμ κ°μ κ²½μ°λ₯Ό String μ μ μ©ν΄ 보μ.
μ΄μ μ μ½λμ μ°¨μ΄λ int νμ
μμ String μΈ νμ
μΌλ‘ λ°λ κ² λΏμ΄λ―λ‘, μ΄ μ½λλ μ μμ μΌλ‘ λμνμΌ ν κ² κ°μ§λ§,
μ€μ λ‘ μ»΄νμΌν΄λ³΄λ©΄, μλμ κ°μ μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
μ μ€λ₯μμ λ μ€μν 문ꡬλ₯Ό λ³Ό μ μλλ°, 첫째λ value moved here μ΄κ³ , λμ§Έλ value borrowed here after move μ΄λ€.
λ λ¬Έκ΅¬κ° λ°λ‘ Rust μ μμ κΆ λλ¬Έμ λ°μν μ€λ₯μΈλ°, 4λ²μ§Έ μ€ x = y
μμ βhello, world!β String μ λν μμ κΆμ΄ x μμ y λ‘ μ΄λν λ²κ³ ,
κ·Έ μ΄ν 6λ²μ§Έ μ€μμ x λ String μ λν μμ κΆ
μ κ°μ§κ³ μμ§ μμ§λ§ μΆλ ₯νλ € νκΈ° λλ¬Έμ λ°μν μ€λ₯μ΄λ€.
μ΄μ²λΌ μμ κΆμ κ°μ§ λ³μλ₯Ό 1κ°λ‘ μ μ§ν¨μΌλ‘μ¨, Dangling Pointer
μ μ°Έμ‘°μ λ°λ₯Έ μ€λ₯λ₯Ό μμ¨ μ μκ³ ,
μμ κΆμ κ°μ§ λ³μκ° Scope μ λ²μ΄λ λ κ°λ ν¨κ» Drop
μν΄μΌλ‘μ¨ memory leak
λ λ°©μ§ν μ μλ κ²μ΄λ€. \
\
κ·Έλ λ€λ©΄, 첫λ²μ§Έ κ²½μ°μ μ»΄νμΌ μ€λ₯κ° λμ§ μμλ μ΄μ λ 무μμΌκΉ?
μ°¨μ΄λ λ°λ‘, 첫λ²μ§Έλ primitive
νμ λ³μλ₯Ό μ¬μ©νκ³ , λλ²μ§Έλ reference
νμ λ³μλ₯Ό μ¬μ©νλ€λ κ²μ΄λ€.
μ΄λ λ€μ λ¬Έλ¨μμ μ€λͺ
νκ² λ€.
\
λ³μμ κ°μ κ΄κ³ : λ³΅μ¬ ( Copy )
Rust μμλ λ³μκ° κ°μ λμ
ν λ, νμ μμ κΆμ μ΄λμ΄ μΌμ΄λλ κ²μ μλλ€.
κ°μ μμ κΆμ΄ μ΄λλμ§ μκ³ , κ° μμ²΄κ° λ³΅μ¬λλ κ²½μ°κ° μλλ°, μ΄λ λ³μκ° STACK μ λ€μ΄κ° μ μλ ( μ»΄νμΌ νμμ ν¬κΈ°λ₯Ό μ μ μλ )
primitive
ν κ°μΌ κ²½μ°μ΄λ€.
κ°μ΄ 볡μ¬λλ νμ μ μλμ κ°λ€.
- u32μ κ°μ λͺ¨λ μ μν νμ λ€
- trueμ falseκ°μ κ°λ λΆμΈλ¦° νμ bool
- f64μ κ°μ λͺ¨λ λΆλ μμμ νμ λ€
- Copyκ° κ°λ₯ν νμ λ§μΌλ‘ ꡬμ±λ ννλ€. (i32, i32)λ Copyκ° λμ§λ§, (i32, String)μ μλ©λλ€.
λν μμ μ΄ μ§μ λ§λ ꡬ쑰체μλ₯Ό Copy λκ² ν μ λ μλλ°, μλμ²λΌ Copy trait μ ꡬννλ©΄ λλ€. ( μμΈν λ΄μ©μ λμ€μ λ€λ£¨κ² λ€. )