Book #13 - Rust in Action

Rust in Action
by T. S McNamara (2021)
We started with the MEAP. Now it’s published. The epub version still seems to be a MEAP. The PDF version looks final, and the PDF version is the one we’re using now as the definitive version.

Tuesday evenings - 7:00 pm pacific time

Meetup: https://www.meetup.com/Los-Gatos-Rust-Reading-Group/events/279749930
Zoom: https://us02web.zoom.us/j/84281187589
Manning: https://www.manning.com/books/rust-in-action
Source code (zip file): https://www.manning.com/downloads/1607 - more up-to-date with MEAP version 16 of the book than on GitHub
Source code (github): https://github.com/rust-in-action/code- many files are out of date with MEAP version 16 of the book

Chapter 12
Signals, interrupts, and exceptions

August 3, 2021

Presenter

Chapter 12
Signals, interrupts, and exceptions

August 3, 2021

Presenter

12.1 Glossary

Peter

12.2 How interrupts affect applications

Peter

12.3 Software interrupts

Peter

12.3.2 Using a global variable…

Peter

12.4 Hardware interrupts

Karthik

12.5 Signal handling

Karthik

12.6 Handling signals with custom actions

Karthik

12.7 Sending application-defined signals

Karthik

12.8 Ignoring signals

Casey

12.9 Shutting down from deeply nested call stacks

Casey

12.10 A note on applying these techniques to platforms without signals

Casey

12.11 Revising exceptions

Casey

 

Chapter 11
Kernel (see note below table)

July 27, 2010

Presenter

Chapter 11
Kernel (see note below table)

July 27, 2010

Presenter

On the setup and getting past the bugs for OS-0, OS-1, OS-2, OS-3, OS-4

Casey

11 (all sections)

Karthik (using old version of PDF with 4 sections instead of 6)

Note on Chapter 11

To get the code to run this week, I found that I needed to add some steps.

I made a fresh github clone, moved to the ch11/ch11-fledgeos-0 folder, changed the Cargo.toml x86_64 = "0.14", deleted the target folder (if I’d been mucking around), deleted the Cargo.lock, then ran cargo +nightly build and then cargo +nightly run. This worked for fledgeos-1, fledgeos-3, and fledgeos-4, too, but not for fledgos-2.

For fledgeos-2, one must also change the Cargo.toml version for bootloader -
bootloader = "0.9"
and also replace the last lines with
[package.metadata.bootimage]
build-command = ["build"]

run-command = ["qemu-system-x86_64", "-drive", "format=raw,file={}"]

Chapter 10
Processes, threads, and containers

July 20, 2021

Presenter

Chapter 10
Processes, threads, and containers

July 20, 2021

Presenter

10.1 Anonymous functions

Jens

10.2 Spawning threads

Jens

10.3 Differences between closures and functions

Karthik

10.4 Procedurally generated avatars from a multithreaded parser and code generator

Casey

10.5 Concurrency and task virtualization

Karthik

 

Chapter 9
Time and Time Keeping
July 13, 2021

Presenter

Chapter 9
Time and Time Keeping
July 13, 2021

Presenter

9.1 Background

Karthik

9.2 Sources of Time

Karthik

9.3 Definitions

Karthik

9.4 Encoding Time

Karthik

9.5 clock v0.1.0: Teaching an application how to tell the time

Jens

9.6 clock v0.1.1: Formatting timestamps to comply with ISO 8601 and email standards

Jens

9.7 clock v0.1.2: Setting the time

Casey

9.8 Improving error handling

Casey

9.9 clock v0.1.3: Resolving differences between clocks with the Network Time Protocol (NTP)

Casey

Chapter 8
Networking

June 8, 2021
July 13, 2021

Presenter

Chapter 8
Networking

June 8, 2021
July 13, 2021

Presenter

8.1 Just enough HTTP

Peter

8.2 Generating an HTTP GET request with reqwest

Peter

8.3 Trait Objects

Karthik

8.4 TCP

Jens

8.5 Ergonomic Error Handling for Libraries

