이전에 사용하던 인민에어가 4년 반이나 되는바람에... 아직 잘돌아가지만 성능이 딸림을 느꼈다.

특히 리눅스같은 대형프로젝트를 vscode로 열면 버버기는 현상이 심하고, 빌드도 오래걸려서... 놋북을 새로 장만했다.

 

갓드의 르누아르가 워낙 대박이란 이야기를 들어서 르누아르 놋북을 존버했는데... 생각보다 내가 원하는 사양이 잘 안나왔다. 코딩용이니 15.6인치 / cpu 성능 좋고 / 코어 수 많고 / 램 16기가 / 외장gpu 없고(있으면 무거워짐) / 가벼운 노트북을 원했다. 한 2달정도 존버했는데, 갓성에서 큰일을 해냈다. 이번 올데이롱이 그야말로 내 요구 사항에 완벽히 부합한다! 게다가 cpu도 4800H이니 금상첨화다. 아쉽게도 1.5kg으로 내가 원하는거보다 살짝 무겁지만, 올데이롱의 특성상 배터리 타임이 매우 넉넉해서 충전기를 들고다닐 필요가 없다고 하니 이정도는 감안할만 하다. 바로 예구를 질렀고, 오늘 마침내 배송이 왔다!

 

웅장한 박스로 왔다. 누가보면 소형 티비산줄 알듯

 

디자인은 별 신경도 안썼는데, 생각보다 좋다. 블랙으로 매우 깔끔함.

깔-끔

 

윈도우 미포함으로 주문했기 때문에, 윈도우10 부터 설치했다. 그런다음 이것저것 셋업하고... 기존 놋북의 자료 좀 옮기고 했다. 아직까지 많이 사용을 안해서 사용 후기는 빈약하지만 그래도 적어보자면.

 

1. 팬소음 적음. 일반작업할때는 독서실에서도 충분.

2. 컨트롤 센터가 간지난다. 위 화면이 컨트롤 센터다. 팬소음 등등도 여기서 조절가능

3. 다중 작업을 아직 별로 안해봤지만 상당히 빠른듯?

4. 히오스 상옵으로 무난히 돌아감.

 

여태까지는 대단히 만족스럽다. 이 스펙으로 120만원에 나왔어도 별 고민없이 질렀을것 같다. 애당초 이런 사양(15인치에 고성능 르누아르, 1.5kg)이 현재까지는 아예 존재하지 않는다.

'기타' 카테고리의 다른 글

코로나19와 방역정책 분석  (0) 2020.12.19

[0]

Rust의 std에서 제공하는 Copy trait과 Clone trait에 대해 알아보자.

 

[1]

#[derive(Debug)]
struct MyStruct{
    x:i32,
    y:i32,
}

fn main(){
    let x = MyStruct{x:1,y:2};
    let y = x;

    println!("{:?}",y);
    println!("{:?}",x); // error here!
}

 

y = x에서 x의 소유권은 y에게로 옮겨진다. 따라서 x는 더 이상 소유권이 없기 때문에 x에 접근을 하게 되면 에러가 발생한다. 이를 해결하기 위해선, y = &x와 같이 레퍼런스를 전달할 수도 있지만, 상황에 따라선 x의 값을 복사해서 y에 넘겨주어야 할 때가 있을 수 있다. 이런 경우에 std의 Copy trait과 Clone trait을 이용할 수 있다. 

 

[2]

먼저 Copy trait에 대해 알아보자. Copy는 다음과 같이 derive를 이용해 간단히 이용할 수 있다. 이 경우 반드시 Clone trait도 함께 구현해야 한다.

#[derive(Debug, Copy, Clone)]
struct MyStruct{
    x:i32,
    y:i32,
}

fn main(){
    let x = MyStruct{x:1,y:2};
    let y = x;

    println!("{:?}",y);
    println!("{:?}",x); 
}

혹은 impl을 통해 직접 구현할 수도 있다. 

#[derive(Debug)]
struct MyStruct{
    x:i32,
    y:i32,
}

impl Copy for MyStruct { }

