Render the book in PDF using pandoc and LaTeX. (#126)
* Render the book in PDF using `pandoc` and LaTeX. * Fix installs. * Go the apt-get route * Another attempt * Avoid installing twice. * Re-order. * Add more packages. * Minimise deps. Fix link checker. * Missing package. * Missing package. * Missing package. * More packages. * Missing package. * Missing package. * More packages... * Remove. * Fix link checker. * Fix link checker. * Fix path. * Add subtitle. * Avoid running over the right margin. * Avoid running over the right margin. * Formatting
This commit is contained in:
@@ -48,7 +48,7 @@ You can create an instance of a struct by specifying the values for each field:
|
||||
// Syntax: <StructName> { <field_name>: <value>, ... }
|
||||
let ticket = Ticket {
|
||||
title: "Build a ticket system".into(),
|
||||
description: "Create a system that can manage tickets across a Kanban board".into(),
|
||||
description: "A Kanban board".into(),
|
||||
status: "Open".into()
|
||||
};
|
||||
```
|
||||
@@ -130,7 +130,8 @@ let default_config = Configuration::default();
|
||||
You can use the function call syntax even for methods that take `self` as their first parameter:
|
||||
|
||||
```rust
|
||||
// Function call syntax: <StructName>::<method_name>(<instance>, <parameters>)
|
||||
// Function call syntax:
|
||||
// <StructName>::<method_name>(<instance>, <parameters>)
|
||||
let is_open = Ticket::is_open(ticket);
|
||||
```
|
||||
|
||||
|
||||
@@ -81,7 +81,7 @@ You have to use a **path** pointing to the entity you want to access.
|
||||
|
||||
You can compose the path in various ways:
|
||||
|
||||
- starting from the root of the current crate, e.g. `crate::module_1::module_2::MyStruct`
|
||||
- starting from the root of the current crate, e.g. `crate::module_1::MyStruct`
|
||||
- starting from the parent module, e.g. `super::my_function`
|
||||
- starting from the current module, e.g. `sub_module_1::MyStruct`
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ instantiation syntax:
|
||||
// This won't work!
|
||||
let ticket = Ticket {
|
||||
title: "Build a ticket system".into(),
|
||||
description: "Create a system that can manage tickets across a Kanban board".into(),
|
||||
description: "A Kanban board".into(),
|
||||
status: "Open".into()
|
||||
};
|
||||
```
|
||||
|
||||
@@ -44,9 +44,11 @@ error[E0382]: use of moved value: `ticket`
|
||||
| -------- `ticket` moved due to this method call
|
||||
...
|
||||
30 | println!("Your next task is: {}", ticket.title());
|
||||
| ^^^^^^ value used here after move
|
||||
| ^^^^^^
|
||||
| value used here after move
|
||||
|
|
||||
note: `Ticket::status` takes ownership of the receiver `self`, which moves `ticket`
|
||||
note: `Ticket::status` takes ownership of the receiver `self`,
|
||||
which moves `ticket`
|
||||
--> src/main.rs:12:23
|
||||
|
|
||||
12 | pub fn status(self) -> String {
|
||||
@@ -130,9 +132,11 @@ error[E0382]: use of moved value: `ticket`
|
||||
| -------- `ticket` moved due to this method call
|
||||
...
|
||||
30 | println!("Your next task is: {}", ticket.title());
|
||||
| ^^^^^^ value used here after move
|
||||
| ^^^^^^
|
||||
| value used here after move
|
||||
|
|
||||
note: `Ticket::status` takes ownership of the receiver `self`, which moves `ticket`
|
||||
note: `Ticket::status` takes ownership of the receiver `self`,
|
||||
which moves `ticket`
|
||||
--> src/main.rs:12:23
|
||||
|
|
||||
12 | pub fn status(self) -> String {
|
||||
@@ -199,8 +203,10 @@ fn main() {
|
||||
active: true,
|
||||
};
|
||||
// `b` is a reference to the `version` field of `config`.
|
||||
// The type of `b` is `&u32`, since it contains a reference to a `u32` value.
|
||||
// We create a reference by borrowing `config.version`, using the `&` operator.
|
||||
// The type of `b` is `&u32`, since it contains a reference to
|
||||
// a `u32` value.
|
||||
// We create a reference by borrowing `config.version`, using
|
||||
// the `&` operator.
|
||||
// Same symbol (`&`), different meaning depending on the context!
|
||||
let b: &u32 = &config.version;
|
||||
// ^ The type annotation is not necessary,
|
||||
|
||||
@@ -50,7 +50,11 @@ It takes ownership of `self`, changes the title, and returns the modified `Ticke
|
||||
This is how you'd use it:
|
||||
|
||||
```rust
|
||||
let ticket = Ticket::new("Title".into(), "Description".into(), "To-Do".into());
|
||||
let ticket = Ticket::new(
|
||||
"Title".into(),
|
||||
"Description".into(),
|
||||
"To-Do".into()
|
||||
);
|
||||
let ticket = ticket.set_title("New title".into());
|
||||
```
|
||||
|
||||
@@ -88,7 +92,11 @@ Nothing is returned.
|
||||
You'd use it like this:
|
||||
|
||||
```rust
|
||||
let mut ticket = Ticket::new("Title".into(), "Description".into(), "To-Do".into());
|
||||
let mut ticket = Ticket::new(
|
||||
"Title".into(),
|
||||
"Description".into(),
|
||||
"To-Do".into()
|
||||
);
|
||||
ticket.set_title("New title".into());
|
||||
|
||||
// Use the modified ticket
|
||||
|
||||
@@ -18,11 +18,25 @@ the function's arguments, local variables and a few "bookkeeping" values.\
|
||||
When the function returns, the stack frame is popped off the stack[^stack-overflow].
|
||||
|
||||
```text
|
||||
+-----------------+
|
||||
func2 | frame for func2 | func2
|
||||
+-----------------+ is called +-----------------+ returns +-----------------+
|
||||
| frame for func1 | -----------> | frame for func1 | ---------> | frame for func1 |
|
||||
+-----------------+ +-----------------+ +-----------------+
|
||||
+-----------------+
|
||||
| frame for func1 |
|
||||
+-----------------+
|
||||
|
|
||||
| func2 is
|
||||
| called
|
||||
v
|
||||
+-----------------+
|
||||
| frame for func2 |
|
||||
+-----------------+
|
||||
| frame for func1 |
|
||||
+-----------------+
|
||||
|
|
||||
| func2
|
||||
| returns
|
||||
v
|
||||
+-----------------+
|
||||
| frame for func1 |
|
||||
+-----------------+
|
||||
```
|
||||
|
||||
From an operational point of view, stack allocation/de-allocation is **very fast**.\
|
||||
|
||||
Reference in New Issue
Block a user