Karthik

8.6 MAC addresses

Jens - July 13

8.7 Implementing state machines with Rust’s enums

Jens - July 13

8.8 Raw TCP
8.9 Creating a virtual networking device
8.10 “Raw” HTTP

Casey - July 13

 

Chapter 7
Files & Storage

June 1, 2021

Presenter

Chapter 7
Files & Storage

June 1, 2021

Presenter

7.1 What is a file format?

Peter

7.2 Creating your own file formats for data storage with serde

Peter

7.3 Implementing a hexdump Clone

Peter

7.4.1 File operations in Rust
7.4.1Opening a file in Rust…

Peter

7.4.2 Interacting with the file system in a type-safe manner with std::fs::Path

Peter

Implementing a key-value store with a log-structured, append-only storage architecture

Karthik

actionkv v0.1 front-end code

Karthik

Understanding the core of actionkv: the libactionkv crate

7.7.1-7.7.3

Karthik

7.7.4-7.7.6

Jens

7.7.7-7.7.11

Jens

 

Chapter 6
Memory

May 11, 2021

Presenter

Chapter 6
Memory

May 11, 2021

Presenter

6.1 Pointers

Peter

6.2 Exploring Rust’s reference and pointer types
6.2.1-6.2.2

Peter

6.2.3

Casey

6.3 Providing programs with memory for their data
6.3.1-6.3.2

Casey

6.3.3-6.3.4

TBD after 1st edition is released

6.4 Virtual Memory

TBD after 1st edition is released

 

Chapter 5
Data in Depth

May 4, 2021

Presenter

Chapter 5
Data in Depth

May 4, 2021

Presenter

5.1 Bit Patterns and Types

Casey

5.2 Life of an Integer

Casey

5.3 Decimal Numbers

Casey

5.4 Generating f32 values between 0 and 1 from random bytes

Peter

5.5 Implementing a CPU in Software to Establish that Functions are also Data

Peter

5.5.2 First working emulator

Peter

5.5.4 CPU 3: Adding functions

Peter

 

Chapter 4
Lifetimes, Ownership and Borrowing

April 27, 2021

Presenter

Chapter 4
Lifetimes, Ownership and Borrowing

April 27, 2021

Presenter

4.1 “Implementing” a Mock CubeSat Ground
Station

4.2 Guide to the figures in this chapter

Karthik

4.3 What is an Owner? Does it Have any Responsibilities?

4.4 How Ownership Moves

Casey

4.5 Resolving Ownership Issues

Tim

4.5.1 Use references where full ownership is not required

Tim

4.5.2 Use Fewer Long-Lived Values

Peter

4.5.3 Duplicate the value

Peter

4.5.4 Wrap Data Within Specialty Types

Peter

 

Chapter 3
Compound Data Types

April 20, 2021

Presenter

Chapter 3
Compound Data Types

April 20, 2021

Presenter

Using plain functions to experiment with an API

Karthik

Modeling files with struct

Karthik

Adding Methods to a struct with impl

Tim

Returning errors

Casey

Defining and making use of enum

Casey

Defining Common Behavior with Traits

Casey

Exposing your types to the world

Peter

Creating in-line Documentation

Peter

 

Chapter 2

Language Foundations
April 13, 2021

Presenter

Chapter 2

Language Foundations
April 13, 2021

Presenter

Create a running program
A glance at Rust’s syntax

Karthik

Numbers

Karthik

Iteration

Karthik

Flow control

Karthik

Defining functions
Project: Rendering the Mandelbrot set

Peter

Advanced function definitions

Peter

Creating grep-lite

Peter

Making lists of things with arrays, slices and vectors

Casey

Including Third Party Code

Casey

Supporting Command Line Arguments

Casey

Reading From Files
Reading from STDIN

Casey

 

Chapter 1
Introducing Rust
April 6, 2021

Presenter

Chapter 1
Introducing Rust
April 6, 2021

Presenter

Orientation for new members of Reading Group

Casey

Chapter 1

Casey