impl Clone for MyStruct {
    fn clone(&self) -> MyStruct {
        *self
    }
}

fn main(){
    let x = MyStruct{x:1,y:2};
    let y = x;

    println!("{:?}",y);
    println!("{:?}",x); 
}

Copy trait은 오버로딩할 수 없다. 즉, Copy의 행동을 바꿀 수 없으며, Copy trait은 항상 메모리 카피를 수행하게 된다. 또 한 가지 중요한 점으로, struct의 멤버 중 하나라도 Copy trait이 구현되어 있지 않다면, 해당 struct는 Copy를 구현할 수 없다. 기본적으로 스택에 할당되는 Rust primitive들은 모두 Copy를 구현한다. i32, u64 등의 타입이 이에 해당한다. 하지만 Vec<T>나 String과 같은 힙에 할당되는 타입들은 Copy를 구현하지 않는다. 이러한 타입들은 struct내에 해당 오브젝트를 가리키는 주소 값만이 저장되기 때문이다. C에서 shallow copy와 deep copy의 차이점을 생각하면 된다. 즉 shallow copy만으로 모든 컨텐츠를 복사할 수 있는 경우에만 Copy trait 구현이 가능하다. deep copy가 필요할 경우에는 Clone trait을 사용해야 한다.

 

[3]

Clone trait은 Copy trait의 superstrait이다. Copy와 마찬가지로 derive를 통해 구현할 수 있다. 또한 impl을 통해서도 구현할 수 있는데, Copy와 다르게 오버라이딩이 가능하다.

#[derive(Debug)]
struct MyStruct{
    x:i32,
    y:i32,
}


impl Clone for MyStruct {
    fn clone(&self) -> MyStruct {
        println!("clone is called!");
        MyStruct{x:self.x, y:self.y}
    }
}

fn main(){
    let x = MyStruct{x:1,y:2};
    let y = x.clone();

    println!("{:?}",y);
    println!("{:?}",x); 
}

오버라이딩이 가능하기 때문에 원한다면 위처럼 println을 찍는 등의 새로운 기능을 추가할 수 있다. Copy와의 큰 차이점은 위에서 x.clone()을 한 것처럼 명시적으로 호출해야 한다는 점이다.

 

 

[참고]

https://doc.rust-lang.org/std/marker/trait.Copy.html

 

std::marker::Copy - Rust

#[lang = "copy"]pub trait Copy: Clone { } Types whose values can be duplicated simply by copying bits. By default, variable bindings have 'move semantics.' In other words: #[derive(Debug)] struct Foo; let x = Foo; let y = x; Run However, if a type implemen

doc.rust-lang.org

 

'Computer Science > Rust' 카테고리의 다른 글

Rust의 trait object  (0) 2020.08.02
Rust의 async/await와 Future  (0) 2020.07.21
Rust의 스마트 포인터  (0) 2020.05.20
Rust의 lifetime parameter  (0) 2020.05.05
Rust의 Trait  (1) 2020.03.10

20.06.13~19 (7일)

205쪽

 

헤세의 작품 중 데미안, 나르치스와 골드문트, 수레바퀴 아래서에 이어서 4번째로 읽은 작품이다. 해당 3작품 모두 굉장히 오래전에 읽어서 오랜만에 헤세를 읽게 된 셈이다. 

 

우선 싯다르타는 200페이지정도로 장편치고는 상당히 짧고, 총 8개의 장이 한번에 읽기 편하게 나누어져있어서 좋다. 또한 비교적 재미없을 만한 주제를 다룸에도, 몰입력이 괜찮이 때문에 쉽고 편하게 읽을 수 있었다. 또한 싯다르타의 일대기를 다룬 성장소설이란 점도 내 취향에 잘 맞아서 재미있게 읽었다.

 

2018년 문학동네 판본으로 읽었는데 번역 질도 좋고, 불교 용어에 대한 각주도 적절히 달려 있어 상당히 만족했다. 최근에는 문학동네판이 전체적으로 질이 좋은 것 같다.

+ Recent posts