
Rustλ μμ€ν νλ‘κ·Έλλ° μμμμ λ©λͺ¨λ¦¬ μμ μ±(Memory Safety), λμμ±(Concurrency), κ·Έλ¦¬κ³ μ±λ₯(Performance)μ λμμ ν보νλ κ²μ μ€κ³ λͺ©νλ‘ νλ μ»΄νμΌν νλ‘κ·Έλλ° μΈμ΄μ΄λ€. 2010λ λ μ΄λ° Mozillia Researchμμ μ²μ 곡κ°λ μ΄ν, μμ€ν λ 벨μ μ μ΄ λ₯λ ₯κ³Ό κ³ μμ€ μΈμ΄μ μμ°μ±μ κ²°ν©ν λ νΉν ν¨λ¬λ€μμΌλ‘ μΈν΄ νμ μ λ° μ°μ μ κ΄μ¬μ λ°κ³ μλ€. λ³Έ κ³ λ Rustκ° κΈ°μ‘΄ μΈμ΄(C, C++, Java, Go λ±)μ λΉκ΅νμ¬ κ°μ§λ κΈ°μ μ μ°μμ μ€κ³μ λ°λ₯Έ Trade-offλ₯Ό νμ μ κ΄μ μμ λΆμνλ€.
λλΆλΆμ νλμ μΈμ΄(Java, Python, Go λ±)λ κ°λΉμ§ 컬λ μ (Garbage Collection, GC)μ ν΅ν΄ λ©λͺ¨λ¦¬ κ΄λ¦¬μ λΆκ°μ κ°λ°μλ‘λΆν° λμ΄μ€λ€. κ·Έλ¬λ GCλ λ°νμ μ€λ²ν€λμ λΉκ²°μ μ μΈ(Non-deterministic) λ©μΆ€ νμμ μ λ°ν μ μ΄μΈ. λ°λ©΄, C/C++λ μλ λ©λͺ¨λ¦¬ κ΄λ¦¬λ‘ μΈν μ΅λ μ±λ₯μ μ 곡νμ§λ§, λκΈλ§ ν¬μΈν°(Dangling Pointer), μ΄μ€ ν΄μ (Double Free), λ²νΌ μ€λ²νλ‘μ°(Buffer Overflow)μ κ°μ λ©λͺ¨λ¦¬ μ€λ₯μ μ·¨μ½νλ€.
Rustλ μμ κΆ(Ownership), λΉλ¦Ό(Borrowing), μλͺ (Lifetime)μ΄λΌλ μΈκ°μ§ ν΅μ¬ κ°λ μ μ»΄νμΌ νμμ κ²μ¦νλ λ νΉν νμ μμ€ν μ λμ νμλ€. μ΄λ₯Ό ν΅ν΄ λ°νμ μ€λ²ν€λ μμ΄ λ©λͺ¨λ¦¬ μμ μ±μ 보μ₯νλ€. μ»΄νμΌλ¬λ μ½λκ° μ»΄νμΌλλ μμ μ λ©λͺ¨λ¦¬ μ κ·Όμ μ ν¨μ±μ κ²μ¬νμ¬, λ©λͺ¨λ¦¬ κ΄λ ¨ μ€λ₯κ° μ€ν κ°λ₯ν λ°μ΄λ리μ ν¬ν¨λμ§ μλλ‘ λ³΄μ₯νλ€. μ΄λ μμ€ν νλ‘κ·Έλλ°μμ μ λ’°μ±κ³Ό μ±λ₯μ λμμ λ¬μ±ν μ μλ μ΄λ‘ μ ν λλ₯Ό μ 곡νλ€.
λ©ν°μ½μ΄ νλ‘μΈμ μν€ν μ²κ° μΌλ°νλ νλ μ»΄ν¨ν νκ²½μμ λμμ± νλ‘κ·Έλλ°μ νμμ μ΄λ€. κ·Έλ¬λ 곡μ μν(Shared State)λ₯Ό κΉγ λ°μΌλ‘ ν μ€λ λ νλ‘κ·Έλλ°μ λ°μ΄ν° λ μ΄μ€(Data Race)μ κ°μ μ€λ₯λ₯Ό λ°μμν€κΈ° μ½λ€. Rustμ νμ μμ€ν μ λμμ± μμ μ±(Concurrency Safety)μ μ»΄νμΌ νμμ κ°μ νλ€.
νΉν, Sendμ Sync νΈλ μ(Trait)μ ν΅ν΄ λ°μ΄ν°κ° μ€λ λ κ°μ μμ νκ² μ΄λνκ±°λ 곡μ λ μ μλμ§λ₯Ό μ μ μΌλ‘ λΆμνλ€. μ΄λ λ°νμ λ½(Lock)μ μμ‘΄νλ μ ν΅μ μΈ λ°©μλ³΄λ€ ν¨μ¨μ μ΄λ©°, κ°λ°μκ° μλνμ§ μμ λμμ± λ²κ·Έλ₯Ό μ¬μ μ μ°¨λ¨νλ€. μ΄λ₯Ό ν΅ν΄ Rustλ 'λλ €μ μλ λμμ± (Fearless Concurrency)'μ μ€ννμ¬, λ³λ ¬ μ²λ¦¬ μ±λ₯μ κ·Ήλννλ©΄μλ μμ μ±μ μ μ§νλ€.
Rustλ κ³ μμ€μ μΆμν(μ: μ΄ν°λ μ΄ν°, ν¨ν΄ λ§€μΉ, μ λ€λ¦)λ₯Ό μ 곡νλ©΄μλ, μ΄λ€μ΄ μ»΄νμΌ ν μμ±λλ κΈ°κ³μ΄ μ½λκ° κ°λ°μκ° μλμΌλ‘ μ΅μ νν μ μμ€ μ½λμ μ μ¬ν μ±λ₯μ λ΄λλ‘ μ€κ³λμλ€. μ΄λ₯Ό 'μ λ‘ λΉμ© μΆμν'λΌκ³ νλ€.
C++μ ν νλ¦Ώκ³Ό μ μ¬νκ², Rustμ μ λ€λ¦μ λͺ¨λ Έλͺ¨νΌμ μ΄μ (Monomorphization) κ³Όμ μ κ±°μ³ μ»΄νμΌ νμμ ꡬ체μ μΈ νμ μΌλ‘ μ κ°λλ€. μ΄λ λ°νμμ νμ μ νμΈνκ±°λ λ°μ±(Boxing)νλ μ€λ²ν€λλ₯Ό μ κ±°νλ€. κ²°κ³Όμ μΌλ‘ Rustλ μλ² λλ μμ€ν , μ΄μ체μ 컀λ, κ²μ μμ§ λ± μ±λ₯μ΄ μΉλͺ μ μΈ μμμμ C/C++λ₯Ό λ체ν μ μλ νλ³΄λ‘ νκ°λ°λλ€.
μΈμ΄ μ€κ³λΏλ§ μλλΌ μλκ³ λꡬμ ν΅ν©μ±λ Rustμ κ°μ μ΄λ€. Cargoλ λΉλ μμ€ν
, ν¨ν€μ§ λ§€λμ , ν
μ€νΈ λ¬λ, λ¬Έμν λκ΅¬κ° ν΅ν©λ νκ²½μ΄λ€. μ΄λ C/C++ μνκ³μ λ¨νΈνλ λꡬ μ¬μ¬(Make, CMake, λ€μν ν¨ν€μ§ λ§€λμ λ±)κ³Ό λλΉλλ€. μμ‘΄μ± κ΄λ¦¬μ μΌκ΄μ±κ³Ό μ¬ν κ°λ₯ν λΉλ (Reproducible Build)λ₯Ό μ§μν¨μΌλ‘μ¨, μννΈμ¨μ΄ 곡κΈλ§ 보μ(Supply Chain Security) λ° μ μ§λ³΄μμ±μ ν₯μμν¨λ€.
Rust μ»΄νμΌλ¬μΈ rustcλ μμ κΆ κ²μ¬μ Borrow Checkerλ₯Ό μννκΈ° μν΄ λ³΅μ‘ν μ μ λΆμμ μννλ€. μ΄λ Cλ Goμ κ°μ μΈμ΄μ λΉν΄ μλμ μΌλ‘ κΈ΄ μ»΄νμΌ μκ°μ μ λ°νλ€. νΉν λκ·λͺ¨ νλ‘μ νΈμμ μ λ€λ¦κ³Ό 볡μ‘ν νμ μΆλ‘ μ΄ μ¬μ©λ κ²½μ°, μ»΄νμΌ μκ°μ΄ κ°λ° μν¬νλ‘μ°μ λ³λͺ© νμμΌλ‘ μμ©ν μ μλ€. μ΄λ λ°νμ μμ μ±μ ν보νκΈ° μν΄ μ»΄νμΌ νμ μ°μ° λΉμ©μ μ§λΆνλ μ€κ³μ μ νμ κ²°κ³Όμ΄λ€.
Rustμ κ°λ ₯ν νμ
μμ€ν
κ³Ό λΆλ³μ±(Immutability) κΈ°λ³Έ μμΉμ μ½λμ μμΈ‘ κ°λ₯μ±μ λμ΄μ§λ§, νΉμ μν©μμλ μ μ°μ±μ μ ννλ€. μλ₯Ό λ€μ΄, μν μ°Έμ‘°(Circular Reference)κ° νμν λ°μ΄ν° ꡬ쑰λ₯Ό ꡬνν κ²½μ°, μμ κΆ κ·μΉμ λ§μ‘±μν€κΈ° μν΄ Rc<RefCell<T>>μ κ°μ λ°νμ 체ν¬λ₯Ό κ°ννλ νμ
μ μ¬μ©ν΄μΌ νκ±°λ, Unsafe Rustλ₯Ό λμ
ν΄μΌ νλ κ²½μ°κ° λ°μνλ€. μ΄λ λμ μΈμ΄λ κ°λΉμ§ 컬λ μ
μ μ¬μ©νλ μΈμ΄μ λΉν΄ νλ‘ν νμ΄ν λ¨κ³μμ μ½λ μμ±μ μ μ½μΌλ‘ μμ©ν μ μλ€.
Rustλ λ°νμ λΌμ΄λΈλ¬λ¦¬κ° μμ§λ§, μ λ€λ¦μ λͺ¨λ
Έλͺ¨νΌμ μ΄μ
νΉμ±μΌλ‘ μΈν΄ μ½λ ν½μ°½(Code Bloat)μ΄ λ°μν μ μλ€. λν, panic μ²λ¦¬λ₯Ό μν μ€ν μΈμμΈλ©(Stack Unwinding) μ 보 λ±μ΄ ν¬ν¨λ κ²½μ°, μ΅μ νλμ§ μμ λ°μ΄λ리μ ν¬κΈ°κ° C μΈμ΄ κΈ°λ°μ μ΅μνλ λ°μ΄λλ¦¬λ³΄λ€ ν΄ μ μλ€. μ΄λ λ©λͺ¨λ¦¬ μ μ½μ΄ κ·Ήμ¬ν μλ² λλ νκ²½μμ μΆκ°μ μΈ μ΅μ ν (μ: panic = 'abort'μ€μ )λ₯Ό μꡬνλ€.
Rustλ μμ€ν νλ‘κ·Έλλ°μ κ³ μ μ μΈ λμ μλ 'μ±λ₯ λ μμ μ±'μ λλ λ§λ₯Ό μ»΄νμΌ νμ κ²μ¦μ ν΅ν΄ ν΄κ²°ν μ¬λ‘λ‘ νκ°ν μ μλ€. κ°λΉμ§ 컬λ μ μμ΄ λ©λͺ¨λ¦¬ μμ μ±μ 보μ₯νκ³ , λ°μ΄ν° λ μ΄μ€λ₯Ό λ°©μ§νλ λμμ± λͺ¨λΈμ κΈ°μ‘΄ C/C++ κΈ°λ° μμ€ν μ μ λ’°μ±μ νκΈ°μ μΌλ‘ ν₯μμν¬ μ μ¬λ ₯μ κ°μ§λ€.
λΉλ‘ μ»΄νμΌ μκ° μ¦κ° λ° μ격ν νμ κ·μΉμΌλ‘ μΈν μ μ°μ± μ νκ³Ό κ°μ κΈ°μ μ μ μΆ©μ μ΄ μ‘΄μ¬νλ€, μ΄λ λ°νμ μ€λ₯λ₯Ό λ°©μ§νκ³ μ₯κΈ°μ μΈ μ μ§λ³΄μ λΉμ©μ μ κ°νκΈ° μν μ€κ³μ μλλ‘ ν΄μλλ€. λ°λΌμ κ³ μ±λ₯, κ³ μ λ’°μ±μ΄ μꡬλλ μμ€ν μννΈμ¨μ΄, μΉ μ΄μ λΈλ¦¬, μλ² λλ μμ€ν λ±μ λλ©μΈμμ Rustλ κΈ°μ‘΄ μΈμ΄ λμμΌλ‘μ κ°λ ₯ν κΈ°μ μ μ°μλ₯Ό μ νκ³ μλ€.