1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-03-25 15:38:01 +02:00

857 Commits

Author SHA1 Message Date
Martin Geisler
a99a86dc50
Update all dependencies (#1610)
This resolves a few Dependabot alerts on `zerocopy` and refreshes the
other direct dependencies.
2023-12-21 13:55:45 +00:00
Ning Chen
2fc3ddc34d
Add adb root for service deployment (#1550)
Otherwise
```
$ adb shell /data/local/tmp/birthday_server
thread 'main' panicked at birthday_service/src/server.rs:16:10:
Failed to register service: PERMISSION_DENIED
```
2023-12-21 14:29:18 +01:00
Ning Chen
01b4b28ff8
Link statically to avoid dynamic link error (#1544)
```
$ adb shell /data/local/tmp/hello_rust_with_dep
CANNOT LINK EXECUTABLE "/data/local/tmp/hello_rust_with_dep": library "libtextwrap.dylib.so" not found: needed by main executable
```
2023-12-21 14:27:14 +01:00
Ning Chen
a9eaa129cf
Add safety comment (#1553)
```
error: unsafe block missing a safety comment
  --> interoperability/bindgen/main.rs:11:5
   |
11 |     unsafe {
   |     ^^^^^^^^
   |
   = help: consider adding a safety comment on the preceding line
   = help: for further information visit https://rust-lang.github.io/rust-clippy
/master/index.html#undocumented_unsafe_blocks
   = note: requested on the command line with `-D clippy::undocumented-unsafe-bl
ocks`
```
2023-12-21 14:26:25 +01:00
Pavel Roskin
30f8e50b43
Fix typos (#1608) 2023-12-20 18:21:54 +00:00
Pavel Roskin
cf81b7a88d
Swap Err and OtherErr, it's Err that must implement From (#1596)
It's clear from the above text and example that the error type returned
by the outer function (`Err` in this case) must implement the `From`
trait to accept the error returned by the inner function (`OtherErr` in
this case).
2023-12-20 15:51:20 +00:00
Martin Huschenbett
568e78a5b0
Remove two unnecessary muts from the Rc example (#1603)
Neither `a` nor `b` need to be mutable in this example. Hence, I removed
them.
2023-12-20 10:47:35 -05:00
Martin Huschenbett
a369e108fc
Let BinaryTreeL::has take a reference (#1607)
Currently, `BinaryTree::has` takes its argument by value. This is a
pretty unrealistic API for a Rust library. Let's fix this and take the
argument by reference instead.
2023-12-20 10:44:33 -05:00
Martin Huschenbett
dce30e0e49
Make protobuf exercise slightly easier (#1605)
As @djmitche suggested in

https://github.com/google/comprehensive-rust/pull/1591#pullrequestreview-1782012715
it might be a little easier for the students if we give them a prefix of
the code required for `parse_field`. That's exactly what we do here.
2023-12-20 10:43:47 -05:00
Martin Huschenbett
8e4bb60023
Remove Copy bound from binary tree exercise (#1606)
There's absolutely no need for the element type of the binary tree to be
`Copy`. Let's remove this bound hence.
2023-12-20 10:41:56 -05:00
Martin Huschenbett
52bfb0c4a3
Fix a comment in the protobuf example (#1604)
In https://github.com/google/comprehensive-rust/pull/1591, I changed the
implementation of the protobuf example significantly. However, I forgot
to update a comment which is referred to the old style of
implementation. I'll this slip here.
2023-12-20 10:40:26 -05:00
Martin Huschenbett
0f0596da9d
Add directory tree to mod exercise solution (#1602)
The solution to the modules exercise comes with a bunch of files. I
think it would help the students to get a quick overview of the
directory structure we've chosen first.
2023-12-20 10:39:48 -05:00
Pavel Roskin
e60f56e8f2
Expand "thiserror and anyhow" slide (#1600)
Explain what traits `thiserror::Error` derives.

Explain how `.context()` and `.with_context()` operate on types that are
not aware of `anyhow`.

Resolves #1597.
2023-12-20 15:37:22 +00:00
Martin Huschenbett
26c088497f
Add missing mod declarations to modules solutions (#1601)
The solution for the modules exercise does not work since it is missing
a a few module declarations. Here, we add them.
2023-12-20 10:34:39 -05:00
Grzegorz Milka
c0dfd54f2c
fix: change "widley" to "widely" (#1599)
Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
2023-12-19 14:41:51 +00:00
Martin Huschenbett
a35841992e
Simplify some code in the parsing exercise (#1594)
`let Some(x) = E else { return None; }` is equivalent to
`let Some(x) = E?`. That latter is shorter and more idiomatic, so let's
use that.

A pattern of the form `c @ P1 | c @ P1` has the disadvantage that the
name `c` is repeated. Let's replace it with `c @ (P1 | P2)`.

An `x: Option<Result<T, E>>` can be handled more succinctly with
`x.ok_or(...)??`.
2023-12-18 10:03:10 -05:00
Chayim Refael Friedman
61f3e5fb51
Add explanation about when you should use each of the Fn* traits (#1579)
Beginners are confused by this often.

---------

Co-authored-by: Dustin J. Mitchell <dustin@v.igoro.us>
2023-12-15 15:22:59 +00:00
Martin Huschenbett
97a47cab78
Parse into data structures in protobuf example (#1591)
This is a suggestion for how we could make the protobuf exercise at the
end of day 3 better.

Generally speaking, the idea is to parse the protbuf bytes into data
types instead of only printing the parsing outcome to the console. To
make this a little more realistic, we also introduce a trait
`ProtoMessage` for message types.

I think this is more instructive than the current example. In
particular, we get to mess around with lifetimes. This might be a little
more complicated but can be a great opportunity for the students to tie
together different things they've learnt in the course so far.

What do you all think?
2023-12-15 10:00:50 -05:00
Dustin J. Mitchell
085cbf2c1e
Update expression-evaluation exercise: more patterns, more enums (#1582)
This modifies the exercise to lean more into interesting `match`
statements. It also uses the standard `Result` type, based on feedback
that students could understand it sufficiently at this point in the
course.

Addresses #1565.
2023-12-14 15:22:28 +00:00
Martin Huschenbett
302a03bbe3
Remove unnecessary syntax in protobuf example (#1592)
`Ok(x?)` has the same outcome as `x` and save an unpacking/repacking
cycle.

`x as usize` has no effect when `x` already has type `usize`.

In `x < 4usize` the `usize` is unnecessary when `x` already has type
`usize`.
2023-12-14 16:02:40 +01:00
rickyclarkson
c7a86ca584
Fixing a typo (#1588) 2023-12-13 18:26:34 -05:00
Dustin J. Mitchell
afea94b1ed
Use a type alias in binary tree exercise (#1589)
As suggested by @marshallpierce and @hurryabit
2023-12-13 19:53:35 +00:00
Martin Huschenbett
c6973018c6
Fix typo in lifetime annotations section (#1590)
The code example was meant to be `editable` but was marked as
`eitable`.
2023-12-13 13:41:32 -05:00
Martin Huschenbett
ee826ef742
Use cmp + match in binary tree example (#1587)
Currently, the implementation uses if-then-else chains and `<` and `>`.
This is not the most idiomatic Rust. Instead, we can use `cmp` and
`match` to make the code easier to read.

---------

Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
2023-12-13 13:39:23 -05:00
Martin Huschenbett
f37aeac3ca
Remove unnecessary ref mut in binary tree exercise (#1586)
There's no need for the `ref mut` in the pattern. So, let's just drop
it for the sake of simplicity.
2023-12-13 12:34:18 -05:00
Martin Huschenbett
ce081b12f9
Rename test module into tests in smart pointer exercise (#1585)
If I'm not mistaken, the naming convention for modules containing only
tests is to call them `tests` (rather than `test`).
2023-12-13 12:33:31 -05:00
Dustin J. Mitchell
9563f055e2
Minor updates based on instruction (#1583)
This contains some minor updates from #1565.

---------

Co-authored-by: Marshall Pierce <575695+marshallpierce@users.noreply.github.com>
2023-12-13 12:51:34 +00:00
Chayim Refael Friedman
86289b4814
Remove an incorrect note (#1580)
People are often confused by this: the fact that we can remove the `*`
in the `println!()` is not because the compiler auto-derefs here (it
does not), but because `Display` is implemented for `&T where T:
Display` (a blanket implementation).
2023-12-12 11:29:50 -05:00
Chayim Refael Friedman
c342a74b3e
Having a Vec allows accessing mutating slice methods, too (#1578)
I don't know why "read-only" was added.
2023-12-12 10:02:10 -05:00
Marshall Pierce
e41ab44a38
More tiny fixes (#1577) 2023-12-11 16:13:54 -05:00
Dustin J. Mitchell
e765159be1
Clarify completion condition for elevator exercise (#1574)
Addresses the first part of #1565.
2023-12-11 19:12:40 +00:00
Lukasz Anforowicz
f04e277744
Chromium: Add redox_syscall to speaker notes for the third-party exercise. (#1571)
Speaker notes for Chromium's third-party crate exercise list the
transitive dependencies that will be downloaded during the exercise.
Before this commit the list was missing the `redox_syscall` crate.

Additionally, the commit sorts the crates to make it easier to compare
with the output of `git status` or `ls`.

---------

Co-authored-by: Martin Geisler <martin@geisler.net>
2023-12-11 07:21:53 -08:00
Kanta Yamaoka (山岡幹太)
d62f2c4583
Add trait bounds to glossary (#1569)
Hi, this is a tiny MR to add glossary entry for "trait bound". Could you
someone review it? I'm open to suggeston, too. Thank you!
Context:
https://github.com/google/comprehensive-rust/pull/1436#discussion_r1394298992
2023-12-10 17:05:11 +01:00
Adrian Taylor
4a576fd436
Update depending-on-a-crate.md (#1570)
Fix typo
2023-12-08 07:07:13 -08:00
Lukasz Anforowicz
89b41555eb
Title-casing in section titles (#1557)
Fixes https://github.com/google/comprehensive-rust/issues/1552
2023-12-07 18:06:18 -08:00
Martin Geisler
1ec2e8db9e
Expand "Docs" plus light copy-editing (#1568)
I don't like shortening words, so I prefer "Documentation" over "Docs".
I find this less jargony and thus easier to read (and potentially also
easier to translate).
2023-12-07 20:04:36 +00:00
Martin Geisler
c080de8253
Simplify enums a little (#1566)
This takes out the huge example with lots of macro magic. I don't think
we need it for an introductory course.

I also cleaned up the formatting a little and made sure to distinguish
between types and values.

---------

Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
2023-12-07 16:15:57 +00:00
Adrian Taylor
cc8405d04f
Chromium exercise solutions (#1564)
The main thing in this CL is a link to exercise solutions but there are
a couple of other very minor tweaks.
2023-12-06 19:26:41 +00:00
Martin Geisler
91cb5b2048
Fix outdated references to “three days” (#1563)
Rust Fundamentals is now a four-day course.
2023-12-06 12:55:34 -05:00
Marshall Pierce
9efad3212f
More minor fixes (#1561)
- Fix compile errors and warnings in error handling example
- Tweak iteration example so that it correctly visits the first grid
coordinate
2023-12-06 12:53:06 -05:00
Adrian Taylor
59a0faba83
Update policy.md (#1560)
Fix formatting of "C++"
2023-12-06 09:55:42 -05:00
Martin Huschenbett
f08c537007
Use type annotation instead of turbo fish in method chapter (#1558)
If we use a type annotation, we get around explaining the turbo fish,
which isn't trivial without having introduced generics. Type
annotations on the other hand are known already.
2023-12-06 14:16:01 +00:00
Martin Huschenbett
70efef4f38
Use Self to create struct in method chapter (#1559)
If I'm not mistaken, it's idomatic to use `Self` in a struct constructor
rather than the name of the struct.
2023-12-06 14:08:56 +00:00
Marshall Pierce
6c5061bb90
Various small fixes (#1556)
Plus one more substantial comment on casting.
2023-12-05 18:06:42 -05:00
Lukasz Anforowicz
8f9902cc3e
Chromium: new subsection about gtest tests (#1551) 2023-12-05 10:39:02 +00:00
Xavier Carol
7d10518b24
Update interior-mutability.md (#1554)
fix typo copmile-time
2023-12-04 18:36:35 +00:00
Lukasz Anforowicz
24b132b67a
Chromium: expanding CXX error handling section. (#1539) 2023-12-04 08:03:17 -08:00
Martin Geisler
a277e7b922
Fix mock example and move it to a file for testing (#1548)
I swear I tested this in an actual Rust file, but I somehow messed up
when copy-pasting it into the example. The code is now in the test file
so it will be correct.

Why is the indentation wrong? Because of

  https://github.com/rust-lang/mdBook/issues/1564

The indentation is not kept by the included content, which breaks the
Markdown.
2023-12-01 23:19:10 +01:00
Dustin J. Mitchell
fbd79e36e7
Remove incorrect comment about moving arrays (#1547)
Fixes #1546.
2023-12-01 13:37:37 -05:00
Lukasz Anforowicz
584c957d69
Fix spelling of CXX and Cargo (mostly in the Chromium part). (#1549) 2023-12-01 10:21:47 -08:00