1
0
mirror of https://github.com/google/comprehensive-rust.git synced 2025-03-06 00:44:23 +02:00

128 Commits

Author SHA1 Message Date
Martin Geisler
d0e0e5c1af
Skip some untranslatable code blocks (#1258)
This builds on the work of @dyoo in
https://github.com/google/mdbook-i18n-helpers/pull/69: by adding a
special `<!-- mdbook-xgettext: skip -->` comment, we can skip the
following code block.

I also modified a few code blocks to remove translatable text: variable
names are not expected to be translated, so it’s fine to have a line
with `println!("foo: {foo}")` in the code block.

This PR removes 36 messages from the POT file. The number of lines drop
by 633 (3%).

Part of #1257.
2023-09-26 17:04:46 +02:00
Matthew
a492b2f1b2
Italic filenames formatted accordingly (#1259)
**Task** Addresses:
https://github.com/google/comprehensive-rust/issues/625
Certain pages in the mdbook that display filenames have inconsistent
styling.

The style we want to follow: [the interop
section](https://google.github.io/comprehensive-rust/android/interoperability/java.html)

The current problem: [the RTC
driver](https://google.github.io/comprehensive-rust/exercises/bare-metal/rtc.html)
excercise page.

--
@mgeisler I checked this feature by looking through every page


![work](https://github.com/google/comprehensive-rust/assets/38759997/8affd0c2-71f2-4708-88f6-f63cf3c24efa)
2023-09-26 15:15:41 +02:00
Frances Wingerter
758639174a
Add solution for Health Statistics exercise (#1172) 2023-09-26 09:29:00 +02:00
Martin Geisler
ca424b90e0
Revert "Update boot-library.md" (#1235)
Reverts google/comprehensive-rust#225. We normally include links at the
start of each exercise blocks — but we don't include links in the
individual exercises.

If we want to add such links, we should do it consistently across the
entire course.
2023-09-25 09:39:37 -04:00
Daniel Fernández Núñez
9d21fe159a
Fix bad link in speaker notes Day 2 exercises (#1244) 2023-09-25 07:01:40 +00:00
Martin Geisler
187fc20007
Fix solution for Storing Books exercise (#1237)
As pointed out by @njr0 in #1233, we were making the exercise confusing
by showing people code that cannot work — and then expecting the course
participants to somehow fix this, without setting clear boundaries for
what can and cannot be modified.

This PR should align the exercise with the other exercises in the course
and avoid the “brain teaser” here.

This also has the advantage of having a full working solution, with no
commented code which will bit-rot over time.
2023-09-22 11:22:51 -04:00
Dustin J. Mitchell
c4a821d43d
Add a pattern-matching exercise (#1231)
This adds a second day-1 afternoon exercise, drawn from the v2 work. It
illustrates general use of an enum and also previews `Result`.

Fixes #1228.
2023-09-22 13:36:57 +02:00
Martin Geisler
991c437986
Trim off licenses when showing solutions (#1212)
The licenses end up in the PO files, causing extra unnecessary for work
our translators. We save about 300 lines from each PO file with this.

This also solves another small problem: when a file is included with an
anchor, other anchors are automatically stripped away. This removes some
confusing `// ANCHOR: foo` and `// ANCHOR_END: foo` lines in the
solutions.
2023-09-18 11:56:55 +02:00
Frances Wingerter
d2e0c62303
exercises/day-2/book-library: Fix typo (#1171) 2023-09-12 09:04:08 +02:00
Muhammad Mahmood
354f3afa7c
Corrected Luhn's Algorithm Step 3 (#1194)
In the exercise guideline for the Luhn's algorithm (Day 1, Afternoon
exercise), I made a correction to step 3 to provide a more accurate
explanation. Instead of stating that doubling 7 becomes 14, I clarified
that doubling 7 results in 14, and we should sum the individual digits
of 14 to get the correct value of 5.
2023-09-11 14:24:05 +00:00
Jens Reidel
fb95f779d2
Update dependencies in chat-app exercise (#1195)
Hello there 👋 I'm the author of the `tokio-websockets` crate and
today we published version `0.4.0` of the crate, which finally makes the
public API consistent and aligns it with expectations.

`WebsocketStream` now implements the `Stream` trait, so calling `next()`
has to be done via `StreamExt` now. `connect()` returns a tuple of
`(WebsocketStream, Response)`, so that has to be deconstructed now. And
finally, `as_text()` now returns an `Option<&str>` instead of
`Result<&str, Error>`.

And, *very* importantly: The old `WebsocketStream::next` was **not**
cancellation safe, the new `Stream` implementation is. The exercise uses
`select!`, which very well might have caused misbehavior.

Since we also emptied the default features, I've added the very minimal
ones required to compile the exercise.

This is my first contribution here, so feel free to point me to some
things if I'm missing anything. I wasn't really sure what to do about
the translations, I guess I should leave them as is and they'll be
updated by translators in other PRs?

Signed-off-by: Jens Reidel <adrian@travitia.xyz>
2023-09-11 10:19:13 -04:00
Varun Somani
3813d0b6f1
Add test case for invalid non digit cc number (#1182)
Adding this test case to handle case where we have non-numeric cc number
along with a valid cc number. This is discovered when we filter with
is_numeric() instead of !is_whitespace() all test case does pass. To
handle such scenario adding this test case.
2023-09-07 08:30:18 +00:00
Antonio Linhart
11087c8411
Add typos to CI (#1158)
Hi all!

This CL fixes #1093:
* Avoids including current false-positives in the checking of typos
* Excludes localization-related files, as `typos` works with
  English words
* Fixes existing typos caught in the repo

Tested this in CI with a typo and it showed up in the list of actions!

---------

Co-authored-by: Martin Geisler <martin@geisler.net>
2023-09-05 20:21:59 +00:00
Frances Wingerter
890c46a90c
Fix some exercise location mixups in Day 2 (#1136)
Should supersede #1135, I think.
2023-08-28 18:53:22 +00:00
Frances Wingerter
d3a90373b0
Reorder material on first two days (#913)
- Morning of Day 1 still introduces the language and its high-level
goals/value proposition, and starts with the built-in data types Rust
provides, and how you define a function. 
- Afternoon of Day 1 gets a front loading of the basic control flow
structures in Rust but not the more exotic ones.
- The exercises for day 1 afternoon will be the Luhn algorithm (where we
can match on digits and enums such as `Option`.
- Morning of day 2 still has discussion of memory management.

Fixes #510.

---------

Co-authored-by: Martin Geisler <mgeisler@google.com>
2023-08-25 17:42:31 +02:00
Danny Yoo
40b9a1fc2c
Update for-loops.md to remove misleading sentence (#1094)
Drops the comment about usage in the other loop. It's not related to the
focus on copy semantics, and so we want to eliminate that possible
confusion.

---------

Co-authored-by: Martin Geisler <martin@geisler.net>
2023-08-23 14:10:24 +00:00
Danny Yoo
25d4281992
Iterate over array ref instead of array. (#1081)
This revises the example to iterate over `&array` to dodge a few issues.
2023-08-15 12:50:18 +00:00
Dustin J. Mitchell
e596b80c03
Tweaks from student feedback (#1061)
* help students with the luhn exercise

* mention method-specific types in speaker notes

* Update src/exercises/day-2/luhn.md

Co-authored-by: Martin Geisler <martin@geisler.net>

---------

Co-authored-by: Martin Geisler <martin@geisler.net>
2023-08-11 12:40:05 +00:00
Martin Geisler
c7240f604f
Expand "iff" to "if and only if" in pl031.rs (#1052)
* Expand "if" to "if and only if" in pl031.rs

Similar to #1051.
2023-08-04 11:04:02 +01:00
Martin Geisler
3c7659d59b
Align dining-philosophers-async.rs with sync version (#1024)
* Align dining-philosophers-async.rs with sync version

This updates the version to use `std::mem::swap` like the synchronous version.

* Apply suggestions from code review
2023-07-25 06:56:27 +00:00
Martin Geisler
e8ea741cea
Use Arc::clone instead of .clone() (#1023)
The fully qualified syntax is recommended for `Arc` which implements all methods as associated methods.
2023-07-24 11:19:06 -07:00
Victor Costan
ef99d15529
Fix solution in Link Checker in Concurrency Morning exercises (#904)
* Fix solution in Link Checker in Concurrency Morning exercises.

This change fixes the following issues with the current solution:

1. It is not listed on the "solutions" page.
2. It is not multi-threaded and does not use channels.

---------

Co-authored-by: Dustin J. Mitchell <djmitche@google.com>
2023-07-13 10:52:06 +02:00
Frances Wingerter
2f5dcbafc3
Rework health statistics exercise (#909)
* exercises: health-statistics: weight -> height

weight may be a sensitive topic for some readers; use height instead as this isn't important to the content of the course

* exercises: health-statistics: add health report

this lets us see a non-setter use case for &mut self

it also makes the 'statistics' side of this exercise more explicit as we count doctor visits

* exercises: health-statistics: normalize variable names
2023-07-11 18:01:49 -04:00
Sharun
f5764ad4bc
remove $ from code-blocks in other markdown files as well (#952)
* remove $ from code blocks in translations

* remove $ from code blocks in the other markdown files as well

* Revert "remove $ from code blocks in the other markdown files as well"

This reverts commit eda922dab93dd2d2967581650a5c983432ec3a80.

* remove $ from code blocks in setup.md

* re-added the previous changes

* revert logging.md
2023-07-10 21:25:41 -07:00
Erdem
427aab110f
Adds a comment for an iterator based implementation for Polygon::length (#950)
Outlines an alternative implementation for Polygon::length.  This exercise is aimed at novice users and we want to keep the implementation simple. For users familiar with iterator concepts this comment points to an alternative.
2023-07-10 22:55:33 +00:00
Dustin J. Mitchell
88510e9e72
fix links for IntoIterator for Vec (#917) 2023-07-07 09:27:35 -04:00
Frances Wingerter
7f03a67a6a
Rename 'designing a library' example (#911)
rename 'designing a library' example

library design in Rust is its own topic that this course does not cover; to avoid confusion, let's stick to describing things in terms of books
2023-07-06 08:40:47 +00:00
Victor Costan
6df4ba24dd
Clarify that each philosopher should think/eat 100 times (#900)
Clarify that each philosopher should think/eat 100 times.

Folks who have hazy memories of the philosopher dining problem may
interpret the original instructions as "make each philosopher think and
eat once". This interpretation loses a critical detail, because the
resulting code is highly unlikely to deadlock in practice, even without
breaking the symmetry.
2023-07-04 06:41:54 +00:00
Matt Schulte
76ee72f8e0
Suggest to run day 3 afternoon exercise locally (#882)
* Suggest to run day 3 afternoon exercise locally

Based on feedback from running the class, students found developing
the day 3 afternoon exercise locally was a better experience than
using Playground.

* Update src/exercises/day-3/afternoon.md

---------

Co-authored-by: Martin Geisler <martin@geisler.net>
2023-07-03 06:36:38 +00:00
Victor Costan
0c867c952f
"Strings and Iterators" solution that uses let-else (#833)
Add "Strings and Iterators" solution that uses let-else.
2023-06-29 08:52:58 +02:00
Chiin
753e53ad17
Correct print statement in library exercise (#876)
* fix(day 1): correct print statement logic for library emptiness status

* chore: add explicit method print

* chore: change `:` for `->`
2023-06-27 08:22:50 +00:00
Victor Costan
0b4891fb1f
Unified FFI setup for for readdir() on macOS (#857)
Unified FFI setup for for readdir() on macOS.
2023-06-23 15:48:18 +02:00
Martin Geisler
186d333227
Run builds on both Mac OS and Linux (#830)
* Run builds on both Mac OS and Linux

This would have helped us catch #570.

* Fix MacOS CI (#848)

* Revert unnecessary changes

The changes might be good, but I want to keep this PR small and
focused. If we end up with the extra `cfg` statements, we should
include a comment to let students know what they do: we’re targeting
people new to Rust, so we need to be careful with explanations.

---------

Co-authored-by: Dominik Maier <domenukk@gmail.com>
2023-06-22 10:38:41 +02:00
Mauve
4b7b5d83ea
Make chat-client reads cancellation safe (#713)
* Make chat-client reads cancellation safe

* Update chat-app references
2023-06-09 16:35:52 +02:00
rbehjati
83663daaa2
Add the description of the chat-app exercise (#641)
* Adds a description of the async chat exercise
* Simplifies the use of Error in chat-async
* Links the solution to the async chat exercise
* Removes the elevator exercise
2023-05-17 18:22:11 +01:00
Dustin J. Mitchell
caeabdae3e
Beginnings of an async chat exercise (#627)
* beginnings of an async chat exercise

* really basic solution

* format
2023-05-16 15:51:01 +00:00
Martin Geisler
0036843f0c
Fix typo in dining-philosophers-async.md (#631) 2023-05-12 14:34:11 +02:00
rbehjati
11571d0d1a
Add dining philosophers as an async exercise (#624)
* Adds dining philosophers as an async exercise
* Adds a solution for async dining philosophers
* Adds a solution page for the afternoon session on concurrency
2023-05-09 17:34:47 +01:00
Carlos Jimenez
ce7c5fdf22
Fix mistakes in book-library.rs (#619)
---------

Co-authored-by: Martin Geisler <martin@geisler.net>
2023-05-08 08:20:42 +00:00
Andrew Walbran
5a495a508e
Update Cargo.lock. (#614)
This was missed in #583.
2023-05-05 11:25:45 +01:00
Andrew Walbran
9cff14ca31
Link arm-gic to main documentation page rather than crate page (#610) 2023-05-04 14:42:08 +00:00
Andrew Walbran
226aa21f3c
Use hyphen rather than underscore for gic-version (#611)
Older versions of QEMU seem to only accept a hyphen, while new versions accept either.
2023-05-04 15:41:15 +01:00
Andrew Walbran
93c1c814c3
Improve phrasing of comment (#609)
Some people interpreted the previous comment as meaning the RTC itself needed to be initialised or started somehow, but this is not the case.
2023-05-04 15:08:44 +01:00
Martin Geisler
3b07b4768a
Add unit tests to Safe FFI exercise (#588) 2023-05-04 12:20:47 +02:00
Martin Geisler
3b21053ff2
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
2023-05-02 08:02:28 +02:00
Martin Geisler
244e5b99c6
Provide more instructions in the library exercise (#589) 2023-04-29 05:11:12 +02:00
Martin Geisler
fc68829e14
Improve language around ownership of OsString (#602)
Based on discussion in #598.
2023-04-28 10:00:07 +02:00
Martin Geisler
5074b1751c
Hint at the list of conversions in FFI exercise (#598)
I see people struggle a lot with guessing why they need to convert
between all these types. The explanations here should help with that.
2023-04-27 23:45:15 +02:00
Andrew Walbran
9d4a34c501
Use smccc crate rather than psci in examples and exercise. (#583)
It was renamed.
2023-04-27 10:54:48 +01:00
Eric Ye
9187bf0b5e
Add some more hints to the bare-metal RTC exercise (#581)
* Add some more hints to the bare-metal RTC exercise

I and several others had some difficulties with this part of the problem, especially with regards to knowing where the RTC was wired up and how to fully enable the GIC / interrupts, so add this information to the exercise.

* Remove extra semicolon.

---------

Co-authored-by: Andrew Walbran <qwandor@google.com>
2023-04-25 09:46:37 +01:00