From: Ralf Jung Date: Thu, 18 Jul 2024 10:14:31 +0000 (+0200) Subject: add a note to the README about this being a tutorial for an ancient version of Rust X-Git-Url: https://git.ralfj.de/rust-101.git/commitdiff_plain/HEAD?hp=4f92e4d16fbdd96084a09567fc5f8e421c8b2351 add a note to the README about this being a tutorial for an ancient version of Rust --- diff --git a/Cargo.lock b/Cargo.lock index 3174aa5..c0bfd7b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,4 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + [[package]] name = "rust-101" version = "0.1.0" - diff --git a/Makefile b/Makefile index c157dac..d8c0e44 100644 --- a/Makefile +++ b/Makefile @@ -16,7 +16,7 @@ docs: $(DOCFILES) @sed 's|^\(\s*//\)@|\1|;s|\s*/\*@\*/$$||;s|\(\s*\)\S.*/\*@@\*/|\1unimplemented!()|' $< | sed -f dup-unimpl.sed > $@ docs/%.html: .tmp/docs/%.rs - @./pycco-rs $< + ~/.local/pipx/venvs/pycco/bin/python pycco-rs $< ## Workspace # The generated files are shipped only for the benefit of Windows users, who diff --git a/README.md b/README.md index be0e4fb..c163e7f 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,9 @@ This documents Rust-101, a tutorial for the [Rust language](http://www.rust-lang.org/). +**Note that this tutorial was written for Rust 1.3 in 2015, and the language evolved a lot since then. +Some of the idioms presented here may no longer reflect current practice.** + ## Online tutorial The most accessible form of the tutorial is its @@ -11,8 +14,8 @@ The most accessible form of the tutorial is its ## Offline Usage You can either read through the sources in `src/`, or generate the -HTML in `docs/` using `make docs` (this step needs -[Pycco](https://pycco-docs.github.io/pycco/)). +HTML in `docs/` using `make docs`. This steps assumes `pipx install pycco` has +been run before; it will use the pipx-created venv to import pycco. The files `workspace/src/part*.rs` are generated by `make workspace`. diff --git a/src/main.rs b/src/main.rs index 2a0aa76..66a0ed7 100644 --- a/src/main.rs +++ b/src/main.rs @@ -119,7 +119,7 @@ fn main() { // // * [The Rust Book](https://doc.rust-lang.org/stable/book/) // * [The Rustonomicon](https://doc.rust-lang.org/nightly/nomicon/) -// * [Rust by Example](http://rustbyexample.com/) +// * [Rust by Example](https://doc.rust-lang.org/rust-by-example/) // * The [Rust Subreddit](https://www.reddit.com/r/rust/) // * A [collection of links](https://github.com/ctjhoa/rust-learning) to blog posts, articles, // videos, etc. for learning Rust. diff --git a/src/part01.rs b/src/part01.rs index a4537ac..e00cf53 100644 --- a/src/part01.rs +++ b/src/part01.rs @@ -87,7 +87,7 @@ impl NumberOrNothing { //@ methods on an `enum` (and also on `struct`, which we will learn about later) //@ is independent of the definition of the type. `self` is like `this` in other //@ languages, and its type is always implicit. So `print` is now a method that -//@ takes as first argument a `NumberOrNothing`, just like `print_number_or_nothing`. +//@ takes `NumberOrNothing` as the first argument, just like `print_number_or_nothing`. //@ //@ Try making `number_or_default` from above an inherent method as well! diff --git a/src/part04.rs b/src/part04.rs index 21654cd..2381ff4 100644 --- a/src/part04.rs +++ b/src/part04.rs @@ -106,7 +106,7 @@ fn shared_ref_demo() { //@ their official name. //@ As an example, consider a function which increments every element of a vector by 1. -//@ The type `&mut Vec` is the type of mutable references to `vec`. Because the reference +//@ The type `&mut Vec` is the type of mutable references to `Vec`. Because the reference //@ is mutable, we can use a mutable iterator, providing mutable references to the elements. fn vec_inc(v: &mut Vec) { for e in v.iter_mut() { diff --git a/src/part06.rs b/src/part06.rs index 939fe08..4c7ee24 100644 --- a/src/part06.rs +++ b/src/part06.rs @@ -127,8 +127,8 @@ fn head(v: &Vec) -> Option<&T> { //@ have aliasing (of `first` and `v`) and mutation. But this time, the bug is hidden behind the //@ call to `head`. How does Rust solve this? If we translate the code above to Rust, it doesn't //@ compile, so clearly we are good - but how and why? -//@ (Notice that have to explicitly assert using //@ `unwrap` that `first` is not `None`, whereas -//@ the C++ code above would silently dereference a //@ `NULL`-pointer. But that's another point.) +//@ (Notice that we use `unwrap` to explicitly assert that `first` is not `None`, whereas +//@ the C++ code above would silently dereference a `NULL`-pointer. But that's another point.) fn rust_foo(mut v: Vec) -> i32 { let first: Option<&i32> = head(&v); /* v.push(42); */ diff --git a/workspace/Cargo.lock b/workspace/Cargo.lock index 7111b99..3040431 100644 --- a/workspace/Cargo.lock +++ b/workspace/Cargo.lock @@ -1,4 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + [[package]] name = "rust-101-workspace" version = "0.0.0" -