1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-07-01 04:34:52 +02:00
Commit Graph

1381 Commits

Author SHA1 Message Date
c07ac40f90 Split large unsafe function slide (#2406)
The old slice was doing several things at the same time: demonstrating
both external functions as well as unsafe Rust functions.

We now treat those two topics separately. In addition, the “Calling
Unsafe Functions” heading has become its own slide with a non-crashing
example that shows what can go wrong if an argument is misunderstood
in a call to an unsafe function. The old example didn’t actually
illustrate the danger clearly: it would produce mangled UTF-8 output,
which the Playground server refuses to print.

Part of #2445.

---------

Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
Co-authored-by: Andrew Walbran <qwandor@google.com>
2025-02-05 14:00:14 +00:00
abf9393e60 Remove trait bound on VerbosityFilter in the generic data types slide (#2603)
It's generally more idiomatic in Rust to not have trait bounds on the
data type itself. I think we better demonstrate how trait bounds are
used in impl blocks with generic data types in the impl block below the
struct definition. I've also added a speaker note to call this out if
students ask.
2025-02-03 13:57:24 -05:00
4218c95e8d cargo: bump the patch group in /src/bare-metal/aps/examples with 2 updates (#2616)
Bumps the patch group in /src/bare-metal/aps/examples with 2 updates:
[log](https://github.com/rust-lang/log) and
[cc](https://github.com/rust-lang/cc-rs).

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 18:41:42 +00:00
87d4701645 cargo: bump the patch group in /src/exercises/bare-metal/rtc with 2 updates (#2618)
Bumps the patch group in /src/exercises/bare-metal/rtc with 2 updates:
[log](https://github.com/rust-lang/log) and
[cc](https://github.com/rust-lang/cc-rs).

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 18:41:26 +00:00
a8d8d2eaa7 cargo: bump bitflags from 2.6.0 to 2.8.0 in /src/exercises/bare-metal/rtc in the minor group (#2617)
Bumps the minor group in /src/exercises/bare-metal/rtc with 1 update:
[bitflags](https://github.com/bitflags/bitflags).

Updates `bitflags` from 2.6.0 to 2.8.0

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 18:18:38 +00:00
0e5ee9db00 cargo: bump bitflags from 2.6.0 to 2.8.0 in /src/bare-metal/aps/examples in the minor group (#2615)
Bumps the minor group in /src/bare-metal/aps/examples with 1 update:
[bitflags](https://github.com/bitflags/bitflags).

Updates `bitflags` from 2.6.0 to 2.8.0

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 18:17:57 +00:00
010bd291c0 cargo: bump the patch group with 8 updates (#2614)
Bumps the patch group with 8 updates:

| Package | From | To |
| --- | --- | --- |
| [clap](https://github.com/clap-rs/clap) | `4.5.23` | `4.5.27` |
| [log](https://github.com/rust-lang/log) | `0.4.22` | `0.4.25` |
| [mdbook](https://github.com/rust-lang/mdBook) | `0.4.43` | `0.4.44` |
| [serde_json](https://github.com/serde-rs/json) | `1.0.134` | `1.0.138`
|
| [fantoccini](https://github.com/jonhoo/fantoccini) | `0.21.3` |
`0.21.4` |
| [thiserror](https://github.com/dtolnay/thiserror) | `2.0.9` | `2.0.11`
|
| [cxx](https://github.com/dtolnay/cxx) | `1.0.136` | `1.0.137` |
| [cxx-build](https://github.com/dtolnay/cxx) | `1.0.136` | `1.0.137` |

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-01 18:17:30 +00:00
347de61d13 Move the "Trait Bounds" slide right after "Generic Functions". (#2589)
The "Generic Data Types" slide now uses trait bounds, which makes it
very confusing to explain. (e.g., "ignore this trait bound stuff while I
explain why we need to stutter to describe the generic args on an impl
block").

Also in the "Generic Functions" slide, the speaker notes talks about how
we essentially need to treat the generic args as black boxes - this is
probably more important to address then talking about all the ways you
can make things generic.
2025-01-30 01:34:45 +00:00
deae2e2d53 Reduce vertical space slightly in UART examples (#2407)
Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
2025-01-27 13:40:48 -05:00
a846003665 Switch lifetime and variable names so they are different (#2586)
This helps clarify that the lifetime and variables names do not need to
match, but sticks to related themes (doc / document) for human clarity.

As suggested by @fw-immunant in
https://github.com/google/comprehensive-rust/pull/2585#pullrequestreview-2569184433,
which subsequently auto-merged.
2025-01-23 14:55:59 -08:00
9c03d51b74 Add a picture to Rc (#2583)
I suppose my `svgbob` skills leave a bit to be desired, but I think the
meaning is clear:


![image](https://github.com/user-attachments/assets/09fa2ebd-7364-4d23-bc97-6e7e81a9c82e)

Now that I look through the `Rc` implementation, there's a weak count
for every strong count, so the `weak: 0` here is inaccurate. But, maybe
this is too much of an implementation detail? Should I just concentrate
on strong refs? I suppose I could put a `...` in that upper-right box,
to suggest there's more going on here?
2025-01-23 09:28:20 -05:00
4ce87c5473 Improve tuple destructuring (#2582)
This slide had two code samples, neither of which had a `main` and thus
neither of which would run. This removes the first (which is redundant
to one a few slides earlier), adds a `main`, and expands the second to
use a 3-tuple.
2025-01-23 09:23:08 -05:00
b3734de08b Include the From trait in the generic traits slide (#2570)
This saves a bunch of tabbing back and forth from the docs to the slide.
2025-01-23 09:43:43 +01:00
b3c57e4cbf Be clear that the methods-and-traits exercise does not require generics (#2568)
When teaching the course, I got a little tripped up thinking students
would need to make the `VerbosityFilter` generic over `Logger`. Let's be
clearer that this is not required, and will be described later.

This also updates the generic-types slide to repeat the exercise,
completing that thought.
2025-01-23 09:40:59 +01:00
15e46379b1 Clarify struct-lifetimes slide (#2585)
In teaching the course, the verbal distinction between "doc" and "dog"
was not clear, so this PR moves away from those symbols.

This also makes the Highlight struct a little more substantial, and
replaces `erase` with a simple call to `drop` to keep the example short.
2025-01-23 09:35:11 +01:00
9f9f845acc Break closures into its own segment (#2574)
In teaching the course last week, we broke here, partly due to time
constraints, but partly because this is a pretty mind-bending topic to
tackle at the end of an information-dense day. A break helps, and
spreading the content over a few slides helps as well.

By the timings in the course, this leaves day 2 looking like

*Fundamentals // Day 2 Morning*
_1 hour and 55 minutes: (1 hour and 10 minutes short)_

* Welcome - _3 minutes_
* Pattern Matching - _45 minutes_
* Methods and Traits - _50 minutes_

*Fundamentals // Day 2 Afternoon*
_3 hours and 30 minutes ( *30 minutes too long*)_

* Welcome - _0 minutes_
* Generics - _45 minutes_
* Standard Library Types - _1 hour_
* Standard Library Traits - _1 hour_
* Closures - _20 minutes_

Maybe we should move generics to the morning session?
2025-01-23 09:32:59 +01:00
3b7442a498 Split let control flow into mutliple sub-slides (#2567)
There are three kinds of syntax here, making for a very long and
hard-to-navigate slide. Splitting it up helps!
2025-01-22 20:06:53 +01:00
f19bb8f10d Briefly touch on match ergonomics (#2581)
This is done in the speaker notes as it's a relatively minor point, but
one that students should have in the back of their mind when they
wonder, "hey, how does a `&Foo` match against `Foo` patterns??"
2025-01-22 17:47:23 +01:00
5b03ea6ca5 Add empty structs (#2569)
This should be quick, but introduces the syntax and the concept of a
ZST.
2025-01-22 17:45:01 +01:00
3cca4735c4 Add return statements to the Fibonacci exercise. (#2576)
At this point in the course, we have not explained return statements.
Better to have it set up to avoid questions!
2025-01-21 16:15:13 +00:00
8121e7de7c Split interior mutability, mention OnceCell/OnceLock (#2573)
These types are really only useful as a static or in a user-defined
type, neither of which are covered at this point.
2025-01-20 12:48:02 -05:00
5f7e0c3f64 Allow the 'unused' category of lints (#2571)
These sort of warnings can be distracting when commenting out a few
lines of code or demonstrating some other concept. They can be
re-enabled for a code block with `warnunused`.

I filed https://github.com/rust-lang/mdBook/issues/2527 to get behavior
like this upstream.
2025-01-20 12:47:50 -05:00
9fa1b645be U stands for Undefined (#2566) 2025-01-19 22:14:33 -05:00
68e1ebd865 Change Expression Evaluation exercise to 15m (#2561)
Fixes #2559.
2025-01-19 01:47:39 -05:00
f1ad41e2bc Add TODO to indicate let-else example should be rewritten (#2562)
Fixes #2473.
2025-01-19 01:47:33 -05:00
9e5c318a57 Fix minor inconsistencies and naming issues (#2563) 2025-01-17 01:53:37 -05:00
58bf01f1ef Updates to APS segment of Bare-Metal (#2560) 2025-01-17 10:43:46 +08:00
6dce638c6e Reorder type aliases (#2554) 2025-01-16 10:30:32 +01:00
fec5f2eb48 Update timings for first 'references' segment (#2553)
Based on a course session just completed. The instruction itself took
less time, but the exercise took longer.
2025-01-16 10:29:59 +01:00
5f447b403b Remove speaker note on "runtime evaluated constants" (#2555)
It's unclear what this would mean! It was introduced in 89ddb2c19.
2025-01-16 10:20:31 +01:00
3291cb6c62 Make const slide less silly (#2557)
A constant named ZERO that does not contain zero seems pretty silly!

This also shows an example of a const fn.
2025-01-16 10:18:29 +01:00
cb5409052a Add timing for const slide (#2556)
I think this was missed when it split from the static slide. In the last
course session, we spent a fair amount of time on this slide.
2025-01-16 10:18:12 +01:00
aa548f4431 Revert "Exercise: method and traits: change output" (#2548)
Reverts google/comprehensive-rust#2383

Since #2397 is merged, to align the goal in #2478, rollback this temp
workaround.
2025-01-15 10:22:48 +00:00
c04d2860e8 APS updates (#2528)
These are some minor updates from walking through the session myself.

* Add some context to the `entry.S` slide, which is otherwise a bit
terrifying for someone who does not speak ARM assembly.
 * Include a simple, fake example of MMIO.
* Add a "Using It" section to the minimal UART segment, parallel to the
better UART
* Better explanation of the `unwrap` calls in the logging example.
Unwrap is never "unsafe", so remove that word.
 * Allow dead code in some `.rs` files.
 * Remove redundant warning about use of memory before MMU setup.
 * Rephase text about buddy-system
 * Fix lint warning in spin slide.
2025-01-07 19:07:39 +00:00
3764569198 Update translations.md (#2538)
Remove duplicate line containing details about language translation and
it's contributors.
2025-01-07 12:26:19 +00:00
8233599741 Use clamp in bare-metal compass solution (#2537)
The custom function `cap` does the same as `Ord::clamp`, which was
introduced in Rust 1.50. Let's use the latter instead.

I've flashed the new program onto my microbit and can confirm it still
works as intended.
2025-01-07 12:54:58 +01:00
8173e5fd74 cargo: bump the minor group with 3 updates (#2534)
Bumps the minor group with 3 updates:
[tokio](https://github.com/tokio-rs/tokio),
[scraper](https://github.com/causal-agent/scraper) and
[http](https://github.com/hyperium/http).

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-02 08:52:58 +00:00
549391119b cargo: bump the patch group in /src/exercises/bare-metal/rtc with 2 updates (#2533)
Bumps the patch group in /src/exercises/bare-metal/rtc with 2 updates:
[chrono](https://github.com/chronotope/chrono) and
[cc](https://github.com/rust-lang/cc-rs).

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-02 09:52:09 +01:00
2c8786b392 cargo: bump cc from 1.2.2 to 1.2.6 in /src/bare-metal/aps/examples in the patch group (#2532)
Bumps the patch group in /src/bare-metal/aps/examples with 1 update:
[cc](https://github.com/rust-lang/cc-rs).

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-02 09:51:42 +01:00
ac7c0506fd Fix typo: build-essential, not build-essentials (#2527) 2025-01-02 09:41:16 +01:00
a0ef82ef7c cargo: bump the patch group with 12 updates (#2535)
Bumps the patch group with 12 updates:

| Package | From | To |
| --- | --- | --- |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.93` | `1.0.95` |
| [clap](https://github.com/clap-rs/clap) | `4.5.21` | `4.5.23` |
| [serde](https://github.com/serde-rs/serde) | `1.0.215` | `1.0.217` |
| [serde_json](https://github.com/serde-rs/json) | `1.0.133` | `1.0.134`
|
| [fantoccini](https://github.com/jonhoo/fantoccini) | `0.21.2` |
`0.21.3` |
| [glob](https://github.com/rust-lang/glob) | `0.3.1` | `0.3.2` |
| [tokio-util](https://github.com/tokio-rs/tokio) | `0.7.12` | `0.7.13`
|
| [zerocopy](https://github.com/google/zerocopy) | `0.8.11` | `0.8.14` |
| [thiserror](https://github.com/dtolnay/thiserror) | `2.0.3` | `2.0.9`
|
| [reqwest](https://github.com/seanmonstar/reqwest) | `0.12.9` |
`0.12.12` |
| [cxx](https://github.com/dtolnay/cxx) | `1.0.133` | `1.0.136` |
| [cxx-build](https://github.com/dtolnay/cxx) | `1.0.133` | `1.0.136` |

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-02 09:35:25 +01:00
665300e373 Update Chromium Rust policy (#2530)
Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
2024-12-28 21:08:34 +00:00
7f0c591b0b Rework iterator section (#2523) 2024-12-17 15:59:39 -08:00
e902b1ef60 Add a slide on match to control flow section (#2515) 2024-12-17 12:08:42 -08:00
2ff30edd93 Improve dangling reference example and move to its own slide (#2518)
The current example demonstrating how rustc prevents dangling references
is really gross and hard to read (my own fault lol, I wrote that
example). I finally realized that there's a much simpler, easier to read
way of expressing the same thing. I also moved this to its own slide
after the reference slides so that we can call it out as an early
example of the borrow checker. I then call back to this example in the
borrow checker slide to remind students that the aliasing rule isn't the
only thing the borrow checker is enforcing.
2024-12-17 14:44:33 -05:00
5bf04964f6 Fix the unit testing docs referring to integration tests (#2524)
The side bar is out of date, and also the the unit testing docs are
talking about integration tests. These tests are discussed on the next
slide in "Other Types of Tests".
2024-12-17 17:37:11 +00:00
fe554251cb Reframe FromIterator slide to focus on collect (#2516) 2024-12-16 14:37:02 -08:00
4663ec838e Rework the error handling exercise to be based on the expression evaluator exercise (#2521) 2024-12-16 14:36:35 -08:00
644f849bf8 Add speaker notes to bindgen slides (#2491)
Part of #1083.
2024-12-16 16:54:13 -05:00
dad8cadc6b Add speaker notes to Android build rules (#2492)
Part of #1083.
2024-12-16 16:54:04 -05:00