이미 소장하고 있다면 판매해 보세요.
|
옮긴이 머리말 ix
베타리더 후기 xii 시작하며 xiv 감사의 글 xxii 표지에 대하여 xxiv CHAPTER 1 위험한 진실: true와 false 1 1.1 시작하기: ‘Hello, world!’ 2 1.2 러스트 프로젝트 디렉터리 구성하기 3 1.3 카고로 프로젝트 만들고 실행하기 4 1.4 통합 테스트 작성하고 실행하기 8 __1.4.1 프로젝트 의존성 추가하기 12 / 1.4.2 프로그램 종룟값 이해하기 13 __1.4.3 프로그램 출력 테스트하기 17 / 1.4.4 프로그램을 이어주는 종룟값 18 요약 19 CHAPTER 2 메아리 테스트: echo 21 2.1 echo의 작동 방식 22 2.2 시작하기 25 __2.2.1 명령줄 인수에 접근하기 26 / 2.2.2 clap을 의존성으로 추가하기 29 __2.2.3 clap으로 명령줄 인수 파싱하기 31 / 2.2.4 프로그램 출력 생성하기 35 2.3 통합 테스트 작성하기 40 __2.3.1 테스트 출력 파일 생성하기 41 / 2.3.2 프로그램 출력 비교하기 43 __2.3.3 Result 타입 사용하기 44 2.4 clap 파생 사용하기 48 요약 51 CHAPTER 3 캣워크 위에서: cat 52 3.1 cat의 작동 방식 53 3.2 시작하기 58 __3.2.1 테스트로 시작하기 58 / 3.2.2 매개변수 정의하기 60 __3.2.3 파일 인수 반복 처리하기 65 / 3.2.4 파일 또는 STDIN 열기 67 __3.2.5 테스트 스위트 사용하기 71 3.3 설루션 75 __3.3.1 파일의 내용을 줄 단위로 읽기 75 / 3.3.2 줄 번호 인쇄하기 76 3.4 한 걸음 더 나아가기 79 요약 80 CHAPTER 4 두통: head 81 4.1 head의 작동 방식 82 4.2 시작하기 85 __4.2.1 인수 정의하기 90 / 4.2.2 입력 파일 처리하기 92 __4.2.3 바이트 읽기 vs. 문자 읽기 94 4.3 설루션 95 __4.3.1 파일의 내용을 한 줄씩 읽기 96 / 4.3.2 파일을 읽는 동안 줄 끝을 유지하기 96 __4.3.3 파일에서 바이트 읽기 98 / 4.3.4 파일 헤더 인쇄하기 101 4.4 한 걸음 더 나아가기 102 요약 103 CHAPTER 5 어머니께 전할 말: wc 104 5.1 wc의 작동 방식 105 5.2 시작하기 110 __5.2.1 파일 반복 처리하기 116 __5.2.2 파일 요소의 수를 세는 함수 작성하고 테스트하기 118 5.3 설루션 121 __5.3.1 파일이나 STDIN의 요소 수 세기 122 / 5.3.2 출력 형식화하기 124 5.4 한 걸음 더 나아가기 130 요약 131 CHAPTER 6 유일무이의 소굴: uniq 133 6.1 uniq의 작동 방식 134 6.2 시작하기 139 __6.2.1 인수 정의하기 140 / 6.2.2 프로그램 테스트하기 143 __6.2.3 입력 파일 처리하기 148 6.3 설루션 150 6.4 한 걸음 더 나아가기 155 요약 156 CHAPTER 7 주운 사람이 임자: find 157 7.1 find의 작동 방식 158 7.2 시작하기 164 __7.2.1 인수 정의하기 165 / 7.2.2 인수의 유효성 검사하기 171 __7.2.3 전부 찾아내기 173 7.3 설루션 175 7.4 조건부 테스트: 유닉스 vs. 윈도우 182 7.5 한 걸음 더 나아가기 184 요약 186 CHAPTER 8 면도와 이발: cut 188 8.1 cut의 작동 방식 189 8.2 시작하기 194 __8.2.1 인수 정의하기 195 / 8.2.2 구분 기호의 유효성 검사하기 201 __8.2.3 위치 목록 파싱하기 요구 사항 203 / 8.2.4 위치 목록 파싱하기 설루션 208 8.2.5 문자 또는 바이트 추출하기 212 / 8.2.6 구분 기호로 분리된 텍스트 파싱하기 214 8.3 설루션 217 __8.3.1 문자열에서 문자 선택하기 217 / 8.3.2 문자열에서 바이트 선택하기 219 __8.3.3 csv::StringRecord에서 필드 선택하기 221 / 8.3.4 끝판왕 223 8.4 한 걸음 더 나아가기 225 요약 226 CHAPTER 9 잭 더 그레퍼: grep 227 9.1 grep의 작동 방식 228 9.2 시작하기 232 __9.2.1 인수 정의하기 233 / 9.2.2 검색할 파일 찾기 240 __9.2.3 입력에서 매칭되는 줄 찾기 243 9.3 설루션 248 9.4 한 걸음 더 나아가기 252 요약 253 CHAPTER 10 보스턴 커먼: comm 254 10.1 comm의 작동 방식 254 10.2 시작하기 258 __10.2.1 인수 정의하기 259 / 10.2.2 입력 파일 검증하고 열기 264 __10.2.3 파일 처리하기 266 10.3 설루션 268 10.4 한 걸음 더 나아가기 276 요약 277 CHAPTER 11 테일러 스위프트: tail 278 11.1 tail의 작동 방식 279 11.2 시작하기 284 __11.2.1 인수 정의하기 284 / 11.2.2 명령줄 인수를 파싱하고 유효성 검사하기 287 __11.2.3 양수와 음수 수치 인수 파싱하기 290 __11.2.4 정규 표현식을 이용해서 정수와 옵션으로 붙는 기호 매칭하기 294 __11.2.5 파일 처리하기 298 / 11.2.6 파일의 전체 줄과 바이트 수 세기 298 __11.2.7 인쇄할 시작 줄 찾기 300 / 11.2.8 인쇄할 시작 바이트 찾기 302 __11.2.9 대용량 입력 파일을 가지고 프로그램 테스트하기 303 11.3 설루션 304 __11.3.1 파일의 전체 줄과 바이트 수 세기 304 / 11.3.2 시작 색인 찾기 305 __11.3.3 줄 인쇄하기 306 / 11.3.4 바이트 인쇄하기 308 __11.3.5 설루션 벤치마크하기 310 11.4 한 걸음 더 나아가기 313 요약 313 CHAPTER 12 행운아: fortune 314 12.1 fortune의 작동 방식 315 12.2 시작하기 319 __12.2.1 인수 정의하기 320 / 12.2.2 입력 소스 찾기 326 / 12.2.3 운세 파일 읽기 330 __12.2.4 무작위로 운세 고르기 332 / 12.2.5 패턴과 매칭되는 레코드 인쇄하기 334 12.3 설루션 335 12.4 한 걸음 더 나아가기 341 요약 341 CHAPTER 13 라스칼리: cal 343 13.1 cal의 작동 방식 344 13.2 시작하기 347 __13.2.1 인수 정의하고 검증하기 347 / 13.2.2 프로그램 작성하기 358 13.3 설루션 361 13.4 한 걸음 더 나아가기 366 요약 367 CHAPTER 14 엘에스 섬: ls 368 14.1 ls의 작동 방식 369 14.2 시작하기 372 __14.2.1 인수 정의하기 373 / 14.2.2 파일 찾기 377 / 14.2.3 긴 목록 형식화하기 382 __14.2.4 8진수로 된 권한 표시하기 384 / 14.2.5 긴 형식 테스트하기 388 14.3 설루션 390 14.4 테스트 작성 시 참고 사항 397 14.5 한 걸음 더 나아가기 400 요약 401 에필로그 402 찾아보기 404 |
Ken Youens-Clark
켄 유엔스-클락의 다른 상품
조성만의 다른 상품
|
한 언어에 능숙해지려면 그 언어로 많은 프로그램을 작성해봐야 한다. (…) 러스트는 이제 막 등장한 새로운 언어이며 아마 여러분은 이 책이 어떤 내용을 담고 있는지 알아보려고 집어 들었을 것이다. 이 책은 러스트를 다루는 참고서가 아니다. 그런 책은 꽤 훌륭한 게 많이 나와 있다. 그보다는 여러분에게 익숙한 작은 프로그램을 많이 작성해보도록 이끌어주는 책을 썼다. 러스트는 학습곡선이 상당히 가파르기로 유명하지만, 필자는 이런 식의 접근이 언어의 생산성을 빠르게 높이는 데 도움이 되리라고 믿는다.
--- p.xiv 가장 먼저 해야 할 일은 인쇄할 명령줄 인수를 가져오는 것이다. 러스트에서는 std::env::args(https://oreil.ly/4lJGE)를 사용해서 해결할 수 있다. 1장에서는 외부 프로세스를 처리하기 위해서 std::process 크레이트를 사용했다. 여기서는 프로그램이 인수를 찾을 수 있는 환경(environment)과 상호작용하기 위해서 std::env를 사용한다. 문서에서 이 함수를 찾아보면 Args 타입으로 된 무언가를 반환한다는 걸 알 수 있다. --- p.26 다들 예상했겠지만 이번에 작성해볼 프로그램의 이름은 headr(헤더라고 읽는다)라고 하겠다. 먼저 cargo new headr를 실행한 다음 Cargo.toml에 다음 의존성을 추가한다. (…) 04_headr/tests 디렉터리를 프로젝트 디렉터리에 복사한 다음 cargo test를 실행한다. 현재는 테스트가 전부 실패해야 한다. 동의한다면 여러분의 임무는 이들 테스트를 통과하는 프로그램을 작성하는 것이다. Args 스트럭트로 매개변수를 세 개 받는 다음 코드로 src/main.rs 작성을 시작하길 권한다. --- pp.85-86 이제 필자가 wcr 프로그램을 작성하기까지 거쳐온 과정을 살펴보자. 이 문제는 다양한 방법으로 해결할 수 있다는 점을 명심하자. 여러분의 코드가 테스트를 통과하고 BSD 버전의 wc와 동일한 결과를 산출하는 한 잘 작동하는 것이니 해냈다는 자부심을 가져도 좋다. (…) count 함수가 미완성인 채로 남아 있으므로 여기서부터 시작하겠다. 3장에서 이야기했다시피 BufRead::lines(https://oreil.ly/KhmCp)는 줄 끝을 제거하는데, 윈도우에서 파일의 새 줄은 2바이트(\r\n)인 반면 유닉스의 새 줄은 1바이트(\n)이므로 여기서는 사용하지 않으려 한다. 4장에서 BufRead::read_line(https://oreil.ly/aJFkc)을 사용하는 코드를 일부 복사해다가 각 줄을 버퍼로 읽어오면 된다. --- pp.121-122 첫 번째 위치 인수는 입력 파일로 두 번째 위치 인수는 출력 파일로 해석해야 한다. clap은 위치 인수 앞뒤에 있는 옵션을 처리할 수 있다는 걸 기억하자. $ cargo run -- tests/inputs/one.txt out --count Args { in_file: "tests/inputs/one.txt", out_file: Some("out"), count: true } 더 읽기 전에 잠시 시간을 내서 인수 파싱 부분을 완성하자. / 필자는 여러분이 앞에 있는 함수를 스스로 채워 넣은 정직하고 도덕적인 사람이라고 믿으므로, 이제 필자의 설루션을 공유하겠다. 먼저 빌더 패턴으로 된 다음 코드에는 use clap::{Arg, ArgAction, Command}가 필요하다. --- p.142 이번 장에서는 유닉스에서 가장 열일하는 프로그램이라 할 수 있는 리스트 명령 ls(엘에스라고 읽는다)의 러스트 복제본을 만들어본다. 필자는 디렉터리의 내용을 보거나 일부 파일의 크기나 권한을 알아보기 위한 용도로 이를 매일매일 하루에도 여러 번씩 사용한다. 오리지널 프로그램에는 삼십 여개 이상의 옵션이 있지만, 도전 과제 프로그램에서는 디렉터리의 내용을 인쇄하거나 파일 목록을 권한, 크기, 수정 시간과 함께 인쇄하는 등의 몇 가지 기능만 구현해본다. --- p.368 |
|
CLI 도구, 러스트로 다시 짭시다
ls나 cat 같은 CLI 도구는 유닉스 환경에서 수시로 쓰이는 명령이다. 이런 익숙한 도구는 핵심 기능을 직접 구현하는 것이 상대적으로 그리 어렵지는 않으므로, 새 언어를 익히기 위해 클론 코딩하기에 아주 좋은 소재다. 이 점에 착안해서 cat, grep, ls, echo, head, wc, uniq, find, cut, comm, tail, cal 등 우리에게 친숙한 14가지 CLI 도구를 러스트로 만들며 러스트를 진득하게 익히는 게 이 책의 주요 내용이다. 오리지널 도구들의 작동 방식과 요구 사항을 살펴본 다음, 독자는 저자의 코드를 참고해 자신만의 러스트 ‘도전 과제’ 프로그램을 만들어본다. 어떻게 프로그램을 시작하고, 메인 로직을 작성하며, 테스트를 거쳐 완성된 제품을 만드는지, 처음부터 끝까지 익힐 수 있다. 오류 처리, 파일 읽고 쓰기, 정규 표현식, 러스트의 타입과 구조체 등을 사용하는 데에도 익숙해질 것이다. 이 과정에서 저자는 테스트 주도 개발(TDD) 방식에 따라, 까다로우면서도 친절한 러스트 컴파일러를 십분 활용하는 좋은 러스트 개발 습관을 들이게 해준다. 빈말이 아니라, 14개 장에 걸쳐 프로그램을 총 14개 만들게 되어 있고 장마다 패턴이 비슷하므로 책을 정독한다면 반복 학습의 효과를 톡톡히 누릴 수 있을 것이다. 이 책의 원서는 2022년 최초 출간되었는데, 2024년 3월에 clap 크레이트 등의 최신 버전과 패턴을 도입하고 좀 더 ‘러스트다운’ 코드로 가다듬은 3쇄가 나왔다. 본 번역서는 원서 2쇄 기반으로 출간을 앞두고 있었으나, 3쇄 개정 소식을 듣고 눈물을 머금고 재작업해 3쇄 내용을 모두 반영했다. 주요 내용 ● 러스트 표준 라이브러리 및 데이터 타입을 사용해 시스템 프로그램 만들기 ● 러스트 프로그램 및 함수 작성과 테스트 ● stdin, stdout, stderr을 포함한 파일 읽기 및 쓰기 ● 명령줄 인수 문서화 및 유효성 검사 ● 우아하게 실패하는 프로그램 작성하기 ● 원시 텍스트 및 구분된 텍스트 구문 분석 ● 무작위성의 활용 및 제어 |
|
실세계 시나리오에서 러스트를 작성하는 연습을 하기 좋은 책입니다. 테스팅, 크레이트 사용, 일반적인 문제 해결에 대한 기술을 쌓을 수 있는 길을 잘 제시합니다. - 캐럴 니컬스 (Integer 32 공동창업자, 《러스트 프로그래밍 공식 가이드》 공동 저자)
|
|
많은 러스트 입문자가 일상 업무에 러스트를 적용하는 데 어려움을 겪습니다. 이 책은 이에 대한 훌륭한 해결책입니다. 러스트가 배울 가치가 있다는 것을 보여주는 유용한 유틸리티들을 만드는 법을 알려주는 책입니다. - 팀 맥나마라 (《한 줄 한 줄 짜면서 익히는 러스트 프로그래밍》 저자)
|