러스트 프로그래밍
Description
실무에 적용 가능한 다양한 예제로 배우는 러스트 프로그래밍
러스트는 시스템 프로그래밍에 적합한 언어이다. C와 같은 저수준 언어에 견줄 만한 성능과 두려움 없이 코딩할 수 있는 매우 견고한 안전 요소를 함께 제공한다. 러스트 프로그램은 간결하고, 가독성이 좋고, 엄청나게 빨라서 동시성을 필요로 하는 애플리케이션에 이상적이다. 똑똑하기로 유명한 러스트의 컴파일러는 감지하기 힘든 코딩 에러까지 피할 수 있도록 도와준다.

《한 줄 한 줄 짜면서 익히는 러스트 프로그래밍》은 러스트로 하는 시스템 프로그래밍에 대한 실무형 안내서이다. 문법과 구조를 넘어 실세계에서 사용되는 사례를 제공한다. 파일 처리, 네트워킹, 커널 수준 프로그래밍에 대한 러스트 구현을 탐험하면서 병렬성과 동시성에 대한 놀라운 기법들을 발견할 수 있다. 이 과정에서 가비지 컬렉터 없이 메모리를 관리하기 위한 러스트의 독특한 ‘대여 검사기’ 모델을 이해하게 될 것이다.

· 러스트 프로그래밍의 기본 문법과 특징
· 시스템 프로그래밍에 필요한 기본 개념
· 러스트 데이터 타입과 오류 처리 기능 구성 방법
· 명령행 유틸리티 만들기
· 키-값 저장소 만들기
· 네트워크 스택 구현하기
· NTP 클라이언트 만들기
· 운영 체제 커널 만들고 컴파일하기
저자

팀맥나마라

TimMcNamara
자연어처리,텍스트마이닝,기계학습과인공지능분야에관심이많은프로그래머다.뉴질랜드오픈소스그룹에서활발하게활동하고있다.

목차

1장러스트소개
1.1러스트는어디에사용되는가?
1.2러스트를실무에서추천하기
1.3언어맛보기
-1.3.1“Hello,world!”프로그램을편법으로만들어보기
-1.3.2첫번째러스트프로그램
1.4이책의소스코드다운로드
1.5러스트의생김새와느낌
1.6러스트는어떤언어인가?
-1.6.1러스트의목표:안전성
-1.6.2러스트의목표:생산성
-1.6.3러스트의목표:통제력
1.7러스트의큰특징
-1.7.1성능
-1.7.2동시성
-1.7.3메모리효율성
1.8러스트의단점
-1.8.1순환데이터구조
-1.8.2컴파일시간
-1.8.3엄격성
-1.8.4언어의크기
-1.8.5과대광고
1.9TLS보안사례연구
-1.9.1하트블리드
-1.9.2gotofail
1.10러스트는어디에잘맞을까?
-1.10.1명령행유틸리티
-1.10.2데이터처리
-1.10.3애플리케이션확장
-1.10.4자원이제한된환경
-1.10.5서버애플리케이션
-1.10.6데스크톱애플리케이션
-1.10.7데스크톱
-1.10.8모바일
-1.10.9웹
-1.10.10시스템프로그래밍
1.11러스트의숨은특징:커뮤니티
1.12러스트경구
요약

1부러스트언어의특색
2장러스트언어의기초
2.1실행프로그램만들기
-2.1.1rustc로단일파일을컴파일하기
-2.1.2카고로러스트프로젝트컴파일하기
2.2러스트문법개요
-2.2.1변수정의와함수호출
2.3숫자
-2.3.1정수와부동소수점수
-2.3.2이진,팔진,십육진법을이용하는정수
-2.3.3수의비교
-2.3.4유리수,복소수그리고다른숫자타입
2.4흐름제어
-2.4.1for:반복의중심축
-2.4.2continue:현재반복의남은부분을건너뛰기
-2.4.3while:조건의상태가바뀔때까지반복하기
-2.4.4loop:러스트반복구성의기본
-2.4.5break:반복문끝내기
-2.4.6if,ifelse그리고else:조건분기
-2.4.7match:타입패턴매칭
2.5함수정의
2.6참조사용
2.7프로젝트:망델브로집합출력하기
2.8고급함수정의
-2.8.1명시적인수명애너테이션
-2.8.2제네릭함수
2.9grep-lite만들기
2.10배열,슬라이스,벡터로리스트만들기
-2.10.1배열
-2.10.2슬라이스
-2.10.3벡터
2.11서드파티코드사용하기
-2.11.1정규식지원추가하기
-2.11.2서드파티크레이트의문서를로컬에서생성하기
-2.11.3rustup으로러스트툴체인관리하기
2.12명령행인자지원
2.13파일에서읽어들이기
2.14표준입력에서읽기
요약

