comprehensive-rust
이 과정은 Google의 Android 팀에서 사용하는 Rust 코스입니다. Rust를 빠르게 가르칠 수 있는 자료를 제공합니다.
파일 탐색기
- config.toml
- ja.yaml
- ko.yaml
- README.md
- zh-CN.yaml
- zh-TW.yaml
- action.yml
- action.yml
- action.yml
- action.yml
- build.sh
- build.yml
- check-msgid-changes.py
- check-msgid-changes.yml
- check-redirects.py
- check-redirects.yml
- labeler.yml
- lint.yml
- publish.yml
- CODEOWNERS
- dependabot.yml
- labeler.yml
- typos.toml
- course-content.rs
- course-schedule.rs
- mdbook-course.rs
- course.rs
- frontmatter.rs
- lib.rs
- markdown.rs
- replacements.rs
- timing_info.rs
- BUILD.bazel
- Cargo.toml
- README.md
- lib.rs
- main.rs
- BUILD.bazel
- Cargo.toml
- README.md
- ar.po
- bn.po
- da.po
- de.po
- el.po
- es.po
- fa.po
- fr.po
- id.po
- it.po
- ja.po
- ko.po
- pl.po
- pt-BR.po
- ro.po
- ru.po
- tr.po
- uk.po
- vi.po
- zh-CN.po
- zh-TW.po
- BirthdayInfo.aidl
- IBirthdayInfoProvider.aidl
- IBirthdayService.aidl
- Android.bp
- client.rs
- lib.rs
- server.rs
- Android.bp
- changing-definition.md
- changing-implementation.md
- client.md
- deploy.md
- implementation.md
- interface.md
- server.md
- service-bindings.md
- service.md
- arrays.md
- file-descriptor.md
- objects.md
- parcelables.md
- primitives.md
- birthday-service.md
- types.md
- main.rs
- Android.bp
- lib.rs
- main.rs
- Android.bp
- binary.md
- library.md
- android-build-cpp.md
- android-build-rust.md
- android-cpp-genrules.md
- bridge.md
- cpp-bridge.md
- cpp-exception.md
- generated-cpp.md
- overview.svg
- rust-bridge.md
- rust-result.md
- shared-enums.md
- shared-types.md
- type-mapping.md
- lib.rs
- Android.bp
- HelloWorld.java
- Android.bp
- c-library.md
- libbirthday.c
- libbirthday.h
- libbirthday_wrapper.h
- main.rs
- Android.bp
- main.c
- analyze.h
- analyze.rs
- Android.bp
- bindgen.md
- c-library.md
- hand-written.md
- run-our-binary.md
- rust-library.md
- rust.md
- cpp.md
- java.md
- with-c.md
- main.rs
- Android.bp
- lib.rs
- Android.bp
- BUILD.bazel
- Cargo.toml
- googletest.md
- googletest.rs
- mockall.rs
- mocking.md
- aidl.md
- bpfmt.sh
- build-rules.md
- build_all.sh
- interoperability.md
- logging.md
- setup.md
- testing.md
- config.toml
- main.rs
- Cargo.lock
- Cargo.toml
- vmbase.md
- exceptions.md
- bitflags.md
- driver.md
- registers.md
- config.toml
- asm.rs
- entry.S
- exceptions.rs
- exceptions.S
- exceptions_rt.rs
- idmap.S
- logger.rs
- main_improved.rs
- main_logger.rs
- main_minimal.rs
- main_psci.rs
- main_rt.rs
- main_safemmio.rs
- pl011.rs
- pl011_minimal.rs
- pl011_struct.rs
- Cargo.lock
- Cargo.toml
- image.ld
- Makefile
- using.md
- driver.md
- registers.md
- using.md
- traits.md
- using.md
- aarch64-rt.md
- better-uart.md
- entry-point.md
- exceptions.md
- inline-assembly.md
- logging.md
- mmio.md
- other-projects.md
- uart.md
- config.toml
- mod.rs
- board_support.rs
- hal.rs
- minimal.rs
- mmio.rs
- pac.rs
- typestate.rs
- Cargo.lock
- Cargo.toml
- Embed.toml
- board-support.md
- debugging.md
- embedded-hal.md
- hals.md
- mmio.md
- other-projects.md
- pacs.md
- probe-rs.md
- type-state.md
- main.rs
- BUILD.bazel
- Cargo.toml
- main.rs
- BUILD.bazel
- Cargo.toml
- aarch64-paging.md
- buddy_system_allocator.md
- spin.md
- tinyvec.md
- zerocopy.md
- alloc.md
- android.md
- aps.md
- microcontrollers.md
- minimal.md
- no_std.md
- useful-crates.md
- cell.md
- refcell.md
- borrowck.md
- BUILD.bazel
- Cargo.toml
- examples.md
- exercise.md
- exercise.rs
- interior-mutability.md
- shared.md
- solution.md
- code-samples.md
- running-locally.md
- rust-ecosystem.md
- build-scripts-which-generate-code.md
- build-scripts-which-take-arbitrary-actions.md
- checking-in.md
- configuring-cargo-toml.md
- configuring-gnrt-config-toml.md
- depending-on-a-crate.md
- downloading-crates.md
- generating-gn-build-rules.md
- keeping-up-to-date.md
- resolving-problems.md
- reviews-and-audits.md
- depending.md
- unsafe.md
- vscode.md
- vscode.png
- error-handling-png.md
- error-handling-qr.md
- error-handling.md
- example-bindings.md
- limitations-of-cxx.md
- using-cxx-in-chromium.md
- build-gn.md
- chromium-import-macro.md
- rust-gtest-interop.md
- adding-third-party-crates.md
- build-rules.md
- cargo.md
- interoperability-with-cpp.md
- policy.md
- setup.md
- testing.md
- capturing.md
- exercise.md
- exercise.rs
- solution.md
- syntax.md
- traits.md
- tokio.md
- async-await.md
- futures.md
- runtimes.md
- state-machine.md
- tasks.md
- channels.md
- join.md
- select.md
- client.rs
- server.rs
- BUILD.bazel
- Cargo.toml
- afternoon.md
- chat-app.md
- dining-philosophers.md
- dining-philosophers.rs
- solutions.md
- async-traits.md
- blocking-executor.md
- cancellation.md
- pin.md
- bounded.md
- senders-receivers.md
- unbounded.md
- examples.md
- marker-traits.md
- send.md
- sync.md
- arc.md
- example.md
- mutex.md
- BUILD.bazel
- Cargo.toml
- dining-philosophers.md
- dining-philosophers.rs
- link-checker.md
- link-checker.rs
- solutions.md
- plain.md
- scoped.md
- async-control-flow.md
- async-exercises.md
- async-pitfalls.md
- async.md
- channels.md
- send-sync.md
- shared-state.md
- sync-exercises.md
- threads.md
- welcome-async.md
- welcome.md
- labels.md
- for.md
- loop.md
- blocks-and-scopes.md
- break-continue.md
- BUILD.bazel
- Cargo.toml
- exercise.md
- exercise.rs
- functions.md
- if.md
- loops.md
- macros.md
- match.md
- solution.md
- anyhow.md
- BUILD.bazel
- Cargo.toml
- error.md
- exercise.md
- exercise.rs
- panics.md
- result.md
- solution.md
- thiserror.md
- try-conversions.md
- try.md
- config.toml
- main.rs
- Cargo.lock
- Cargo.toml
- Embed.toml
- config.toml
- exceptions.rs
- logger.rs
- main.rs
- pl031.rs
- build.rs
- Cargo.lock
- Cargo.toml
- Makefile
- memory.ld
- afternoon.md
- compass.md
- morning.md
- rtc.md
- solutions-afternoon.md
- solutions-morning.md
- bringing-it-together.md
- build-rules.md
- chwomium.png
- interoperability-with-cpp.md
- solutions.md
- testing.md
- third-party.md
- BUILD.bazel
- Cargo.toml
- dyn-trait.md
- exercise.md
- exercise.rs
- generic-data.md
- generic-functions.md
- generic-traits.md
- impl-trait.md
- solution.md
- trait-bounds.md
- benefits.md
- playground.md
- what-is-rust.md
- anatomy-of-a-doc-comment.md
- avoid-redundancy.md
- exercise.md
- library-vs-application-docs.md
- name-drop-signpost.md
- what-isnt-docs.md
- what-why-not-how-where.md
- who-are-you-writing-for.md
- clone.md
- copy.md
- debug.md
- display.md
- from-into.md
- hash.md
- partialeq-eq.md
- partialord-ord.md
- serde.md
- try-from-into.md
- as-and-ref.md
- by.md
- exercise.md
- from.md
- into.md
- is.md
- mut.md
- new.md
- to.md
- try.md
- with-closure.md
- with-constructor.md
- with-copy-setter.md
- common-traits.md
- naming-conventions.md
- meaningful-doc-comments.md
- predictable-api.md
- aliasing-xor-mutability.md
- generalizing-ownership.md
- phantomdata-01-types.md
- phantomdata-02-types-implemented.md
- phantomdata-03-lifetimes.md
- phantomdata-04-borrowedfd.md
- single-use-values.md
- extending-foreign-types.md
- extending-other-traits.md
- method-resolution-conflicts.md
- should-i-define-an-extension-trait.md
- trait-method-conflicts.md
- is-it-encapsulated.md
- parse-don-t-validate.md
- semantic-confusion.md
- drop_bomb.md
- drop_bomb_forget.md
- drop_guards.md
- drop_option.md
- drop_skipped.md
- forget_and_drop.md
- mutex.md
- scope_guard.md
- branded-01-motivation.md
- branded-02-phantomdata.md
- branded-03-impl.md
- branded-04-in-action.md
- mutex-guard.md
- permission-tokens.md
- complete.md
- property.md
- root.md
- struct.md
- typestate-advanced.md
- typestate-example.md
- typestate-generics.md
- typestate-generics.rs
- borrow-checker-invariants.md
- extension-traits.md
- newtype-pattern.md
- raii.md
- token-types.md
- typestate-pattern.md
- any-trait.md
- dyn-compatible.md
- dyn-trait.md
- dyn-vs-generics.md
- heterogeneous.md
- limits.md
- pitfalls.md
- composition.md
- inheritance.md
- problem-solving.md
- sealed-traits.md
- sealing-with-enums.md
- sticking-with-traits.md
- supertraits.md
- switch-perspective.md
- why-no-inheritance.md
- blanket-impls.md
- conditional-methods.md
- default-impls.md
- deriving-traits.md
- monomorphization.md
- orphan-rule.md
- sized.md
- supertraits.md
- trait-bounds.md
- traits.md
- from-oop-to-rust.md
- refresher.md
- foundations-api-design.md
- leveraging-the-type-system.md
- polymorphism.md
- welcome.md
- BUILD.bazel
- Cargo.toml
- collect.md
- exercise.md
- exercise.rs
- helpers.md
- intoiterator.md
- iterator.md
- motivation.md
- solution.md
- borrow-both.md
- borrow-one.md
- BUILD.bazel
- Cargo.toml
- exercise.md
- exercise.rs
- lifetime-elision.md
- multiple-borrows.md
- returning-borrows.md
- simple-borrows.md
- solution.md
- struct-lifetimes.md
- approaches.md
- BUILD.bazel
- Cargo.toml
- clone.md
- copy-types.md
- drop.md
- exercise.md
- exercise.rs
- move.md
- ownership.md
- review.md
- solution.md
- associated-types.md
- implementing.md
- supertraits.md
- BUILD.bazel
- Cargo.toml
- deriving.md
- exercise.md
- exercise.rs
- methods.md
- solution.md
- traits.md
- BUILD.bazel
- Cargo.toml
- encapsulation.md
- exercise.md
- exercise.rs
- filesystem.md
- modules.md
- paths.md
- solution.md
- visibility.md
- if-let.md
- let-else.md
- while-let.md
- BUILD.bazel
- Cargo.toml
- destructuring-enums.md
- destructuring-structs.md
- exercise.md
- exercise.rs
- infallible.md
- let-control-flow.md
- match.md
- solution.md
- BUILD.bazel
- Cargo.toml
- dangling.md
- exclusive.md
- exercise.md
- exercise.rs
- shared.md
- slices.md
- solution.md
- strings.md
- course-structure.md
- keyboard-shortcuts.md
- translations.md
- box.md
- BUILD.bazel
- Cargo.toml
- exercise.md
- exercise.rs
- rc.md
- solution.md
- trait-objects.md
- BUILD.bazel
- Cargo.toml
- casting.md
- comparisons.md
- default.md
- exercise.md
- exercise.rs
- from-and-into.md
- operators.md
- read-and-write.md
- solution.md
- BUILD.bazel
- Cargo.toml
- docs.md
- exercise.md
- exercise.rs
- hashmap.md
- option.md
- result.md
- solution.md
- std.md
- string.md
- vec.md
- BUILD.bazel
- Cargo.toml
- exercise.md
- exercise.rs
- lints.md
- other.md
- solution.md
- unit-tests.md
- arrays.md
- BUILD.bazel
- Cargo.toml
- destructuring.md
- exercise.md
- exercise.rs
- iteration.md
- solution.md
- tuples.md
- arithmetic.md
- BUILD.bazel
- Cargo.toml
- exercise.md
- exercise.rs
- hello-world.md
- inference.md
- solution.md
- values.md
- variables.md
- intrusive-linked-list.md
- cpp-and-c.md
- representations.md
- rust-and-c.md
- rust-and-cpp.md
- semantics.md
- abs.md
- c-library-example.md
- cpp-library-example.md
- language-differences.md
- language-interop.md
- rand.md
- README.md
- strategies.md
- type-safety.md
- arrays.md
- write-vs-assignment.md
- zeroed-method.md
- how-to-initialize-memory.md
- maybeuninit.md
- partial-initialization.md
- dangerous.md
- sometimes-necessary.md
- sometimes-useful.md
- unsafe-block.md
- unsafe-fn.md
- unsafe-impl.md
- unsafe-trait.md
- characteristics-of-unsafe-rust.md
- defining-unsafe-rust.md
- definition.md
- impact-on-workflow.md
- may_overflow.md
- purpose.md
- responsibility-shift.md
- two-roles.md
- warm-up.md
- cpp.md
- rust-offset.md
- rust-pin.md
- rust-raw-pointers.md
- rust.md
- definition-of-pin.md
- drop-and-not-unpin-worked-example.md
- phantompinned.md
- pin-and-drop.md
- README.md
- self-referential-buffer.md
- unpin-trait.md
- what-a-move-is.md
- what-pinning-is.md
- why-difficult.md
- crying-wolf.md
- documented-safety-preconditions.md
- encapsulated-unsafe.md
- exposed-unsafe.md
- safe.md
- corollary.md
- soundness.md
- unsoundness.md
- 3-shapes-of-sound-rust.md
- copying-memory.md
- rust-is-sound.md
- soundness-proof.md
- ascii.md
- common-preconditions.md
- defining.md
- determining.md
- getter.md
- references.md
- semantic-preconditions.md
- u8-to-bool.md
- Cargo.toml
- case-studies.md
- ffi.md
- initialization.md
- introduction.md
- memory-lifecycle.md
- motivations.md
- pinning.md
- rules-of-the-game.md
- safety-preconditions.md
- setup.md
- welcome.md
- calling.md
- extern-c.md
- rust.md
- BUILD.bazel
- Cargo.toml
- dereferencing.md
- exercise.md
- exercise.rs
- mutable-static.md
- solution.md
- unions.md
- unsafe-functions.md
- unsafe-traits.md
- unsafe.md
- aliases.md
- BUILD.bazel
- Cargo.toml
- const.md
- enums.md
- exercise.md
- exercise.rs
- named-structs.md
- solution.md
- static.md
- tuple-structs.md
- android.md
- bare-metal.md
- borrowing.md
- cargo.md
- chromium.md
- closures.md
- control-flow-basics.md
- credits.md
- error-handling.md
- generics.md
- glossary.md
- hello-world.md
- index.md
- iterators.md
- lifetimes.md
- memory-management.md
- methods-and-traits.md
- modules.md
- other-resources.md
- pattern-matching.md
- README.md
- references.md
- running-the-course.md
- smart-pointers.md
- std-traits.md
- std-types.md
- SUMMARY.md
- testing.md
- thanks.md
- tuples-and-arrays.md
- types-and-values.md
- unsafe-rust.md
- user-defined-types.md
- welcome-day-1-afternoon.md
- welcome-day-1.md
- welcome-day-2-afternoon.md
- welcome-day-2.md
- welcome-day-3-afternoon.md
- welcome-day-3.md
- welcome-day-4-afternoon.md
- welcome-day-4.md
- playground.ts
- slide.ts
- slide-exemptions.list.ts
- slides.list.ts
- generic-page.test.ts
- playground.test.ts
- redbox.test.ts
- slide-style-guide.test.ts
- speaker-notes.test.ts
- package-lock.json
- package.json
- README.md
- tsconfig.json
- wdio.conf-mdbook.ts
- wdio.conf.ts
- language-picker.css
- redbox.css
- rtl.css
- speaker-notes.css
- svgbob.css
- book.js
- head.hbs
- index.hbs
- redbox.js
- save-playgrounds.js
- speaker-notes.js
- blobstore.h
- blobstore.cc
- main.rs
- Android.bp
- BUILD
- build.rs
- Cargo.toml
- snippets.cc
- snippets.rs
- LICENSE-APACHE
- LICENSE-MIT
- overview.svg
- README.md
- book.js
- index.hbs
- LICENSE
- README.md
- README.md
- main.rs
- Cargo.toml
- README.md
- .bazelrc
- .bazelversion
- .gitattributes
- .gitignore
- book.toml
- BUILD.bazel
- Cargo.lock
- Cargo.toml
- CONTRIBUTING.md
- dprint.json
- GEMINI.md
- LICENSE
- LICENSE-CC-BY
- MODULE.bazel
- MODULE.bazel.lock
- README.md
- REPO.bazel
- rustfmt.toml
- STYLE.md
- TRANSLATIONS.md
# 설치 가이드
rust- Rust (rustup) latest
- Bazel (Bazelisk) latest
설치 및 실행 절차
git clone https://github.com/google/comprehensive-rust/
저장소를 클론합니다.
cd comprehensive-rust
프로젝트 디렉토리로 이동합니다.
cargo xtask install-tools
프로젝트에 필요한 도구들을 설치합니다.
관련 영상 가이드
Rust Training at Scale | Rust Global @ RustConf 2024
핵심 명령어
cargo xtask install-tools
프로젝트가 의존하는 모든 도구를 설치합니다.
cargo xtask serve
과정 내용을 확인할 수 있는 웹 서버를 시작합니다.
cargo xtask rust-tests
포함된 Rust 코드 스니펫을 테스트합니다.
cargo xtask build
book/ 디렉토리에 정적 버전의 과정을 생성합니다.
# CDN으로 사용하기
jsDelivrjsDelivr는 공개 GitHub 리포지토리를 별도 설정 없이 CDN으로 즉시 서빙합니다. 버전과 파일을 고르면 웹페이지에 바로 붙일 수 있는 링크와 예시 코드가 만들어집니다.
명령어 용어집
이 문서에서 사용된 명령어를 모아봤습니다. 낯선 명령어가 있다면 펼쳐서 확인해보세요.
cargo
설명 보기 ▼
cargo
Rust 프로젝트 및 모듈 종속성(크레이트)을 관리.
`build`와 같은 일부 하위 명령에는 자체 사용 설명서가 있습니다.
더 많은 정보: <https://doc.rust-lang.org/stable/cargo/>.
cargo search {{search_string}}
크레이트 검색:
cargo install {{crate_name}}
바이너리 크레이트 설치:
cargo install --list
설치된 바이너리 크레이트 나열:
git clone
설명 보기 ▼
git clone
Clone an existing repository.
git clone {{remote_repository_location}} {{path/to/directory}}
Clone an existing repository into a new directory (the default directory is the repository name):
git clone --recursive {{remote_repository_location}}
Clone an existing repository and its submodules:
git clone {{[-n|--no-checkout]}} {{remote_repository_location}}
Clone only the `.git` directory of an existing repository:
git config
설명 보기 ▼
git config
Manage custom configuration options for Git repositories.
These configurations can be local (for the current repository) or global (for the current user).
git config --global {{user.name|user.email}} "{{Your Name|[email protected]}}"
Globally set your name or email (this information is required to commit to a repository and will be included in all commits):
git config --{{local|global|system}} {{[-l|--list]}} --show-origin
List local, global, or system configuration entries and show their file location:
git config --global {{alias.unstage}} "reset HEAD --"
Set the global value of a given configuration entry (in this case an alias):
