logo MSJO.kr

Objects and behavior, Rust vs. C#

2020-07-08
MsJ
 

프로그래밍 언어인 Rust와 C#을 OOP 관점에서 비교해 보았다. Rust는 OOP라기보다는 모듈/함수 지향형 프로그래밍 언어라고 보는 게 더 합당하다고 생각한다. What does “Rust & OOP” mean to you?

struct Door {
    is_open: bool,
}

trait Openable {
    fn new(is_open: bool) -> Door;
    fn open(&mut self);
    fn foo1(txt: &str);
    fn foo2(&mut self);
}

impl Openable for Door {
    fn new(is_open: bool) -> Door {
        Door { is_open: is_open }
    }

    fn open(&mut self) {
        self.is_open = true;
    }

    fn foo1(txt: &str) {
        println!("{} {}", "Print foo ...", txt);
    }

    fn foo2(&mut self) {
        Self::foo1("2");
    }
}

fn main() {
    let mut door = Door::new(false);
    println!("{}", if door.is_open { "참" } else { "거짓" });
    door.open();
    println!("{}", if door.is_open { "참" } else { "거짓" });
    Door::foo1("1");
    door.foo2();
}
using System;

namespace class_csharp
{
    class Door
    {
        public bool is_open = false;

        public Door(bool is_open)
        {
            this.is_open = is_open;
        }

        public void Open()
        {
            this.is_open = true;
        }

        public static void Foo()
        {
            Console.WriteLine("Print Foo ...");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var door = new Door(false);
            Console.WriteLine(door.is_open? "참": "거짓");
            door.Open();
            Console.WriteLine(door.is_open? "참": "거짓");
            Door.Foo();
            // GC.Collect();
            // GC.WaitForPendingFinalizers();
        }
    }
}
특징

Rust는 현대적인 시스템 프로그래밍 언어로, C/C++와 동등한 수준의 속도를 달성하면서 메모리 오류를 완전히 없애는 것을 목표로 한다. 또한 함수형 프로그래밍 언어로부터 발전된 타입 시스템을 도입하였으며, 클래스 대신 트레이트(Trait)를 기반으로 다형성을 달성한다. 매크로를 사용해 언어를 확장하는 것이 가능하며, 이 모든 것이 현대적인 모듈 시스템을 통해 쉽게 모듈화될 수 있다. 모듈들은 크레이트(Crate)라고 하는 단위로 묶여서 실행 파일이나 라이브러리로 배포될 수 있으며, Cargo라는 패키지 관리 프로그램을 통해 빌드 및 패키지 배포를 자동화하고 필요한 라이브러리를 Cargo를 통해 자동으로 다운로드받을 수 있다. - Rust, 나무위키

Reference

Prεv   Nεxt
Content
Search     RSS Feed     BY-NC-ND