3장복합데이터타입
3.1보통함수를이용하여API를실험하기
3.2struct로파일모델링하기
3.3impl로구조체에메서드추가하기
-3.3.1new()를구현하여객체생성을간략화하기
3.4오류반환
-3.4.1알려진전역변수를수정하기
-3.4.2Result반환타입을이용하기
3.5열거형을정의하고사용하기
-3.5.1내부상태를관리하는데열거형사용하기
3.6공통동작을트레이트로정의하기
-3.6.1Read트레이트만들기
-3.6.2자신만의타입에std::fmt::Display구현하기
3.7자신이만든타입공개하기
-3.7.1비공개데이터보호하기
3.8프로젝트의인라인문서만들기
-3.8.1rustdoc으로한소스파일의문서만들기
-3.8.2카고로크레이트와의존성에대한문서만들기
요약

4장수명,소유권,대여
4.1모의큐브위성지상관제소구현하기
-4.1.1첫번째수명이슈와의조우
-4.1.2원시타입의특수한행위
4.2이장에서쓰이는그림에대한가이드
4.3소유자는무엇인가?책임을갖고있는가?
4.4소유권이동방식
4.5소유권문제해결하기
-4.5.1완전한소유권이필요하지않을때참조를사용하라
-4.5.2오래지속되는값은더적게사용하라
-4.5.3값의사본만들기
-4.5.4데이터를특별한타입으로감싸기
요약


2부시스템프로그래밍이해하기
5장데이터심화
5.1비트패턴과타입
5.2정수의수명
-5.2.1엔디언이해하기
5.3십진수표현하기
5.4부동소수점수
-5.4.1f32의내부들여다보기
-5.4.2부호비트를분리하기
-5.4.3지수부분리하기
-5.4.4가수부분리하기
-5.4.5부동소수점수해부하기
5.5고정소수점수형식
5.6임의의바이트로부터난수확률을만들어내기
5.7CPU를구현해함수역시데이터임을입증하기
-5.7.1CPURIA/1:가산기
-5.7.2CPURIA/1전체코드:가산기
-5.7.3CPURIA/2:곱셈기
-5.7.4CPURIA/3:호출자
-5.7.5CPU4:나머지를추가하기
요약

6장메모리
6.1포인터
6.2러스트의참조와포인터타입탐험하기
-6.2.1러스트의원시포인터
-6.2.2러스트의포인터생태계
-6.2.3스마트포인터를이루는블록
6.3프로그램에데이터를위한메모리제공하기
-6.3.1스택
-6.3.2힙
-6.3.3동적메모리할당이란?
-6.3.4동적메모리할당의영향분석하기
6.4가상메모리
-6.4.1배경설명
-6.4.21단계:프로세스가자신의메모리를조사하게하기
-6.4.3가상주소를물리주소로변환하기
-6.4.42단계:운영체제를이용해주소공간을조사하기
-6.4.53단계:프로세스메모리를읽고쓰기
요약

