From 3b21053ff284b8f56621ae202193caaee07b4359 Mon Sep 17 00:00:00 2001 From: Martin Geisler Date: Tue, 2 May 2023 08:02:28 +0200 Subject: [PATCH] Cleanup references to "Day 4" (#603) * Align outline with new spin-off course structure With the new structure, the section on Android is a spin-off course from the main 3-day course on Rust Fundamentals. The Bare-metal and Concurrency days are spin-off courses in the same way. * Explain new course structure * Align Bare-Metal welcome page with other deep dives * Merge Day 4 page into Course Structure page * Remove Day 4 Welcome page This aligns the Concurrency in Rust section with the Bare-Metal Rust deep dive. * Show subsections for Android deep dive This aligns the Rust in Android section with the other deep dives. * Clean up welcome page and README We now cover async Rust and the course is no longer a four day course. * Remove reference to the old Day 4 * Remove Day 4 references from exercises --- README.md | 10 +- book.toml | 11 ++ src/SUMMARY.md | 152 +++++++++--------- src/android.md | 2 +- src/{welcome-bare-metal.md => bare-metal.md} | 0 src/concurrency.md | 2 +- src/exercises/Cargo.toml | 4 +- .../{day-4/android.md => android/morning.md} | 4 +- .../dining-philosophers.md | 0 .../dining-philosophers.rs | 0 .../{day-4 => concurrency}/elevator.md | 0 .../elevator/Cargo.lock | 0 .../elevator/Cargo.toml | 0 .../elevator/src/building.rs | 0 .../elevator/src/controller.rs | 0 .../elevator/src/driver.rs | 0 .../elevator/src/main.rs | 0 .../{day-4 => concurrency}/link-checker.md | 0 .../{day-4 => concurrency}/link-checker.rs | 0 .../{day-4 => concurrency}/morning.md | 0 .../solutions-morning.md | 2 +- src/exercises/day-4/async-elevator.md | 1 - src/running-the-course.md | 4 +- src/running-the-course/course-structure.md | 51 +++++- src/running-the-course/day-4.md | 40 ----- src/welcome-day-4.md | 11 -- src/welcome.md | 24 +-- 27 files changed, 164 insertions(+), 154 deletions(-) rename src/{welcome-bare-metal.md => bare-metal.md} (100%) rename src/exercises/{day-4/android.md => android/morning.md} (69%) rename src/exercises/{day-4 => concurrency}/dining-philosophers.md (100%) rename src/exercises/{day-4 => concurrency}/dining-philosophers.rs (100%) rename src/exercises/{day-4 => concurrency}/elevator.md (100%) rename src/exercises/{day-4 => concurrency}/elevator/Cargo.lock (100%) rename src/exercises/{day-4 => concurrency}/elevator/Cargo.toml (100%) rename src/exercises/{day-4 => concurrency}/elevator/src/building.rs (100%) rename src/exercises/{day-4 => concurrency}/elevator/src/controller.rs (100%) rename src/exercises/{day-4 => concurrency}/elevator/src/driver.rs (100%) rename src/exercises/{day-4 => concurrency}/elevator/src/main.rs (100%) rename src/exercises/{day-4 => concurrency}/link-checker.md (100%) rename src/exercises/{day-4 => concurrency}/link-checker.rs (100%) rename src/exercises/{day-4 => concurrency}/morning.md (100%) rename src/exercises/{day-4 => concurrency}/solutions-morning.md (79%) delete mode 100644 src/exercises/day-4/async-elevator.md delete mode 100644 src/running-the-course/day-4.md delete mode 100644 src/welcome-day-4.md diff --git a/README.md b/README.md index 62b68d0c..16b10c34 100644 --- a/README.md +++ b/README.md @@ -4,10 +4,14 @@ [![GitHub contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/stargazers) -This repository has the source code for Comprehensive Rust 🦀, a four day Rust +This repository has the source code for Comprehensive Rust 🦀, a multi-day Rust course developed by the Android team. The course covers all aspects of Rust, -from basic syntax to generics and error handling. It also includes -Android-specific content on the last day. +from basic syntax to generics and error handling. It also includes deep dives on +[Android], [bare-metal], and [concurrency]. + +[Android]: https://google.github.io/comprehensive-rust/android.md +[bare-metal]: https://google.github.io/comprehensive-rust/bare-metal.md +[concurrency]: https://google.github.io/comprehensive-rust/concurrency.md Read the course at **https://google.github.io/comprehensive-rust/**. diff --git a/book.toml b/book.toml index d62d772c..eed02856 100644 --- a/book.toml +++ b/book.toml @@ -42,12 +42,23 @@ level = 0 editable = true [output.html.redirect] +# Redirects in the form of "old-path" = "new-path", where the new path +# is relative to the old path. "structure.html" = "running-the-course/course-structure.html" +"running-the-course/day-4.html" = "course-structure.html" "exercises/day-4/afternoon.html" = "exercises/day-4/android.html" "unsafe/unsafe-functions.html" = "calling-unsafe-functions.html" "generics/closures.html" = "traits/closures.html" "generics/impl-trait.html" = "traits/impl-trait.html" "generics/trait-bounds.html" = "traits/trait-bounds.html" +"welcome-bare-metal.html" = "bare-metal.html" +"welcome-day-4.html" = "concurrency.html" +"exercises/day-4/android.html" = "../android/morning.html" +"exercises/day-4/morning.html" = "../concurrency/morning.html" +"exercises/day-4/solutions-morning.html" = "../concurrency/solutions-morning.html" +"exercises/day-4/dining-philosophers.html" = "../concurrency/dining-philosophers.html" +"exercises/day-4/link-checker.html" = "../concurrency/link-checker.html" +"exercises/day-4/elevator.html" = "../concurrency/elevator.html" [output.exerciser] output-directory = "comprehensive-rust-exercises" diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 9908ebb0..7af17a07 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -3,7 +3,6 @@ [Welcome to Comprehensive Rust 🦀](welcome.md) - [Running the Course](running-the-course.md) - [Course Structure](running-the-course/course-structure.md) - - [Day 4](running-the-course/day-4.md) - [Keyboard Shortcuts](running-the-course/keyboard-shortcuts.md) - [Translations](running-the-course/translations.md) - [Using Cargo](cargo.md) @@ -178,85 +177,37 @@ - [Safe FFI Wrapper](exercises/day-3/safe-ffi-wrapper.md) -# Day 4: Morning +# Android ---- -- [Welcome](welcome-day-4.md) -- [Concurrency](concurrency.md) - - [Threads](concurrency/threads.md) - - [Scoped Threads](concurrency/scoped-threads.md) - - [Channels](concurrency/channels.md) - - [Unbounded Channels](concurrency/channels/unbounded.md) - - [Bounded Channels](concurrency/channels/bounded.md) - - [Shared State](concurrency/shared_state.md) - - [Arc](concurrency/shared_state/arc.md) - - [Mutex](concurrency/shared_state/mutex.md) - - [Example](concurrency/shared_state/example.md) - - [Send and Sync](concurrency/send-sync.md) - - [Send](concurrency/send-sync/send.md) - - [Sync](concurrency/send-sync/sync.md) - - [Examples](concurrency/send-sync/examples.md) -- [Exercises](exercises/day-4/morning.md) - - [Dining Philosophers](exercises/day-4/dining-philosophers.md) - - [Multi-threaded Link Checker](exercises/day-4/link-checker.md) +- [Welcome](android.md) +- [Setup](android/setup.md) +- [Build Rules](android/build-rules.md) + - [Binary](android/build-rules/binary.md) + - [Library](android/build-rules/library.md) +- [AIDL](android/aidl.md) + - [Interface](android/aidl/interface.md) + - [Implementation](android/aidl/implementation.md) + - [Server](android/aidl/server.md) + - [Deploy](android/aidl/deploy.md) + - [Client](android/aidl/client.md) + - [Changing API](android/aidl/changing.md) +- [Logging](android/logging.md) +- [Interoperability](android/interoperability.md) + - [With C](android/interoperability/with-c.md) + - [Calling C with Bindgen](android/interoperability/with-c/bindgen.md) + - [Calling Rust from C](android/interoperability/with-c/rust.md) + - [With C++](android/interoperability/cpp.md)) + - [With Java](android/interoperability/java.md) +- [Exercises](exercises/android/morning.md) -# Day 4: Afternoon (Android) + +# Bare Metal: Morning ---- -- [Android](android.md) - - [Setup](android/setup.md) - - [Build Rules](android/build-rules.md) - - [Binary](android/build-rules/binary.md) - - [Library](android/build-rules/library.md) - - [AIDL](android/aidl.md) - - [Interface](android/aidl/interface.md) - - [Implementation](android/aidl/implementation.md) - - [Server](android/aidl/server.md) - - [Deploy](android/aidl/deploy.md) - - [Client](android/aidl/client.md) - - [Changing API](android/aidl/changing.md) - - [Logging](android/logging.md) - - [Interoperability](android/interoperability.md) - - [With C](android/interoperability/with-c.md) - - [Calling C with Bindgen](android/interoperability/with-c/bindgen.md) - - [Calling Rust from C](android/interoperability/with-c/rust.md) - - [With C++](android/interoperability/cpp.md)) - - [With Java](android/interoperability/java.md) -- [Exercises](exercises/day-4/android.md) - -# Day 4: Afternoon (Async) - ----- - -- [Async Basics](async.md) - - [async/await](async/async-await.md) - - [Futures](async/futures.md) - - [Runtimes](async/runtimes.md) - - [Tokio](async/runtimes/tokio.md) - - [Tasks](async/tasks.md) - - [Async Channels](async/channels.md) -- [Control Flow](async/control-flow.md) - - [Join](async/control-flow/join.md) - - [Select](async/control-flow/select.md) -- [Pitfalls](async/pitfalls.md) - - [Blocking the Executor](async/pitfalls/blocking-executor.md) - - [Pin](async/pitfalls/pin.md) - - [Async Traits](async/pitfalls/async-traits.md) -- [Exercises](exercises/day-4/elevator.md) - -# Final Words - -- [Thanks!](thanks.md) -- [Other Resources](other-resources.md) -- [Credits](credits.md) - ----- - -# Bare Metal Rust: Morning - -- [Welcome](welcome-bare-metal.md) +- [Welcome](bare-metal.md) - [no_std](bare-metal/no_std.md) - [A Minimal Example](bare-metal/minimal.md) - [alloc](bare-metal/alloc.md) @@ -273,7 +224,7 @@ - [Exercises](exercises/bare-metal/morning.md) - [Compass](exercises/bare-metal/compass.md) -# Bare Metal Rust: Afternoon +# Bare Metal: Afternoon - [Application Processors](bare-metal/aps.md) - [Inline Assembly](bare-metal/aps/inline-assembly.md) @@ -299,7 +250,56 @@ - [Exercises](exercises/bare-metal/afternoon.md) - [RTC Driver](exercises/bare-metal/rtc.md) ---- + +# Concurrency: Morning + +---- + +- [Welcome](concurrency.md) +- [Threads](concurrency/threads.md) + - [Scoped Threads](concurrency/scoped-threads.md) +- [Channels](concurrency/channels.md) + - [Unbounded Channels](concurrency/channels/unbounded.md) + - [Bounded Channels](concurrency/channels/bounded.md) +- [Shared State](concurrency/shared_state.md) + - [Arc](concurrency/shared_state/arc.md) + - [Mutex](concurrency/shared_state/mutex.md) + - [Example](concurrency/shared_state/example.md) +- [Send and Sync](concurrency/send-sync.md) + - [Send](concurrency/send-sync/send.md) + - [Sync](concurrency/send-sync/sync.md) + - [Examples](concurrency/send-sync/examples.md) +- [Exercises](exercises/concurrency/morning.md) + - [Dining Philosophers](exercises/concurrency/dining-philosophers.md) + - [Multi-threaded Link Checker](exercises/concurrency/link-checker.md) + +# Concurrency: Afternoon + +- [Async Basics](async.md) + - [async/await](async/async-await.md) + - [Futures](async/futures.md) + - [Runtimes](async/runtimes.md) + - [Tokio](async/runtimes/tokio.md) + - [Tasks](async/tasks.md) + - [Async Channels](async/channels.md) +- [Control Flow](async/control-flow.md) + - [Join](async/control-flow/join.md) + - [Select](async/control-flow/select.md) +- [Pitfalls](async/pitfalls.md) + - [Blocking the Executor](async/pitfalls/blocking-executor.md) + - [Pin](async/pitfalls/pin.md) + - [Async Traits](async/pitfalls/async-traits.md) +- [Exercises](exercises/concurrency/elevator.md) + + +# Final Words + +---- + +- [Thanks!](thanks.md) +- [Other Resources](other-resources.md) +- [Credits](credits.md) + # Solutions @@ -312,6 +312,6 @@ - [Day 2 Afternoon](exercises/day-2/solutions-afternoon.md) - [Day 3 Morning](exercises/day-3/solutions-morning.md) - [Day 3 Afternoon](exercises/day-3/solutions-afternoon.md) - - [Day 4 Morning](exercises/day-4/solutions-morning.md) - [Bare Metal Rust Morning](exercises/bare-metal/solutions-morning.md) - [Bare Metal Rust Afternoon](exercises/bare-metal/solutions-afternoon.md) + - [Concurrency Morning](exercises/concurrency/solutions-morning.md) diff --git a/src/android.md b/src/android.md index d3066218..68444603 100644 --- a/src/android.md +++ b/src/android.md @@ -1,4 +1,4 @@ -# Android +# Welcome to Rust in Android Rust is supported for native platform development on Android. This means that you can write new operating system services in Rust, as well as extending diff --git a/src/welcome-bare-metal.md b/src/bare-metal.md similarity index 100% rename from src/welcome-bare-metal.md rename to src/bare-metal.md diff --git a/src/concurrency.md b/src/concurrency.md index d6bc5e37..5668336f 100644 --- a/src/concurrency.md +++ b/src/concurrency.md @@ -1,4 +1,4 @@ -# Fearless Concurrency +# Welcome to Concurrency in Rust Rust has full support for concurrency using OS threads with mutexes and channels. diff --git a/src/exercises/Cargo.toml b/src/exercises/Cargo.toml index ab23a752..cc36d85e 100644 --- a/src/exercises/Cargo.toml +++ b/src/exercises/Cargo.toml @@ -34,11 +34,11 @@ path = "day-3/simple-gui.rs" [[bin]] name = "dining-philosophers" -path = "day-4/dining-philosophers.rs" +path = "concurrency/dining-philosophers.rs" [[bin]] name = "link-checker" -path = "day-4/link-checker.rs" +path = "concurrency/link-checker.rs" [dependencies] reqwest = { version = "0.11.12", features = ["blocking"] } diff --git a/src/exercises/day-4/android.md b/src/exercises/android/morning.md similarity index 69% rename from src/exercises/day-4/android.md rename to src/exercises/android/morning.md index 21ada64c..b339b3bd 100644 --- a/src/exercises/day-4/android.md +++ b/src/exercises/android/morning.md @@ -1,7 +1,7 @@ # Exercises -For the last exercise, we will look at one of the projects you work with. Let us -group up and do this together. Some suggestions: +This is a group exercise: We will look at one of the projects you work with and +try to integrate some Rust into it. Some suggestions: * Call your AIDL service with a client written in Rust. diff --git a/src/exercises/day-4/dining-philosophers.md b/src/exercises/concurrency/dining-philosophers.md similarity index 100% rename from src/exercises/day-4/dining-philosophers.md rename to src/exercises/concurrency/dining-philosophers.md diff --git a/src/exercises/day-4/dining-philosophers.rs b/src/exercises/concurrency/dining-philosophers.rs similarity index 100% rename from src/exercises/day-4/dining-philosophers.rs rename to src/exercises/concurrency/dining-philosophers.rs diff --git a/src/exercises/day-4/elevator.md b/src/exercises/concurrency/elevator.md similarity index 100% rename from src/exercises/day-4/elevator.md rename to src/exercises/concurrency/elevator.md diff --git a/src/exercises/day-4/elevator/Cargo.lock b/src/exercises/concurrency/elevator/Cargo.lock similarity index 100% rename from src/exercises/day-4/elevator/Cargo.lock rename to src/exercises/concurrency/elevator/Cargo.lock diff --git a/src/exercises/day-4/elevator/Cargo.toml b/src/exercises/concurrency/elevator/Cargo.toml similarity index 100% rename from src/exercises/day-4/elevator/Cargo.toml rename to src/exercises/concurrency/elevator/Cargo.toml diff --git a/src/exercises/day-4/elevator/src/building.rs b/src/exercises/concurrency/elevator/src/building.rs similarity index 100% rename from src/exercises/day-4/elevator/src/building.rs rename to src/exercises/concurrency/elevator/src/building.rs diff --git a/src/exercises/day-4/elevator/src/controller.rs b/src/exercises/concurrency/elevator/src/controller.rs similarity index 100% rename from src/exercises/day-4/elevator/src/controller.rs rename to src/exercises/concurrency/elevator/src/controller.rs diff --git a/src/exercises/day-4/elevator/src/driver.rs b/src/exercises/concurrency/elevator/src/driver.rs similarity index 100% rename from src/exercises/day-4/elevator/src/driver.rs rename to src/exercises/concurrency/elevator/src/driver.rs diff --git a/src/exercises/day-4/elevator/src/main.rs b/src/exercises/concurrency/elevator/src/main.rs similarity index 100% rename from src/exercises/day-4/elevator/src/main.rs rename to src/exercises/concurrency/elevator/src/main.rs diff --git a/src/exercises/day-4/link-checker.md b/src/exercises/concurrency/link-checker.md similarity index 100% rename from src/exercises/day-4/link-checker.md rename to src/exercises/concurrency/link-checker.md diff --git a/src/exercises/day-4/link-checker.rs b/src/exercises/concurrency/link-checker.rs similarity index 100% rename from src/exercises/day-4/link-checker.rs rename to src/exercises/concurrency/link-checker.rs diff --git a/src/exercises/day-4/morning.md b/src/exercises/concurrency/morning.md similarity index 100% rename from src/exercises/day-4/morning.md rename to src/exercises/concurrency/morning.md diff --git a/src/exercises/day-4/solutions-morning.md b/src/exercises/concurrency/solutions-morning.md similarity index 79% rename from src/exercises/day-4/solutions-morning.md rename to src/exercises/concurrency/solutions-morning.md index e495b04d..ba74e3c8 100644 --- a/src/exercises/day-4/solutions-morning.md +++ b/src/exercises/concurrency/solutions-morning.md @@ -1,4 +1,4 @@ -# Day 4 Morning Exercise +# Concurrency Morning Exercise ## Dining Philosophers diff --git a/src/exercises/day-4/async-elevator.md b/src/exercises/day-4/async-elevator.md deleted file mode 100644 index eba3257d..00000000 --- a/src/exercises/day-4/async-elevator.md +++ /dev/null @@ -1 +0,0 @@ -# Exercises diff --git a/src/running-the-course.md b/src/running-the-course.md index 2d0a7401..db16d5a6 100644 --- a/src/running-the-course.md +++ b/src/running-the-course.md @@ -17,7 +17,7 @@ Before you run the course, you will want to: the audience you expect, or on your own expertise. 1. Decide on the dates. Since the course is large, we recommend that you - schedule the four days over two weeks. Course participants have said that + schedule the days over two weeks. Course participants have said that they find it helpful to have a gap in the course since it helps them process all the information we give them. @@ -41,8 +41,6 @@ Before you run the course, you will want to: and offer a solution, e.g., by showing people where to find the relevant information in the standard library. -1. Prepare anything you need to have available for the afternoon of day 4. - That is all, good luck running the course! We hope it will be as much fun for you as it has been for us! diff --git a/src/running-the-course/course-structure.md b/src/running-the-course/course-structure.md index 4c2180f9..e75da3f4 100644 --- a/src/running-the-course/course-structure.md +++ b/src/running-the-course/course-structure.md @@ -7,7 +7,56 @@ The course is fast paced and covers a lot of ground: * Day 1: Basic Rust, ownership and the borrow checker. * Day 2: Compound data types, pattern matching, the standard library. * Day 3: Traits and generics, error handling, testing, unsafe Rust. -* Day 4: Concurrency in Rust and seeing Rust in action. + +## Deep Dives + +In addition to the 3-day class on Rust Fundamentals, we cover some more +specialized topics: + +### Android + +The [Android Deep Dive](../android.md) is a half-day course on using Rust for +Android platform development. This includes interoperability wtih C, C++, and +Java. + +You will need an [AOSP checkout][1]. Make a checkout of the [course +repository][2] on the same machine and move the `src/android/` directory into +the root of your AOSP checkout. This will ensure that the Android build system +sees the `Android.bp` files in `src/android/`. + +Ensure that `adb sync` works with your emulator or real device and pre-build all +Android examples using `src/android/build_all.sh`. Read the script to see the +commands it runs and make sure they work when you run them by hand. + +[1]: https://source.android.com/docs/setup/download/downloading +[2]: https://github.com/google/comprehensive-rust + +### Bare-Metal + +The [Bare-Metal Deep Dive](../bare-metal.md): a full day class on using Rust for +bare-metal (embedded) development. Both microcontrollers and application +processors are covered. + +For the microcontroller part, you will need to buy the [BBC +micro:bit](https://microbit.org/) v2 development board ahead of time. Everybody +will need to install a number of packages as described on the [welcome +page](../bare-metal.md). + +### Concurrency + +The [Concurrency Deep Dive](../concurrency.md) is a full day class on classical +as well as `async`/`await` concurrency. + +You will need a fresh crate set up and the dependencies downloaded and ready to +go. You can then copy/paste the examples into `src/main.rs` to experiment with +them: + +```shell +cargo init concurrency +cd concurrency +cargo add tokio --features full +cargo run +``` ## Format diff --git a/src/running-the-course/day-4.md b/src/running-the-course/day-4.md deleted file mode 100644 index ab21933c..00000000 --- a/src/running-the-course/day-4.md +++ /dev/null @@ -1,40 +0,0 @@ -# Day 4 - -> This page is for the course instructor. - -The afternoon of the fourth day should cover a topic of your choice. Include -the topic in the announcement of the course, so that participants know what to -expect. - -This phase of the course is a chance for participants to see Rust in action on a -codebase they might be familiar with. You can choose from the topics already -defined here, or plan your own. - -Some topics need additional preparation: - -## Android - -If you chose Android for Day 4 afternoon, you will need an [AOSP checkout][1]. -Make a checkout of the [course repository][2] on the same machine and move the -`src/android/` directory into the root of your AOSP checkout. This will ensure -that the Android build system sees the `Android.bp` files in `src/android/`. - -Ensure that `adb sync` works with your emulator or real device and pre-build -all Android examples using `src/android/build_all.sh`. Read the script to see -the commands it runs and make sure they work when you run them by hand. - -## Async - -If you chose Async for Day 4 afternoon, you will need a fresh crate set up and -the dependencies downloaded and ready to go. You can then copy/paste the -examples into `src/main.rs` to experiment with them. - -```shell -cargo init day4 -cd day4 -cargo add tokio --features full -cargo run -``` - -[1]: https://source.android.com/docs/setup/download/downloading -[2]: https://github.com/google/comprehensive-rust diff --git a/src/welcome-day-4.md b/src/welcome-day-4.md deleted file mode 100644 index 65e00267..00000000 --- a/src/welcome-day-4.md +++ /dev/null @@ -1,11 +0,0 @@ -# Welcome to Day 4 - -This morning, we will focus on Concurrency: threads, channels, shared state, `Send` and `Sync`. -In the afternoon, we will have a chance to see Rust in action. - -
- -This is a good time to give an outline of what you will cover in the afternoon -section, as announced in the course offering. - -
diff --git a/src/welcome.md b/src/welcome.md index 760a873d..f39724d4 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -4,7 +4,7 @@ [![GitHub contributors](https://img.shields.io/github/contributors/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/graphs/contributors) [![GitHub stars](https://img.shields.io/github/stars/google/comprehensive-rust?style=flat-square)](https://github.com/google/comprehensive-rust/stargazers) -This is a four day Rust course developed by the Android team. The course covers +This is a three day Rust course developed by the Android team. The course covers the full spectrum of Rust, from basic syntax to advanced topics like generics and error handling. It also includes Android-specific content on the last day. @@ -15,25 +15,25 @@ about Rust and hope to: * Enable you to modify existing programs and write new programs in Rust. * Show you common Rust idioms. -On Day 4, we will cover Android-specific things such as: +The first three days show you the fundamentals of Rust. Following this, you're +invited to dive into one or more spezialized topics: -* Building Android components in Rust. -* AIDL servers and clients. -* Interoperability with C, C++, and Java. +* [Android](android.md): a half-day course on using Rust for Android platform + development (AOSP). This includes interoperability wtih C, C++, and Java. +* [Bare-metal](bare-metal.md): a full day class on using Rust for bare-metal + (embedded) development. Both microcontrollers and application processors are + covered. +* [Concurrency](concurrency.md): a full day class on concurrency in Rust. We + cover both classical concurrency (preemptively scheduling using threads and + mutextes) and async/await concurrency (cooperative multitasking using + futures). -It is important to note that this course does not cover Android **application** -development in Rust, and that the Android-specific parts are specifically about -writing code for Android itself, the operating system. ## Non-Goals Rust is a large language and we won't be able to cover all of it in a few days. Some non-goals of this course are: -* Learn how to use async Rust --- we'll only mention async Rust when - covering traditional concurrency primitives. Please see [Asynchronous - Programming in Rust](https://rust-lang.github.io/async-book/) instead for - details on this topic. * Learn how to develop macros, please see [Chapter 19.5 in the Rust Book](https://doc.rust-lang.org/book/ch19-06-macros.html) and [Rust by Example](https://doc.rust-lang.org/rust-by-example/macros.html) instead.