(TIL) 2020-06-10 기록

업데이트:

오늘 한 일

  • flutter에서 listview나 scrollview 같은 것이 scrollable 위젯과 viewport 위젯을 이용하여 만든 것이라는 것을 알게 되었다. 완전히 CustomScroll을 만들 일은 당분간 없겠지만 언젠가 만들 일이 생길지도 모르기에 유용한 정보였다.
  • 새로운 사이드 프로젝트의 db 구조를 짜고 데이터 모델을 작성하고 bloc의 보일러 플레이트를 몇 가지 작성했다.
  • 동적 계획법 강의를 다 듣고 브루트 포스로 넘어갔다. 경우의 수가 1억개 미만이면 모든 경우의 수를 세어보는 브루트 포스를 쓰는 것을 고려해 볼 수 있다고 한다.
  • 오늘은 시간이 조금 남아 rust를 공부했다.
  • rust는 IH전기압력밥솥 같다. C나 C++만큼 혹은 더 로우레벨에 접근 가능하면서도 메모리 오류를 강박적으로 잡아내서 컴파일 타임에 잡아내려고 하고 파이썬이나 코틀린 같은 현대적인 언어만큼 직관적이고 간편하다.
  • rust에서 재밌는 부분은 변수가 기본적으로 immutable 하다는 것이다. 그리고 한 번 선언된 변수에는 그것이 설사 mutable 하다고 하더라도 다른 타입의 리터럴을 대입하는 것이 불가능하다. 한 번 선언된 변수의 타입은 고정이다. 그러나 같은 이름으로 let 키워드를 사용하여 변수를 선언한 다음 뭔가 다른 것을 대입하는 것은 가능하다. 이렇게 되면 마치 immutable한 변수를 mutate 한 것 같지만 사실은 원래 있던 변수가 삭제되고 새로운 변수가 만들어진 것이다.
  • 정수 타입이 세분화되어 있고 직관적이다. int, long, long long 이런 식으로 돼 있으면 각 타입이 몇 비트까지 쓰는지 사실 알 수가 없는데 rust에서는 i8, i16, i32 이런 식으로 바로 알 수가 있다. 그리고 rust에서는 특별한 일이 없으면 i32를 쓰는 것을 추천한다. 64비트 컴퓨터에서도 i32가 훨씬 빠르다고 한다. 다만 부동소수점 타입인 f32f64 간에는 아주 미미한 속도 차이밖에 없기 때문에 웬만하면 더 정확한 f64를 쓰기를 권장하더라. 그리고 디버그 모드에서는 overflow를 체크하여 패닉을 일으킨다.
  • rust에는 tuple도 있다!! 아아아 언매니지드 언어에 튜플이 있다니 감격스럽다. 파이썬에서 써보고 정말 유용하다고 느꼈는데 C++에는 없어서 좀 시무룩했다.
  • rust에서 배열은 길이가 고정되어 있다. index out of bound 여부를 체크한다. c나 c++처럼 index가 넘어갔을 때 그냥 다음 메모리 주소에 있는 쓰레기값을 던지는데 rust는 그런 일을 컴파일 시간에 방지한다.
  • vector 타입도 있다. 이 타입은 배열과 다르게 길이가 변할 수 있으므로 rust에서는 별다른 이유가 없으면 시퀀스 자료구조로 vector를 쓰라고 하더라.
  • rust에서는 세미콜론으로 끝나지 않는 문장을 ‘식’이라고 한다. 그리고 이 식은 값을 반환한다. 그래서 함수 내에 마지막에 적혀 있는 ‘식’을 암묵적으로 반환문으로 간주한다. 물론 명시할 수도 있다.
  • 꼭 함수에서만 ‘식’을 쓸 수 있는 것이 아니고 어떤 변수를 선언함과 동시에 다른 변수에 대입하고 싶을 때 x=y=6; 이런 식으로 선언을 못한다. rust식으로 하자면 let x = let y = 6인데 다른 언어과 다르게 statement가 값을 반환하지 않기 때문에 x는 아무 값도 받지 못한다. 이때 이런 식으로 할 수 있다.
    let x = {
      let y = 6;
      y
    }
    
  • 이렇게 마지막에 y에 세미콜론을 찍지 않았기 때문에 이것은 블럭 내의 반환문으로 간주 되고 x에 대입되게 된다. 진짜 편한 기능 같다 ㅋㅋㅋㅋ

내일 할 일

  • 본격적으로 사이드 프로젝트의 보일러 플레이트들을 모두 작성하고 구현도 해야겠다.
  • 브루트 포스 공부 시작이다!
  • 종만북이라는 것을 구입해야겠다.
  • rust가 재밌다. 계속 공부해 보고 싶다.

태그:

카테고리:

업데이트:

댓글남기기