7장파일과저장소
7.1파일형식이란?
7.2데이터저장을위해독자적인파일형식만들기
-7.2.1serde와bincode형식으로데이터를디스크에저장하기
7.3hexdump복제품구현하기
7.4러스트의파일작업
-7.4.1러스트에서파일을열고파일의모드를제어하기
-7.4.2std::fs::Path를사용해타입안전한방법으로파일시스템과상호작용하기
7.5로그구조의추가전용저장구조를가진키-값저장소구현하기
-7.5.1키-값모델
-7.5.2actionkvv1:명령행인터페이스를가진인메모리키-값저장소
7.6actionkvv1:프런트엔드코드
-7.6.1조건부컴파일로컴파일되는내용을조정하기
7.7actionkv의핵심이해하기:libactionkv크레이트
-7.7.1ActionKV구조체초기화
-7.7.2개별레코드처리하기
-7.7.3다중바이트바이너리데이터를보장된바이트순서로디스크에쓰기
-7.7.4I/O에러를체크섬으로검증하기
-7.7.5기존데이터베이스에새로운키-값쌍삽입하기
-7.7.6actionkv전체코드
-7.7.7HashMap과BTreeMap으로키와값을다루기
-7.7.8HashMap생성과값채우기
-7.7.9HashMap과BTreeMap에서값을검색하기
-7.7.10HashMap과BTreeMap중하나를고르기
-7.7.11actionkvv2.0에데이터베이스색인추가하기
요약

8장네트워킹
8.1일곱단락으로네트워크요약하기
8.2reqwest를이용하여HTTPGET요청만들기
8.3트레이트객체
-8.3.1트레이트객체로무엇이가능한가?
-8.3.2트레이트객체는무엇인가?319
-8.3.3작은롤플레잉게임만들기:rpg프로젝트
8.4TCP
-8.4.1포트번호란?
-8.4.2호스트이름을IP주소로바꾸기
8.5라이브러리에대한인간공학적오류처리
-8.5.1문제:다양한에러타입의반환이불가능하다
-8.5.2다운스트림오류를독자적인오류타입을정의하여감싸기
-8.5.3unwrap()과expect()로속이기
8.6MAC주소
-8.6.1MAC주소생성하기
8.7러스트의열거형으로상태기계구현하기
8.8원시TCP
8.9가상네트워킹장치만들기
8.10‘원시’HTTP
요약

9장시간과시간관리
9.1배경지식
9.2시간의원천
9.3정의
9.4시간인코딩하기
-9.4.1시간대표현하기
9.5clockv0.1.0:시간을알리는방법을애플리케이션에가르치기
9.6clockv0.1.1:ISO8601과이메일표준을준수하도록타임스탬프형식화하기
-9.6.1더다양한아키텍처를지원하도록clockv0.1.0코드리팩터링
-9.6.2시간형식화하기
-9.6.3완전한명령행인터페이스제공하기
-9.6.4clockv0.1.1:전체프로젝트
9.7clockv0.1.2:시간설정
-9.7.1공통동작
-9.7.2libc를이용하는운영체제에서시간설정하기
-9.7.3마이크로소프트윈도우에서시간설정
-9.7.4clockv0.1.2:전체코드
9.8오류처리향상시키기
9.9clock0.1.3:네트워크시간프로토콜로클록간차이해결하기
-9.9.1NTP요청을보내고응답을해석하기
-9.9.2서버응답에따른로컬시간조정
-9.9.3다른정밀도와기원을사용하는시간표현간변환
-9.9.4clockv0.1.3:전체코드
요약

10장프로세스,스레드,컨테이너
10.1익명함수
10.2스레드생성하기
-10.2.1클로저소개
-10.2.2스레드생성하기
-10.2.3적은스레드를생성했을때의영향
-10.2.4많은스레드를생성했을때의영향
-10.2.5결과재현하기
-10.2.6공유변수
10.3클로저와함수의차이
10.4다중스레드파서와코드생성기에서절차적으로생성된아바타
-10.4.1render-hex와해당출력을실행하는방법
-10.4.2단일스레드render-hex오버뷰
-10.4.3논리적작업별스레드생성
-10.4.4스레드풀과작업대기열이용하기
10.5동시성과작업가상화
-10.5.1스레드
-10.5.2콘텍스트전환이란?
-10.5.3프로세스
-10.5.4웹어셈블리
-10.5.5컨테이너
-10.5.6결국운영체제를사용하는이유는무엇인가?<