CLIEN

본문 바로가기 메뉴 바로가기 폰트크기변경 색상반전보기
톺아보기 공감글 추천글
커뮤니티 C 모두의광장 F 모두의공원 I 사진게시판 Q 아무거나질문 D 정보와자료 N 새로운소식 T 유용한사이트 P 자료실 E 강좌/사용기 L 팁과강좌 U 사용기 · 체험단사용기 W 사고팔고 J 알뜰구매 S 회원중고장터 B 직접홍보 · 보험상담실 H 클리앙홈
소모임 소모임전체 임시소모임 ·테니스친당 ·굴러간당 ·주식한당 ·가상화폐당 ·아이포니앙 ·자전거당 ·MaClien ·방탄소년당 ·골프당 ·일본산당 ·나스당 ·키보드당 ·야구당 ·노젓는당 ·디아블로당 ·개발한당 ·레고당 ·테니스친당 ·안드로메당 ·바다건너당 ·육아당 ·리눅서당 ·날아간당 ·소셜게임한당 ·콘솔한당 ·이륜차당 ·소시당 ·냐옹이당 ·VR당 ·땀흘린당 ·캠핑간당 ·걸그룹당 ·PC튜닝한당 ·축구당 ·클다방 ·포뮬러당 ·패스오브엑자일당 ·갖고다닌당 ·덕질한당 ·방송한당 ·와인마신당 ·그림그린당 ·퐁당퐁당 ·스팀한당 ·시계찬당 ·젬워한당 ·심는당 ·안경쓴당 ·IoT당 ·보드게임당 ·활자중독당 ·LOLien ·개판이당 ·소리당 ·3D메이킹 ·라즈베리파이당 ·사과시계당 ·스타한당 ·DANGER당 ·요리한당 ·빨콩이당 ·대구당 ·임시소모임 ·영화본당 ·미드당 ·블록체인당 ·날아올랑 ·WOW당 ·e북본당 ·여행을떠난당 ·SimSim하당 ·오른당 ·테스트당 ·적는당 ·총쏜당 ·찰칵찍당 ·물고기당 ·블랙베리당 ·헌팅한당 ·윈태블릿당 ·노키앙 ·창업한당 ·X세대당 ·배드민턴당 ·농구당 ·곰돌이당 ·뽀록이당(당구) ·볼링친당 ·문명하셨당 ·클래시앙 ·쿠키런당 ·동숲한당 ·이브한당 ·패셔니앙 ·도시어부당 ·FM한당 ·맛있겠당 ·차턴당 ·내집마련당 ·하스스톤한당 ·히어로즈한당 ·인스타한당 ·KARA당 ·어학당 ·가죽당 ·Mabinogien ·땅판당 ·MTG한당 ·소풍간당 ·품앱이당 ·리듬탄당 ·Sea마당 ·심야식당 ·미끄러진당 ·나혼자산당 ·파도탄당 ·공대시계당 ·터치패드당 ·트윗당 ·WebOs당 ·윈폰이당
© CLIEN.NET
공지외부공격 및 접속장애 안내 더보기

개발한당

자유 러스트 Actix 프로젝트 관련 내용 1

2
고등어
1,763
2020-01-22 16:41:12 143.♡.48.113

1. unsafe라고 다 같은 unsafe가 아닙니다.

2. Rust 프로그램에는 invariant가 있습니다. 예를 들어서 ownership이 없으면 수정을 하지 말라 라는 것 등등..

3. 고성능 프로그램을 짜려고 하면 위 invariant는 너무 가혹합니다.

4. unsafe 블록의 의미는

"이 블록 내에서는 invariant를 잠시 깰 텐데

이 블록이 끝나면 내가 다시 invariant를 돌려놓을게"

라는 약속입니다.

5. 예를 들어서 

list.insert(a) 라는 함수는 prev/next 포인터를 동시에 만지면서 invariant를 깨지만

prev/next가 동시에 다 세팅된 후에는 list로서 type-safe 한 api를 제공할 수 있게 됩니다.
6. 더 쉽게 설명하면

prev = prev.next;

next = next.prev;

각각의 개별 statement는 invariant를 깨지만

두 statement가 모두 완료되면 invariant가 다시 복구됩니다. (list 의 모양새를 만족한다는 invariant)

7. 다른 유명 Rust 라이브러리, Tokio, Rayon, Crossbeam 등에 대해서는 unsafe가 조금 있어도

개발자를 믿으면서 사람들이 크게 태클을 걸지 않습니다.

8. 근데 이 리포지토리가 특히 이슈가 된 것은.. Rust에 대한 기본적인 이해가 부족한 것 같은 unsafety 가 보이기 때문입니다.

이러한 상황에서는 unsafe코드를 모두 의심하면서 standard에서 제공하는 safe 라이브러리만을 사용하도록 압박이 들어오기 시작합니다.

9. 그러한 unsafety의 예시로..

https://github.com/actix/actix-net/blob/da302d4b7a3faaeb5d041f8480d4437113d2e0d5/actix-service/src/cell.rs#L33 

Cell 이라는 std lib에 get_mut 가 없어서 불편하다고.. 직접 만들어서 쓰는 예시입니다..

Cell에 get_mut를 만들지 않은 것은 Rust 제작자들이 멍청하거나 귀찮아서가 아니고..

Cell의 read-only ref 를 이용해서 in-place-replacement를 구현하기 위해서 모든 get 연산에 대해서 ref를 허용하지 않고 오직 복사본을 가져가도록 강제했기 때문입니다.

이러한 코드가 곳곳에서 발견되니.. 커뮤니티에서는 개발자의 자질을 의심하면서 모든 unsafe에 대해서 예민하게 받아들일 수 밖에 없게 된 것이죠.


고등어 님의 게시글 댓글
  • 주소복사
  • Facebook
  • Twitter
2명
댓글 • [1] 을 클릭하면 간단한 회원메모를 할 수 있습니다.
BlaCk
LINK
#109344691
IP 223.♡.164.183
01-22 2020-01-22 18:00:21
·
좋은내용 공유감사합니다.
새로운 댓글이 없습니다.
이미지 최대 업로드 용량 15 MB / 업로드 가능 확장자 jpg,gif,png,jpeg
지나치게 큰 이미지의 크기는 조정될 수 있습니다.
목록으로
글쓰기
글쓰기
목록으로 댓글보기 이전글 다음글
아이디·비번 찾기 회원가입
이용규칙 운영알림판 운영소통 재검토요청 도움말 버그신고
고객지원
  • 게시물 삭제 요청
  • 쪽지 신고
  • 닉네임 신고
  • 제보 및 기타 제안
개인정보처리방침 이용약관 책임의 한계와 법적고지 청소년 보호정책
©   •  CLIEN.NET