-
Notifications
You must be signed in to change notification settings - Fork 1.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Added break-continue section. #1793
Conversation
Hello @djmitche , Can you please look into this. What do you say ? is it good. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like you've broken this up into break
and continue
. I wonder if a different way to break it up would be a simple example that uses both keywords, and a more complex example on the second sub-slide illustrating that loop
can have a label and a value?
At any rate, at least one of the examples should use continue
-- can you think of a good example?
## `break` | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Let's omit this -- it's redundant to the heading above it.
|
||
- Note that `loop` is the only looping construct which returns a non-trivial | ||
value. This is because it's guaranteed to be entered at least once (unlike | ||
`while` and `for` loops). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍🏼
```rust,editable | ||
fn main() { | ||
let (mut a, mut b) = (100, 52); | ||
let result = loop { | ||
if a == b { | ||
break a; | ||
} | ||
if a < b { | ||
b -= a; | ||
} else { | ||
a -= b; | ||
} | ||
}; | ||
println!("{result}"); | ||
} | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't actually use continue
!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought the same but went on dividing the code. If you allow me I write an example for continue on continue slide.
(To clarify, "I wonder if.." means it's OK if you don't think that's a good idea -- just explain why) |
I will think of some example for continue and commit it. |
I will add my own example on continue slide. |
Any change needed ? let me know. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is looking good! However, I think the first sub-slide is actually more complex than the second. Let's switch the order, with continue
first and break
(along with labels and loop
taking a value) second.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As the PR stands now, both sub-slides use both break
and continue
. I think that's actually fine, though - the first slide can be the basics, and the second sub-slide the more advanced stuff.
src/control-flow-basics/break-continue.md
can introduce both keywords with the simple example. So the description ofbreak
should move to that slide too ("If you want to exit..")- The sub-slide, maybe renamed to
src/control-flow-basics/break-continue/labels.md
, can introduce labels and loops with a value. I think it's fine to do both of these things in one example, but the existing example doesn't actually demonstrate loops with a value. So, add a value to thebreak
statement in that example.
println!("{result}"); | ||
} | ||
``` | ||
|
||
Both `continue` and `break` can optionally take a label argument which is used | ||
to break out of nested loops: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sentence doesn't belong here anymore, as this example doesn't have labels.
Any change needed ? let me know. |
Hello @djmitche , Can you please review this. need any changes. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Almost there :)
} | ||
} | ||
``` | ||
|
||
In this case we break the outer loop after 3 iterations of the inner loop. | ||
|
||
<details> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This speaker note now corresponds to the second sub-slide ("Labels").
sorry, my bad I did it again. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good, just need to tighten up the example a little bit..
a += 20; | ||
} | ||
let mut i = 0; | ||
'outer: for _x in 1..5 { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This actually had me scratching my head for a few minutes -- the label says 'outer
but it's the inner loop! Also, without a label break
will break the innermost loop, so this doesn't actually show the power of labels. Can you update the example so that the outer loop is the one labeled? I think that will require breaking with a value in that case, too.
Hello @djmitche , It looks good, I think we can go with this. What do you say. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This does run, but has some warnings, and in particular result
is never used.
Compiling playground v0.0.1 (/playground)
warning: unused variable: `j`
--> src/main.rs:4:22
|
4 | '_inner: for j in 1..=200 {
| ^ help: if this is intentional, prefix it with an underscore: `_j`
|
= note: `#[warn(unused_variables)]` on by default
warning: unused variable: `result`
--> src/main.rs:8:17
|
8 | let result = loop {
| ^^^^^^ help: if this is intentional, prefix it with an underscore: `_result`
warning: variable does not need to be mutable
--> src/main.rs:2:10
|
2 | let (mut a, mut b) = (1, 1);
| ----^
| |
| help: remove this `mut`
|
= note: `#[warn(unused_mut)]` on by default
warning: `playground` (bin "playground") generated 3 warnings (run `cargo fix --bin "playground"` to apply 3 suggestions)
Finished dev [unoptimized + debuginfo] target(s) in 0.63s
Running `target/debug/playground`
I think there's a chance to make a more compelling example here, that actually sort-of calculates something. That might take some creativity!
Hello @djmitche , Changed code , Can you please review the PR and suggest changes. |
hello @djmitche , I have added a code with some calculation . It finds if a n*n matrix 1st row as the target value or not. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good progress here! Reminders:
- Make sure you've addressed all comments
- Make sure Rust code is well-formatted (using
rustfmt
).
src/SUMMARY.md
Outdated
@@ -33,8 +33,9 @@ | |||
- [Conditionals](control-flow-basics/conditionals.md) | |||
- [Loops](control-flow-basics/loops.md) | |||
- [`for`](control-flow-basics/loops/for.md) | |||
- [`loop`](control-flow-basics/loops/loop.md) | |||
- [loop](control-flow-basics/loops/loop.md) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Did this get changed by mistake?
fn main() { | ||
let mut outer_result = 0; | ||
'outer: for i in 1..=5 { | ||
let mut inner_result = 0; | ||
for j in 1..=5 { | ||
if j == 3 { | ||
inner_result = j * i; | ||
break; | ||
} | ||
} | ||
if i == 3 { | ||
outer_result = inner_result; | ||
break 'outer; | ||
} | ||
} | ||
println!("Result: {outer_result}"); | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This example just uses labels, and maybe it's best to not give an example of loop-having-a-value.
But, this isn't a great example of using labels, since just break
in the if i == 3
block would have the same effect (it's only inside one loop).
fn main(){ | ||
let s = [[5,6,7],[8,9,10],[21,15,32]]; | ||
let mut result = false; | ||
let target_value_in_1st_row = 10; | ||
'outer:for i in 0..=2{ | ||
let mut j = 0; | ||
result = loop { | ||
if j>2{ | ||
break 'outer; | ||
} | ||
if s[i][j] == target_value_in_1st_row { | ||
result = true; | ||
break result; | ||
} | ||
j += 1; | ||
}; | ||
} | ||
print!("{}",result) | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, this is a good illustration of use of labels, but not of breaking with a value -- break result
just ends up assigning result
to result
. I like the two-dimensional array though! We haven't covered arrays yet, but students should be familiar enough to understand this example. What if we simplified it a bit to just search for a value in that array? I think this is a pretty common use of break with labels.
fn main() {
let s = [[5, 6, 7], [8, 9, 10], [21, 15, 32]];
let mut found = false;
let target_value = 10;
'outer: for i in 0..=2 {
for j in 0..=2 {
if s[i][j] == target_value {
found = true;
break 'outer;
}
}
}
print!("{}", found)
}
We can leave the bit about loop having a value just mentioned in the speaker notes. It's unusual to see it used in Rust code, so maybe students don't need to see it on day 1!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hm, this is a good illustration of use of labels, but not of breaking with a value --
break result
just ends up assigningresult
toresult
. I like the two-dimensional array though! We haven't covered arrays yet, but students should be familiar enough to understand this example. What if we simplified it a bit to just search for a value in that array? I think this is a pretty common use of break with labels.fn main() { let s = [[5, 6, 7], [8, 9, 10], [21, 15, 32]]; let mut found = false; let target_value = 10; 'outer: for i in 0..=2 { for j in 0..=2 { if s[i][j] == target_value { found = true; break 'outer; } } } print!("{}", found) }
We can leave the bit about loop having a value just mentioned in the speaker notes. It's unusual to see it used in Rust code, so maybe students don't need to see it on day 1!
Hey,I have not seen your comment and requested for review.
Hello @djmitche , I have updated the code .Sorry for requesting for review Before seeing your comment . |
I haven't got you properly but i think this what you wanted. |
If it is okay , Can you give a quick feedback or review like rate me on a scale of 10 kind of thing . Because I want to know like how much good i am at this. I felt this PR took bit a long.I don't it was my mistake. Note : You can ignore this comment if it is not ok but be honest on review if you give me. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good! Thanks again for sticking with this!
* Fix typo in googletest.md (google#1804) The word `strings` is repeated unnecessarily * Update try.md - syntax error (google#1807) Add second `:` * Use existing function as an example for automatic dereferncing (google#1799) * Fix Chromium link in README.md (google#1812) Fixes google#1806. * Make content of variable "name" an actual name (google#1816) In the example, somebody who is trying to understand this code has to follow a lot of moving pieces: prefix, name, make_greeter, and then also learn the new move concept at the same time. It'd be better if the content were to actually match the name of the variables. "Hi" is a good prefix, but "there" is not a name, so let's go with an actual name. * Added break-continue section. (google#1793) This is a contribution of a break-continue section for Comprehensive Rust. ![image](https://github.com/google/comprehensive-rust/assets/65899331/e68bf439-bcbd-43c9-88bd-f66470a5956f) ![image](https://github.com/google/comprehensive-rust/assets/65899331/1644a460-8373-4878-b6b9-0ce498e8c95d) --------- Co-authored-by: Dustin J. Mitchell <dustin@v.igoro.us> * Change String representation to actual (google#1817) Tested with rust 2015, 2018, 2021 and 2024, on amd64 musl, amd64 glibc and aarch64 musl, all of them represent Strings with (ptr, capacity, len). This is an internal implementation detail, that shouldn't be exposed anyway, so it's no big deal, but in the speaker notes, we provide a debugging tool for demonstration purposes, so at least that should have a correct output. * zh-CN: index & preparation translation (google#1800) The po file has been refreshed. Translation range: L1173-L2241. google#324 --------- Co-authored-by: Yihao Wang <42559837+AgainstEntropy@users.noreply.github.com> * Added blocks and scopes section (google#1822) * Translation correction on Update es.po (google#1780) I added a tranlation correction on the line 1287, I change "tres" instead "cuatro", because "cuatro" is the meaningful of four in Spanish. --------- Co-authored-by: Henri F <henrif75@users.noreply.github.com> * da: refresh translation for January 2024 (google#1742) This is a clean refresh, requires only a syntactical review. You can skim this PR with the [GitHub CLI](https://cli.github.com/): ``` gh pr diff 1742 | bat -l patch ``` * fa: refresh translation for January 2024 (google#1751) This is a clean refresh, requires only a syntaxtical review. You can skim this PR with the [GitHub CLI](https://cli.github.com/): ``` gh pr diff 1751 | bat -l patch ``` * Translation correction on Update es.po (google#1781) I added a tranlation correction on the line 1287, I change "tres" instead "cuatro", because "cuatro" is the meaningful of four in Spanish. --------- Co-authored-by: Henri F <henrif75@users.noreply.github.com> * cargo: bump the patch group with 1 update (google#1828) Bumps the patch group with 1 update: [clap](https://github.com/clap-rs/clap). Updates `clap` from 4.5.0 to 4.5.1 Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * uk: Day 3: morning (google#1826) Day 3: morning Signed-off-by: Andriy Redko <drreta@gmail.com> * Suggest --locked for cargo installs (google#1792) This is already used in the GitHub actions, and avoids issues like those in google#1791. Fixes google#1791. * Fix style in glossary.md (google#1825) `id` of `h1` title in the translated version will be changed to the translated text. Fixed `id` configured here will not take effect in the translated version. Correct style: https://google.github.io/comprehensive-rust/glossary.html Wrong style (zh-CN): https://google.github.io/comprehensive-rust/zh-CN/glossary.html * Add heading attribute to glossary.md (google#1829) Add heading attributes[1] to avoid ID changes in translation. [1]: https://rust-lang.github.io/mdBook/format/markdown.html#heading-attributes Related: google#1825 --------- Co-authored-by: Martin Geisler <martin@geisler.net> * Rendered PDF improvements (google#1805) Updates `mdbook-pandoc` to [0.5.0](https://github.com/max-heller/mdbook-pandoc/releases/tag/v0.5.0) to use some new features: - Table wrapping (closes google#1709) The wrapping logic mirror's [Pandoc's](https://pandoc.org/MANUAL.html#extension-pipe_tables) (i.e., compare the relative widths of the `---` columns to determine column widths) so tables in the source may need tweaking to get the proportions right - Replace broken links in PDF with corresponding links to https://google.github.io/comprehensive-rust/ * Make the "break with label" example more illustrative (google#1830) In the old version, using "break 'outer;" and using "break;" (without the label) produce the same output. This version fixes that to make the example more illustrative. --------- Co-authored-by: Martin Geisler <martin@geisler.net> * fr: Updating the first few pages (up to 1.1). (google#1778) * Update translations.md with new Korean contributor (google#1823) Co-authored-by: Martin Geisler <mgeisler@google.com> * Reformulate speaker notes regarding Box (google#1819) The first change is to reformulate the English in a way, that emphasizes, that this is not a decision of the compiler, but the impossibility of computing an infinite value (e.g. changed the language from "not compute" to "would not be able to compute"). The second change is to fix the error message, of course the error message from the compiler is "recursive withOUT indirection", as "recursive with indirection" is actually what we want. * Put a header on schedule comments (google#1814) This will add a little more context. See the current result in google#1813. * Add missing editable attribute to exercise (google#1827) I was reading the docs and I stumbled upon this. I'm unsure about when exercises should be solved directly on the site and when they should be copied and pasted into a playground. But since the previous chapter's exercise is solvable in the site [(fibonacci sequence)](https://github.com/google/comprehensive-rust/blob/0cb7f496b542d76468fa950718f57f4037abc8fa/src/types-and-values/exercise.md?plain=1#L15), I figured this one might be missing the attribute. Anyway amazing work on the docs! * Change hardcoded vector update to a for loop (google#1833) iterating over the vector instead of hardcoding each item --------- Co-authored-by: Martin Geisler <mgeisler@google.com> * Expand Traits, add associated types (google#1815) This breaks the "Traits" slide into three smaller sub-slides. It also addresses part of google#1511 by explicitly addressing associated types. --------- Co-authored-by: Martin Geisler <martin@geisler.net> * Update exercise to add also the tests, in a TDD style (google#1832) Having the tests only in the result brings less value, so the participants can do it following TDD practices * Update user-defined-types/exercise.md (google#1835) Allow us to edit so we can complete the exercise :) * Move hello world example to second section (google#1838) The current location for the hello world example is awkward since the two surrounding pages are both talking about Rust from a high level without talking about syntax at all. I think starting the second section (types and values) with the hello world example would help the first section flow more smoothly. * Add translation comment to glossary (google#1831) With google/mdbook-i18n-helpers#107 merged, we can begin adding comments for the translators to our Markdown files. * Tweak timings of exercises to better reflect teaching times (google#1839) A few of the early exercises had much larger estimates than were actually necessary for the super simple early exercises. I've gone through and reviewed the time estimates for exercises and tweaked the estimates based on how much time students have actually needed in my classes so far. * Flesh out `for` loop example (google#1841) * Add example of iterating over a collection. * Update speaker notes to call out the use of iterators. I think it's useful to call out that `for` loops primarily are used to iterate over a collection of objects, even though we haven't yet talked about any concrete collection types at this point. I think using the array literal syntax is simple enough to understand that it should be quick to explain when we get to this slide. * pt-BR: Merge CR v.2 pt-BR translation back into main (google#1846) This PR merges the pt-BR v.2 translation back to main. Also, it refreshes the .po file format removing the line numbers. This requires just a syntactical review, as the partial PRs into this branch were reviewed already. You can skim this PR with the [GitHub CLI](https://cli.github.com/): gh pr diff 1846 | bat -l patch google#317 google#1463 --------- Co-authored-by: João Victor Mendes <mendesjoaovic@gmail.com> Co-authored-by: azevedoalice <158203674+azevedoalice@users.noreply.github.com> * Fix definition of Rust Fundamentals in glossary.md (google#1844) Small nitpick: Days 1 to **4** are Rust Fundamentals * Fix typo in cargo.md (google#1847) * Remove tangential text from `if` slide (google#1840) * Update cargo.md to fix typos (google#1848) * cargo: bump the patch group with 6 updates (google#1850) Bumps the patch group with 6 updates Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * cargo: bump the patch group in /src/bare-metal/aps/examples with 1 update (google#1851) Bumps the patch group in /src/bare-metal/aps/examples with 1 update: [cc](https://github.com/rust-lang/cc-rs). Updates `cc` from 1.0.83 to 1.0.88 Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * cargo: bump the patch group in /src/exercises/bare-metal/rtc with 1 update (google#1852) Bumps the patch group in /src/exercises/bare-metal/rtc with 1 update: [cc](https://github.com/rust-lang/cc-rs). Updates `cc` from 1.0.83 to 1.0.88 Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * uk: Day 3: afternoon (google#1849) uk: Day 3: afternoon Signed-off-by: Andriy Redko <drreta@gmail.com> * Link to PDF version of course from first page (google#1836) Re google#1805 (review) --------- Co-authored-by: Martin Geisler <martin@geisler.net> * Skip translation of large bare-metal code blocks (google#1853) This was done a bit inconsistently before. We now skip all of these large blocks which are meant to be used as-is by the students. This removes 700 lines from the PO files. I found this during the review of google#1651. * Sort `mdbook` redirects (google#1761) There were a few comments, but I think it’s better to make it all uniform and avoid these comments. The comment was about the v2 rewrite, but this is now done and so the comment is less useful. I also normalized the quotes to double-quotes instead of single-quotes. The latter is a literal string in TOML, but we don’t actually have any special characters to escape here. * Rework introduction of pattern matching (google#1843) * Update course-schedule PR comments in-place (google#1856) Instead of always adding a new comment, just update the existing comment if one exists. This fixes google#1834. * cargo: bump the patch group in /src/bare-metal/aps/examples with 1 update (google#1871) Bumps the patch group in /src/bare-metal/aps/examples with 1 update: [log](https://github.com/rust-lang/log). Updates `log` from 0.4.20 to 0.4.21 Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * build(deps): bump crate-ci/typos from 1.18.2 to 1.19.0 (google#1872) Bumps [crate-ci/typos](https://github.com/crate-ci/typos) from 1.18.2 to 1.19.0. Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * cargo: bump the patch group with 4 updates (google#1873) Bumps the patch group with 4 updates: [log](https://github.com/rust-lang/log), [tempfile](https://github.com/Stebalien/tempfile), [cxx](https://github.com/dtolnay/cxx) and [cxx-build](https://github.com/dtolnay/cxx). Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * cargo: bump the patch group in /src/exercises/bare-metal/rtc with 1 update (google#1874) Bumps the patch group in /src/exercises/bare-metal/rtc with 1 update: [log](https://github.com/rust-lang/log). Updates `log` from 0.4.20 to 0.4.21 Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * cargo: bump the minor group with 2 updates (google#1870) Bumps the minor group with 2 updates: [scraper](https://github.com/causal-agent/scraper) and [tokio-websockets](https://github.com/Gelbpunkt/tokio-websockets). Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * URGENT: Fix course schedule watcher github action (google#1867) @djmitche Currently all PRs are marked as schedule change PRs. This is my try to propose a fix for this, but please review diligently, I'm no github actions expert, and I don't have an environment to test. * Small formatting fix (google#1866) This is a typo, that actually @mgeisler stopped in my previous PR, I was just not around to fix it fast enough to make it to the previous merge. Thanks for the catch! * Move Mockall and GoogleTest slides to Android section (google#1533) After google#1528 and google#1532, we now have actual slides which showcase the crates in action. So we can reclaim a few minutes by removing the slide which mentions Mockall and GoogleTest slide. The slide mentioned [proptest](https://docs.rs/proptest) and [rstest](https://docs.rs/rstest) as well. While I'm sure the libraries are useful, we don't have them imported into AOSP and I've never personally used them. We should therefore not advertise them yet at this point since they won't be useful to Android engineers. Of course we can mention things that are not in AOSP (or in Chromium), but I think we should do it in the speaker notes at most. * Always install and run `mdbook-pandoc` (google#1713) Before, we only installed and ran `mdbook-pandoc` when publishing the course — which means that a PR change could accidentally break the publish workflow. We now test that it works on every PR. From a discussion in google#1704. * Add a dev theme to help with slide aspect ratio (google#1842) Added a dev theme to help with slide aspect ratio while updating content or for reviewing PRs. Fixes google#1796. --------- Co-authored-by: Dustin J. Mitchell <djmitche@google.com> Co-authored-by: Martin Geisler <martin@geisler.net> * cargo: bump mio from 0.8.10 to 0.8.11 (google#1877) Bumps [mio](https://github.com/tokio-rs/mio) from 0.8.10 to 0.8.11. * Fix some typos (google#1864) Signed-off-by: geekvest <cuimoman@sohu.com> * es: Merge CR v.2 Spanish translation back into main (google#1879) This PR merges the Spanish (es) v.2 translation back to main. This requires just a syntactical review, as the partial PRs into this branch were reviewed already. You can skim this PR with the [GitHub CLI](https://cli.github.com/): gh pr diff 1879 | bat -l patch google#1463 google#284 --------- Co-authored-by: David Martínez Martí <deavid@google.com> * tr: cr2 update changes (google#1865) updated for cr2 and added some translations Part of google#500 * Divided Array and tuples (google#1859) google#1824 PR Changes * Make diagram consistent with code (google#1855) * Retire @duyguisler as a Turkish reviewer (google#1880) Thanks for the work so far, feel free to come back if you have more time! * Tweak solution to iter exercise (google#1884) Because `.zip()` is limited to the shorter length, the `.take()` call here is unnecessary. When explaining this solution I don't want to have to explain a call to a method that, used as it is, does nothing. * concurrency: Add detailed teaching notes for welcome and threads slides (google#1885) These follow the flow of what I actually teach, which spends a significant amount of time on the latter slide. I think it's worthwhile to have a real flow documented in the teaching notes, both to make sure nothing gets forgotten and to structure the experience of teaching. * Do not show trait vtables as located in the heap in memory diagram (google#1882) This diagram is misleading and I often explain that the character data of string literals resides in the executable's static data, with vtables working the same. * concurrency: Update async trait slide (google#1883) Clarify that the basics are stable, but dyn support is still missing. This slide was outdated and didn't explain the current state of stable correctly. * set fallback fonts for PDF rendering (google#1728) Once a new version of Pandoc is released that includes jgm/pandoc#9204 and jgm/pandoc#9353 (both merged), this will fix the emoji and symbol rendering issues in google#1708. It doesn't seem to be possible to set fallback fonts with `luatexja-fontspec` (used to configure CJK fonts), which results in some missing symbols in the translations but at least renders the emoji properly. Closes google#1708 * Fix typo in associated-types.md (google#1887) A minor nitpick, but as someone new to the language I did spend a bit more time than I'd like to admit trying to understand the meaning of `allow` before realizing this is likely a typo. Maybe I still don't understand, and in that case I'd appreciate a correction! * Refreshed Bengali Translations and Added New Translations to Bengali (google#1876) This PR aims to do the following: 1. Refresh the Bengali Translations 2. Add new translations in line with google#653 to complete up to 10%. 3. Corrections to existing translations. Edit: Recent commits bump up the % completed to 12. --------- Co-authored-by: abhik-bits <127435906+abhik-bits@users.noreply.github.com> Co-authored-by: Mir Wasi Ahmed <1697945+mirwasi@users.noreply.github.com> --------- Signed-off-by: dependabot[bot] <support@github.com> Signed-off-by: Andriy Redko <drreta@gmail.com> Signed-off-by: geekvest <cuimoman@sohu.com> Co-authored-by: IP1llar <isaac.pillar@icloud.com> Co-authored-by: Gergely Risko <errge@nilcons.com> Co-authored-by: Dustin J. Mitchell <djmitche@google.com> Co-authored-by: Manichand Kondapaka <mani.chand01@gmail.com> Co-authored-by: Dustin J. Mitchell <dustin@v.igoro.us> Co-authored-by: mobyw <44370805+mobyw@users.noreply.github.com> Co-authored-by: Yihao Wang <42559837+AgainstEntropy@users.noreply.github.com> Co-authored-by: Diego Romero <68618228+DraketRomero@users.noreply.github.com> Co-authored-by: Henri F <henrif75@users.noreply.github.com> Co-authored-by: Martin Geisler <mgeisler@google.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andriy Redko <drreta@gmail.com> Co-authored-by: Martin Geisler <martin@geisler.net> Co-authored-by: Max Heller <max.a.heller@gmail.com> Co-authored-by: Marja Hölttä <marja@chromium.org> Co-authored-by: AdrienBaudemont <59776880+AdrienBaudemont@users.noreply.github.com> Co-authored-by: titong0 <68573622+titong0@users.noreply.github.com> Co-authored-by: Jean Carlo Vicelli <jcvicelli@gmail.com> Co-authored-by: Michael Graf <mikegraf000@gmail.com> Co-authored-by: Nicole L <dlegare.1001@gmail.com> Co-authored-by: João Victor Mendes <mendesjoaovic@gmail.com> Co-authored-by: azevedoalice <158203674+azevedoalice@users.noreply.github.com> Co-authored-by: Adrian Taylor <adetaylor@chromium.org> Co-authored-by: geekvest <126322776+geekvest@users.noreply.github.com> Co-authored-by: David Martínez Martí <deavid@google.com> Co-authored-by: Enes Aydın <destansi.13@gmail.com> Co-authored-by: Yuri Astrakhan <yuriastrakhan@gmail.com> Co-authored-by: Frances Wingerter <91758128+fw-immunant@users.noreply.github.com> Co-authored-by: Aaron M <webgovernor@gmail.com> Co-authored-by: Abhik Banerjee <38981107+abhik-99@users.noreply.github.com> Co-authored-by: abhik-bits <127435906+abhik-bits@users.noreply.github.com> Co-authored-by: Mir Wasi Ahmed <1697945+mirwasi@users.noreply.github.com>
This is a contribution of a break-continue section for Comprehensive Rust.