Buy Code like a pro in rust 1st edition brenden matthews ebook at discount price

Page 1


Brenden Matthews

Visit to download the full and correct content document: https://textbookfull.com/product/code-like-a-pro-in-rust-1st-edition-brenden-matthews/

More products digital (pdf, epub, mobi) instant download maybe you interests ...

Code Like a Pro in C MEAP V05 Jort Rodenburg

https://textbookfull.com/product/code-like-a-pro-in-cmeap-v05-jort-rodenburg/

Here Lives a Corpse (Here Lies #1) 1st Edition C.L. Matthews [Matthews

https://textbookfull.com/product/here-lives-a-corpse-herelies-1-1st-edition-c-l-matthews-matthews/

09 A Milf In Paradise 1st Edition Gareth Matthews

https://textbookfull.com/product/09-a-milf-in-paradise-1stedition-gareth-matthews/

Learn Rust in a Month of Lunches 1st Edition David Macleod

https://textbookfull.com/product/learn-rust-in-a-month-oflunches-1st-edition-david-macleod/

How To Build a Sauna Building Your Own Cheap Indoor Sauna From Scratch Like a Pro Victor Allan

https://textbookfull.com/product/how-to-build-a-sauna-buildingyour-own-cheap-indoor-sauna-from-scratch-like-a-pro-victor-allan/

How to Be a Coder Learn to Think Like a Coder with Fun Activities Then Code in Scratch 3 0 Online 1st Edition

Kiki Prottsman

https://textbookfull.com/product/how-to-be-a-coder-learn-tothink-like-a-coder-with-fun-activities-then-code-inscratch-3-0-online-1st-edition-kiki-prottsman/

Rust in Action T.S. Mcnamara

https://textbookfull.com/product/rust-in-action-t-s-mcnamara/

Asynchronous Programming in Rust 1st Edition Carl

Fredrik Samson

https://textbookfull.com/product/asynchronous-programming-inrust-1st-edition-carl-fredrik-samson/

Hands On Functional Programming in Rust 1st Edition

Andrew Johnson

https://textbookfull.com/product/hands-on-functional-programmingin-rust-1st-edition-andrew-johnson/

MANNING

Brenden Matthews

High level

Rust sweet spot

High-level languages

Domain-specific languages

Esoteric languages

Scripting languages: Python, Ruby, and Elixir

System languages: C, C++, C#, Java, Go, and Rust

Assembly languages

Machine languages

Low level

Code Like a Pro in Rust

BRENDEN MATTHEWS

MANNING S HELTER I SLAND

For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact

Special Sales Department

Manning Publications Co.

20 Baldwin Road PO Box 761

Shelter Island, NY 11964

Email: orders@manning.com

©2024 by Manning Publications Co. All rights reserved.

No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher.

Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps.

Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end.

Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15 percent recycled and processed without the use of elemental chlorine.

The author and publisher have made every effort to ensure that the information in this book was correct at press time. The author and publisher do not assume and hereby disclaim any liability to any party for any loss, damage, or disruption caused by errors or omissions, whether such errors or omissions result from negligence, accident, or any other cause, or from any usage of the information herein.

Manning Publications Co.Development editor:Karen Miller

20 Baldwin RoadReview editor:Aleksandar Dragosavljević PO Box 761Production editor:Deirdre Hiam

Shelter Island, NY 11964Copy editor:Christian Berk

Proofreader:Katie Tennant

Technical proofreader:Jonathan Reeves

Typesetter:Gordan Salinovic

Cover designer:Marija Tudor

ISBN 9781617299643

Printed in the United States of America

prefacex acknowledgmentsxi about this bookxii about the authorxvi about the cover illustrationxvii

1 Feelin’ Rusty1

1.1What’s Rust?2

1.2What’s unique about Rust?4

Rust is safe4 ■ Rust is modern5 ■ Rust is pure open source5 Rust vs. other popular languages6

1.3When should you use Rust?7 Rust use cases7

1.4Tools you’ll need8 PART 1PRO RUST

2 Project management with Cargo11

2.1Cargo tour12

Basic usage12 ■ Creating a new application or library13 Building, running, and testing14 ■ Switching between toolchains15

2.2Dependency management16

Handling the Cargo.lock file18

2.3Feature flags19

2.4Patching dependencies21

Indirect dependencies23 ■ Best practices for dependency patching23

2.5Publishing crates24

CI/CD integration24

2.6Linking to C libraries27

2.7Binary distribution29

Cross compilation30 ■ Building statically linked binaries30

2.8Documenting Rust projects31

Code examples in documentation34

2.9Modules35

2.10Workspaces37

2.11Custom building scripts40

2.12Rust projects in embedded environments41 Memory allocation42

3 Rust tooling43

3.1Overview of Rust tooling44

3.2Using rust-analyzer for Rust IDE integration45 Magic completions46

3.3Using rustfmt to keep code tidy49 Installing rustfmt50 ■ Configuring rustfmt50

3.4Using Clippy to improve code quality51

Installing Clippy51 ■ Clippy’s lints52 ■ Configuring Clippy53 ■ Automatically applying Clippy’s suggestions54 Using Clippy in CI/CD54

3.5Reducing compile times with sccache55 Installing sccache55 ■ Configuring sccache56

3.6Integration with IDEs, including Visual Studio Code56

3.7Using toolchains: Stable vs. nightly57 Nightly-only features57 ■ Using nightly on published crates58

3.8Additional tools: cargo-update, cargo-expand, cargo-fuzz, cargo-watch, cargo-tree58

Keeping packages up to date date with cargo-update59

Debugging macros with cargo-expand59 ■ Testing libFuzzer60

Iterating with cargo-watch60 ■ Examining dependencies with cargo-tree61 PART 2CORE DATA

4 Data structures65

4.1Demystifying String, str, &str, and &'static str66

String vs str66 ■ Using strings effectively67

4.2Understanding slices and arrays69

4.3Vectors72

Diving deeper into Vec72 ■ Wrapping vectors73 ■ Types related to vectors74

4.4Maps74

Custom hashing functions75 ■ Creating hashable types76

4.5Rust types: Primitives, structs, enums, and aliases77

Using primitive types77 ■ Using tuples80 ■ Using structs81 Using enums84 ■ Using aliases86

4.6Error handling with Result87

4.7Converting types with From/Into88

TryFrom and TryInto90 ■ Best practices for type conversion using From and Into90

4.8Handling FFI compatibility with Rust’s types90

5 Working with memory93

5.1Memory management: Heap and stack94

5.2Understanding ownership: Copies, borrowing, references, and moves96

5.3Deep copying97

5.4Avoiding copies99

5.5To box or not to box: Smart pointers100

5.6Reference counting103

5.7Clone on write106

5.8Custom allocators110

Writing a custom allocator110 ■ Creating a custom allocator for protected memory113

5.9Smart pointers summarized117

PART 3CORRECTNESS ....................................................119

6 Unit testing121

6.1How testing is different in Rust122

6.2Review of built-in testing features123

6.3Testing frameworks125

6.4What not to test: Why the compiler knows better than you128

6.5Handling parallel test special cases and global state129

6.6Thinking about refactoring134

6.7Refactoring tools134

Reformatting135 ■ Renaming135 ■ Relocating136 Rewriting137

6.8Code coverage138

6.9Dealing with a changing ecosystem140

7 Integration testing141

7.1Comparing integration and unit testing142

7.2Integration testing strategies144

7.3Built-in integration testing vs. external integration testing146

7.4Integration testing libraries and tooling147

Using assert_cmd to test CLI applications147 ■ Using proptest with integration tests149 ■ Other integration testing tools150

7.5Fuzz testing150

PART 4ASYNCHRONOUS RUST .........................................155

8 Async Rust157

8.1Runtimes159

8.2Thinking asynchronously159

9

8.3Futures: Handling async task results161 Defining a runtime with #[tokio::main]164

8.4The async and .await keywords: When and where to use them164

8.5Concurrency and parallelism with async166

8.6Implementing an async observer169

8.7Mixing sync and async174

8.8When to avoid using async176

8.9Tracing and debugging async code177

8.10Dealing with async when testing180

Building an HTTP REST API service182

9.1Choosing a web framework183

9.2Creating an architecture184

9.3API design184

9.4Libraries and tools185

9.5Application scaffolding187 main()187 ■ init_tracing()188 ■ init_dbpool()189

9.6Data modeling190

SQL schema190 ■ Interfacing with our data191

9.7Declaring the API routes194

9.8Implementing the API routes195

9.9Error handling197

9.10Running the service198

10

Building an HTTP REST API CLI204

10.1Deciding which tools and libraries to use205

10.2Designing the CLI206

10.3Declaring the commands207

10.4Implementing the commands209

10.5Implementing requests210

10.6Handling errors gracefully211

10.7Testing our CLI212

11

Optimizations219

11.1Zero-cost abstractions220

11.2Vectors221

Vector memory allocation221 ■ Vector iterators223 ■ Fast copies with Vec and slices225

11.3SIMD226

11.4Parallelization with Rayon227

11.5Using Rust to accelerate other languages229

11.6Where to go from here231

11.7Installing tools for this book233

Installing tools on macOS using Homebrew233 ■ Installing tools on Linux systems233 ■ Installing rustup on Linux- or UNIXbased systems233 ■ Installing tools on Windows234

11.8Managing rustc and other Rust components with rustup234

Installing rustc and other components234 ■ Switching default toolchains with rustup234 ■ Updating Rust components234 Installing HTTPie235

appendix233

index237

I love learning new programming languages.

preface

I’ve been writing code for a long time, but I still find myself occasionally banging my head against a wall when learning new languages or tools. Rust is a unique language in many respects, and it introduces several concepts that some people may have never seen before, even if they have been programming for many years.

I have spent a great deal of time working with Rust both professionally and as a contributor to community projects, and I have written this book to share what I learned along the way. By taking the time to read this book, you will save yourself a lot of time by avoiding the common pitfalls and problems people encounter when they’re new to Rust.

acknowledgments

I’d like to thank my friends Javeed Shaikh and Ben Lin for providing feedback on early drafts of the manuscript as well as Manning Publications for working patiently with me in completing this book.

Specifically, I would like to thank the development editor Karen Miller, the review editor Aleksandar Dragosavljevi ć, the production editor Deirdre Hiam, the copyeditor Christian Berk, and the proofreader Katie Tennant.

I thank all the reviewers—Adam Wendell, Alessandro Campeis, Arun Bhagvan Kommadi, Christian Witts, Clifford Thurber, David Moshal, David Paccoud, Gianluigi Spagnuolo, Horaci Macias, Jaume Lopez, Jean-Paul Malherbe, João Pedro de Lacerda, Jon Riddle, Joseph Pachod, Julien Castelain, Kevin Orr, Madhav Ayyagari, Martin Nowack, Matt Sarmiento, Matthew Winter, Matthias Busch, PK Chetty, Rohit Goswami, Satadru Roy, Satej Kumar Sahu, Sebastian Palma, Seth MacPherson, Simon Tschöke, Sri Kadimisetty, Tim van Deurzen, William Wheeler, and Zach Peters—your suggestions help to make this a better book.

about this book

While writing this book, I’ve paid special attention to noting when features or interfaces are subject to change. While core language features may not change substantially, practical use of Rust may involve hundreds of separate libraries and projects. By reading this book, you’ll be introduced to strategies and techniques that help you navigate this evolving ecosystem.

As you continue to read, I would like to mention that the Rust ecosystem is rapidly evolving. I have written this book with the future of Rust in mind, but I cannot guarantee that the language and libraries won’t change substantially after the book has been published.

How is this book different?

This book focuses on the practical usage of Rust, while considering the big-picture themes, limitations of Rust and its tooling, and how developers can become productive with Rust quickly. The text is not an introduction to the Rust language, nor is it a replacement for the official Rust documentation. This book supplements the existing documentation and resources available for Rust and provides the most important lessons you won’t find in Rust documentation in one place. While Code Like a Pro in Rust does not provide an exhaustive reference for the Rust language, I do indicate where to go for additional information when appropriate.

Who should read this book?

Readers of this book should be familiar with Rust and consider themselves beginner to intermediate Rust programmers. If you have never used Rust, you may find this book difficult to read, as it contains many references to Rust-specific features, for which I will not spend much time discussing the background. If you find yourself confused about Rust syntax or technical details, I recommended starting with Rust in Action by Tim McNamara (Manning, 2021) or the official Rust book at https:// doc.rust-lang.org/book/ .

For those who are intermediate to advanced Rust programmers, some content in this book might be familiar. In your case, I recommend you skip ahead to the chapters most interesting to you.

How this book is organized

The chapters of this book can be read in any order, according to what interests you most. While I would like for every reader to read every chapter from start to finish, I also understand that readers have varied goals and experience levels. Most of the later chapters build on top of content from earlier chapters, so while it isn’t a requirement, you’ll get the most benefit from reading the chapters in order. Throughout the book, I make references to other chapters or topics as needed, and you may want to make notes to go back and read other sections accordingly.

If you are relatively new to Rust or programming in general, then I recommend reading the whole book from cover to cover, to get the most out of it. For an excellent introduction to the Rust programming language, I recommend you first read the official Rust book (https://doc.rust-lang.org/book/).

Part 1 covers an introduction to Rust and its tooling:

 Chapter 1 provides an overview of Rust and what makes it special.

 Chapter 2 introduces Cargo, Rust’s project management tool.

 Chapter 3 provides a tour of key Rust tooling.

Part 2 covers Rust’s data structures and memory management:

 Chapter 4 discusses Rust data structures.

 Chapter 5 goes into detail on Rust’s memory management model.

Part 3 discusses testing methods for correctness:

 Chapter 6 provides a tour of Rust’s unit testing features.

 Chapter 7 dives into integration and fuzz testing.

Part 4 introduces asynchronous Rust programming:

 Chapter 8 provides an overview of Rust’s async features.

 Chapter 9 walks through implementing an async HTTP server.

 Chapter 10 walks through implementing an async HTTP client.

Part 5 discusses optimizations:

 Chapter 11 dives into the details of Rust optimizations.

About the code

This book contains many examples of source code both in numbered listings and in line with normal text. In both cases, source code is formatted in a fixed-width font like this to separate it from ordinary text. Sometimes code is also in bold to highlight code that has changed from previous steps in the chapter, such as when a new feature adds to an existing line of code.

In many cases, the original source code has been reformatted; we’ve added line breaks and reworked indentation to accommodate the available page space in the book. In some cases, even this was not enough, and listings include line-continuation markers (➥). Additionally, comments in the source code have often been removed from the listings when the code is described in the text. Code annotations accompany many of the listings, highlighting important concepts.

You can get executable snippets of code from the liveBook (online) version of this book at https://livebook.manning.com/book/code-like-a-pro-in-rust . The complete code for the examples in the book is available for download from the Manning website at https://www.manning.com/books/code-like-a-pro-in-rust, and from GitHub at https://github.com/brndnmtthws/code-like-a-pro-in-rust-book .

You can clone a copy of the book’s code locally on your computer by running the following command with Git:

$gitclonehttps://github.com/brndnmtthws/code-like-a-pro-in-rust-book

The book’s code is organized into directories by chapter and section within the repository, organized within each section by topic. The code is licensed under the MIT license, which is a permissive license that allows you to copy the code samples and use them as you see fit, even as the basis for your own work.

Throughout this book, there are many references to open source projects which are used as teaching aids. The source code for most of these projects (or crates) can be obtained from their respective project repositories—for reference, see the following table.

List of projects referenced in this book

Name

dryoc Cryptography library https://crates.io/crates/dryochttps://github.com/brndnmtthws/ dryoc.git

rand Provides random values https://rust-random.github.io/bookhttps://github.com/rust-random/ rand.git

Rocket HTTP/web framework https://rocket.rshttps://github.com/SergioBenitez/ Rocket.git

num_cpus Returns the number of logical CPU cores https://crates.io/crates/num_cpushttps://github.com/seanmonstar/ num_cpus.git

zlib Compression library https://zlib.net/https://github.com/madler/zlib.git

List of projects referenced in this book (continued)

lazy_static Global static variable library https://crates.io/crates/lazy_statichttp://mng.bz/E9rD

Tokio Async runtime https://tokio.rshttps://github.com/tokio-rs/tokio

Syn Rust code parser https://crates.io/crates/synhttps://github.com/dtolnay/syn

axum Async web framework https://docs.rs/axum/latest/axum/https://github.com/tokio-rs/axum

liveBook discussion forum

Purchase of Code Like a Pro in Rust includes free access to liveBook, Manning’s online reading platform. Using liveBook’s exclusive discussion features, you can attach comments to the book globally or to specific sections or paragraphs. It’s a snap to make notes for yourself, ask and answer technical questions, and receive help from the author and other users. To access the forum, go to https://livebook.manning.com/ book/code-like-a-pro-in-rust. You can also learn more about Manning’s forums and the rules of conduct at https://livebook.manning.com/discussion Manning’s commitment to our readers is to provide a venue where a meaningful dialogue between individual readers and between readers and the author can take place. It is not a commitment to any specific amount of participation on the part of the author, whose contribution to the forum remains voluntary (and unpaid). We suggest you try asking him some challenging questions lest his interest stray! The forum and the archives of previous discussions will be accessible from the publisher’s website as long as the book is in print.

about the author

BRENDEN MATTHEWS is a software engineer, entrepreneur, and prolific open source contributor. He has been using Rust since the early days of the language and has contributed to several Rust tools and open source projects, in addition to using Rust professionally. He’s the author of Conky, a popular system monitor, and a member of the Apache Software Foundation, with over 25 years of industry experience. Brenden is also a YouTube contributor and instructor as well as an author of many articles on Rust and other programming languages. He has given talks at several technology conferences, including QCon, LinuxCon, ContainerCon, MesosCon, All Things Open, and Rust meetups. He has been a GitHub contributor for over 13 years, has multiple published Rust crates, has contributed to several open source Rust projects, and has built production-grade Rust applications professionally. Brenden is also the author of Rust Design Patterns, a follow-up to Code Like a Pro in Rust.

about the cover illustration

The figure on the cover of Code Like a Pro in Rust is “Femme de l’Argou,” or “Woman of Aargau, Switzerland,” taken from a collection by Jacques Grasset de Saint-Sauveur, published in 1797. Each illustration is finely drawn and colored by hand.

In those days, it was easy to identify where people lived and what their trade or station in life was just by their dress. Manning celebrates the inventiveness and initiative of the computer business with book covers based on the rich diversity of regional culture centuries ago, brought back to life by pictures from collections such as this one.

This chapter covers

 Introducing Rust

 Surveying the language and its purpose

 Comparing Rust to other programming languages

 Getting the most out of this book

Feelin’ Rusty

This book will help beginner-to-intermediate Rust developers get up to speed on the language, tooling, data structures, memory management, testing, asynchronous programming, and best practices as quickly as possible. By the end of this book, you should feel confident building production-grade software systems with idiomatic—or Rustaceous —Rust. This book is not an exhaustive reference of the Rust language or its tooling; instead, it focuses solely on the good stuff. Rust offers compelling features for those looking to build fast, safe programs. Some people find Rust’s learning curve a bit steep, and this book can help overcome the challenging parts, clarify Rust’s core concepts, and provide actionable advice.

The book is written for those already familiar with the Rust programming language. Additionally, it will be of much benefit to the reader to have experience with other system-level programming languages, such as C, C++, and Java. You need not

be an expert in Rust to get value out of this book, but I won’t spend much time reviewing basic syntax, history, or programming concepts.

Many of the code samples in this book are partial listings, but the full working code samples can be found on GitHub at http://mng.bz/BA70. The code is made available under the MIT license, which permits usage, copying, and modifications without restriction. I recommend you follow along the full code listings if you can, to get the most out of this book. The code samples are organized by chapter within the repository; however, some examples may span multiple sections or chapters and are, thus, named based on their subject matter.

1.1What’s Rust?

Rust (figure 1.1) is a modern programming language with a focus on performance and safety. It has all the features you would likely want or expect from a modern programming language, including closures, generics, asynchronous I/O, powerful tooling, IDE integrations, linters, and style-checking tools. Alongside Rust’s robust set of features, it boasts a vibrant, growing community of developers and contributors. Rust is a powerful language with several applications, including web development. While it was written with the intention of being a systems-level language, it also fits quite well in domains that are well outside system-level programming, such as web programming with WebAssembly (Wasm), a web standard for executing bytecode. In figure 1.2, I’ve illustrated where Rust generally sits in the language stack, but this is by no means definitive.

High-level languages Domain-specific languages

languages Rust sweet spot Assembly languages

Scripting languages:

languages: C, C++, C#, Java, Go, and Rust

Figure 1.1Rust language logo (Source: Rust core team. Licensed under CC BY 4.0.)

Figure 1.2Where Rust fits in language classifications

Rust’s creators envisioned its primary use as building system-level code and libraries that are safety and performance critical. Rust’s safety guarantees don’t come for free; the cost of those features comes in terms of added language and compilation-time complexity.

Rust can compete with higher-level languages, like Python or Ruby; however, its main drawback here is Rust’s lack of a runtime interpreter, as it is compiled to platform-dependent binaries. Thus, one must distribute their Rust programs as binaries (or somehow provide a compiler). There are a few cases in which Rust is likely a much better choice than a scripting language, like Python or Ruby, such as embedded or resource-constrained environments.

Rust can also be compiled for web browsers directly, through the use of Wasm, which has grown significantly in popularity recently. Wasm is simply treated as yet another CPU target, much like x86-64 or AArch64, except the CPU in this case is a web browser.

Some highlights of the Rust language include the following:

 Rust features a core suite of tools for working with the language, including, but not limited to, the following:

– rustc, the official Rust compiler

–cargo, a package manager and build tool

– https://crates.io, a package registry

 Rust has many modern programming language features, including the following:

–The borrow checker, which enforces Rust’s memory-management model

–Static typing

–Asynchronous I/O

–Closures

–Generics

–Macros

–Traits

 Rust offers several community tools for improving code quality and productivity:

– rust-clippy, an advanced linter and style tool

–Rustfmt, an opinionated code formatter

– sccache, a compiler cache for rustc

– rust-analyzer, a full-featured IDE integration for the Rust language

The most loved language

At the time of writing, Rust has won the most loved programming language category of Stack Overflow’s annual developer survey every year since 2016. In the 2021 survey, out of 82,914 responses, Rust was loved by 86.98% of those using it (“2021 Developer Survey,” http://mng.bz/ddON). The second-place language, Clojure, came in at 81.12% loved, and the third-place language, TypeScript, was 72.73% loved.

1.2What’s unique about Rust?

Rust addresses common programming mistakes with a unique set of abstractions— some of which you may have never encountered before. In this section, I’ll provide a quick tour of the features that make Rust different.

1.2.1Rust is safe

Safety is one of Rust’s hallmarks, and its safety features are what differentiates it most from other languages. Rust can provide strong safety guarantees thanks to a feature called the borrow checker. In languages like C and C++, memory management is a somewhat manual process, and developers must be aware of the implementation details when considering memory management. Languages like Java, Go, and Python use automatic memory management, or garbage collection, which obfuscates the details of allocating and managing memory with the tradeoff of incurring some performance overhead.

Rust’s borrow checker works by validating references at compile time, rather than reference counting or performing garbage collection at run time. It’s a unique feature that also introduces challenges when writing software, especially if you’ve never encountered the borrow checker.

The borrow checker is part of Rust’s compiler rustc, which verifies that for any given object or variable, there can be no more than one mutable reference at a time. It’s possible to have multiple immutable references (i.e., read-only references) to objects or variables, but you can never have more than a single active mutable reference. As shown in figure 1.3, Rust guarantees memory safety by checking that there’s never an overlap between mutable and immutable references.

Rust uses resource acquisition is initialization (RAII) to keep track of when variables and all their references are in and out of scope. Once they are out of scope, memory canbe released. The borrow checker will not allow references to out-of-scope variables, and it only allows one mutable reference or multiple immutable references but never both.

The borrow checker provides safety for concurrent programming, too. Race conditions may arise when sharing data, such as between separate threads. In most cases, the root cause is the same: simultaneous shared mutable references. With Rust, it’s

Figure 1.3Rust borrow checker rules
Venn diagram

1.2What’s unique about Rust?

not possible to have more than one mutable reference, thereby ensuring data synchronization problems are avoided, or at least not created unintentionally.

Rust’s borrow checker is tricky to master at first, but soon, you’ll find it’s the best feature of Rust. Similar to languages like Haskell, once you manage to make your code compile, that’s often enough (when combined with adequate testing) to guarantee your code will work and never crash (testing is covered in chapters 6 and 7). There are exceptions to this, but by and large, code written in Rust will not crash from common memory errors, like reading past the end of a buffer or mishandling memory allocations and deallocations.

1.2.2Rust is modern

The Rust language developers have paid special attention to supporting modern programming paradigms. Coming from other languages, you may notice Rust’s outwith-the-old, in-with-the-new approach. Rust largely eschews paradigms like objectoriented programming in favor of traits, generics, and functional programming. Notably, Rust emphasizes the following paradigms and features:

 Functional programming —Closures, anonymous functions, and iterators

 Generics

 Traits —Sometimes referred to as interfaces in other languages

 Lifetimes —For handling references

 Metaprogramming —Through its macro system

 Asynchronous programming —Via async/await

 Package and dependency management —Via Cargo

 Zero-cost abstractions

Traditional object-oriented features are notably absent from Rust. And while it’s true that you can model patterns similar to classes and inheritance in Rust, the terminology is different, and Rust lends itself to functional programming. For those coming from an object-oriented background, such as C++, Java, or C#, it may take some time to get used to. Once they adjust to the new patterns, many programmers find a certain delight and freedom in being liberated from the rigidness of object-oriented ideology.

1.2.3Rust is pure open source

When considering languages and platforms to build upon, community governance is important to consider when thinking about the long-term maintenance of any project. Some languages and platforms that are open source but mostly governed by large companies, such as Go (Google), Swift (Apple), and .NET (Microsoft), come with certain risks, such as making technology decisions that favor their products.

Rust is a community-driven project, led primarily by the not-for-profit Mozilla Foundation. The Rust programming language itself is dual licensed under the Apache and MIT licenses. Individual projects within the Rust ecosystem are individually

licensed, but most key components and libraries exist under open source licenses, such as MIT or Apache.

There is strong support among large technology companies for Rust. Amazon, Facebook, Google, Apple, Microsoft, and others have made plans to use or pledge support for Rust. By not being tied to any particular entity, Rust is a good long-term choice with minimal potential for conflict of interest.

NOTE The Rust team maintains a list of production users on the official Rust language website: https://www.rust-lang.org/production.

1.2.4Rust vs. other popular languages

Table 1.1, while not exhaustive, provides a summary of the differences between Rust and other popular programming languages.

Table 1.1Rust compared to other languages

RustConcurrent, functional, generic, imperative

Static, strongRAII, explicitSafety, performance, async

CImperativeStatic, weakExplicitEfficiency, portability, low-level memory management, widely supported

C++Imperative, objectoriented, generic, functional

C#Object-oriented, imperative, event-driven, functional, reflective, concurrent

JavaScriptPrototypes, functional, imperative

JavaGeneric, object-oriented, imperative, reflective

PythonFunctional, imperative, object-oriented, reflective

RubyFunctional, imperative, object-oriented, reflective

TypeScriptFunctional, generic, imperative, object-oriented

Static, mixedRAII, explicitEfficiency, portability, low-level memory management, widely supported

Static, dynamic, strong Garbage collected

Dynamic, duck, weak Garbage collected

Static, strongGarbage collected

Dynamic, duck, strong Garbage collected

Dynamic, duck, strong Garbage collected

Static, dynamic, duck, mixed Garbage collected

Supported on Microsoft platforms, large ecosystem, advanced language features

Widely supported, async

Bytecode-based, productiongrade Java Virtual Machine, widely supported, large ecosystem

Interpreted, highly portable, widely used

Syntax, everything’s an expression, simple concurrency model

Types, JavaScript compatibility, async

1.3When

should you use Rust?

should you use Rust?

Rust is a systems programming language, generally meant to be used for lower-level system programming, in situations similar to where you’d use C or C++. Rust may not be well suited for use cases in which you want to optimize for developer productivity, as writing Rust is often trickier than writing code with popular languages like Go, Python, Ruby, or Elixir.

Rust is also a great candidate for web programming with the onset of Wasm. You can build applications and libraries with Rust, compile them for Wasm, and take advantage of the benefits of Rust’s safety model with the portability of the web.

There is no specific use case for Rust—you should use it where it makes sense. I have personally used Rust for many small one-off projects, simply because it’s a joy to write, and once the code compiles, you can generally count on it working. With proper use of the Rust compiler and tooling, your code is considerably less likely to have errors or behave in undefined ways—which are desirable properties for any project.

TIP Using the right tool for the job is important for any endeavor to succeed, but to know which tools are the right tools, you must first gain experience using a variety of different tools for different tasks.

1.3.1Rust

use cases

The following is a list of example use cases for which Rust is well suited:

 Code acceleration —Rust can accelerate functions from other languages, like Python, Ruby, or Elixir.

 Concurrent systems —Rust’s safety guarantees apply to concurrent code. This makes Rust ideal for use in high-performance concurrent systems.

 Cryptography —Rust is ideally suited for implementing cryptography algorithms.

 Embedded programming —Rust generates binaries that bundle all dependencies, excluding the system C library or any third-party C libraries. This lends itself to a relatively straightforward binary distribution, particularly on embedded systems. Additionally, Rust’s memory-management model is great for systems that demand minimal memory overhead.

 Hostile environments —In situations where safety is of utmost concern, Rust’s guarantees are a perfect fit.

 Performance critical —Rust is optimized for safety and performance. It’s easy to write code that’s extremely fast, without compromising on safety, with Rust.

 String processing —String processing is an incredibly tricky problem, and Rust is particularly well suited for the task because it makes it easy to write code that can’t overflow.

 Replacing legacy C or C++ —Rust is an excellent choice for replacing legacy C or C++.

 Safe web programming —Rust can target Wasm, allowing us to build web applications with Rust’s safety and strong type checking.

1.4Tools you’ll need

Included as part of this book is a collection of code samples, freely available under the MIT license. To obtain a copy of the code, you will need an internet-connected computer with a supported operating system and the tools discussed in table 1.2 installed. For details on installing these tools, refer to the appendix.

Table 1.2Required tools

Name

git

Description

The source code for this book is stored in a public Git repository, hosted on GitHub at http://mng.bz/BA70

rustup This is Rust’s tool for managing Rust components. rustup will manage your installation of rustc and other Rust components.

gcc or clang You must have a copy of GNU Compiler Collection (GCC) or Clang installed to build certain code samples, but it’s not required for most. Clang is likely the best choice for most people, and thus, it’s referred to by default. In cases where the clang command is specified, you may freely substitute gcc if you prefer.

Summary

 Rust is a modern system-level programming language with advanced safety features and zero-cost abstractions.

 Rust’s steep learning curve can be an initial deterrent, but this book helps you move beyond these hurdles.

 Rust has many similarities to—and borrows concepts from—other languages, but it’s unique, as explained throughout this book.

 Rust’s vibrant community and mature package repository provide a rich ecosystem to build atop.

 To get the most out of this book, follow along the code samples from http://mng.bz/BA70.

Part 1 Pro Rust

Rust offers a great deal of value: speed, safety, and a rich set of tools for working with the language. Learning the language is important, but having command of the tools provided by both the core Rust project and the wider community will help you achieve mastery quickly.

Tooling makes all the difference between a good and a bad programming language—as does your effectiveness with the tooling. Merely having awareness about what tooling is available and some of the capabilities it provides will place you head and shoulders above developers who don’t take the time to learn the tools.

In the first part of the book, we’ll spend some time introducing (or reviewing, depending on your level of expertise) the basics of the language and, in particular, the tools you’ll need to work with it. You don’t need to be a Rust Pro to use its tools, but you do need to understand the tools to effectively use the language.

Another random document with no related content on Scribd:

joissa Algonquinin kirjailijat, vaivattuaan kaiken päivää aivojaan

ollakseen huvittavia, edelleen vaivaavat aivojaan kaiken yötä keksimällä niinsanottuja sana-arvoituksia, koska he eivät koskaan näy istahtavan lepäämään.

Ja sitten erään sellaisen huvittavan sana-arvoituksen keskellä muuan niistä suurista kirjailijoista, joka oli sen keksinyt, innostui menestyksestään ja pudotti palavan kynttilän yhteen niistä näppäristä paperilakeista, joita saadaan makeislaatikoista. Silloin paperilakit syttyivät tuleen, ja jokaisen täytyi rynnätä ulos pakokauhun vallassa. Mutta kun he kaikki olivat päässeet ulos kadulle ja laskivat lukumääräänsä, huomasivat he, että yksi joukosta oli poissa. Ja lopuksi he saivat selville, että se oli se venäläinen kreivitär, ja Peter Hood päätti, että niin kauan kuin hän oli hänen saattajanaan, täytyi hänen todella tehdä jotakin pelastaakseen hänen henkensä. Ja kun hän palasi palavaan rakennukseen ja saapui siihen huoneeseen, jossa tuli oli irti, istui kreivitär siellä nojatuolissa tuijottaen haaveillen valheeseen ja lausuen ihan selvällä äänellä: "Eivätkö liekit olekin ihania?"

No, kun Peter Hood kuuli hänen sanovan sellaista sellaisella hetkellä, niin hän tiesi, ettei hän ollut muiden kauniiden tyttöjen kaltainen. Sillä hänellä oli niiden lisäksi sielu. Ja hän seisoi siinä häikäistyneenä ja katseli kreivittäreen. Mutta pian olivat kaikki paperilakit hiiltyneet ja tuli sammunut. No, siitä hetkestä asti he kaikki käsittivät, että kreivitär oli nero. Hän oli siis tyttö, josta koko pyöreä pöytä haaveili siihen aikaan, kun Dorothy saapui Algonquiniin. Ja he kaikki yrittelivät sopia herra Ziegfieldin kanssa siitä, että hän ottaisi tytön puheilleen, mutta herra Ziegfield näkyi aina olevan poissa. Mikä ihme siis, että he nauroivat Dorothyn kaltaiselle tytölle?

Sitten seuraavana aamuna Dorothy soitti Charlie Breenen välittäjäystävälle, ilmoittaen, että hänellä oli suosituskirje hänelle. Ja haastellessaan Dorothyn kanssa puhelimitse tämä oli enemmän kuin iloinen, koska ei ole mitään, mistä pörssivälittäjä todella niin riemuitsee kuin saada hankituksi tytölle puheillepääsy herra Ziegfieldin luo. Ja hän sanoi, että hän tulisi heti noutamaan Dorothyn

Ritziin puoliselle. Mutta kun hän tapasi Dorothyn Algonquinin seurustelusalissa, katsoi hän häneen katsomistaan, ja alkoi todella menettää mielenkiintoaan. Sillä nyttemmin oli Dorothy keksinyt Bloomingdalesin liikkeen jalokivimukailuosaston, ja hänen ulkonäkönsä oli tavallista epätavallisempi. Niinpä hän lopuksi veikin hänet taiteelliseen teehuoneeseen, jossa hänen pukeutumistapaansa ei kiinnitettäisi huomiota.

Mutta Dorothy ei osaa säilyttää välittäjän harrastusta. Sillä Dorothy haluaa kai aina välittäjää naurattaa, mikä jo itsessään on kohtalokasta. Tarkoitan, että ainoa tilaisuus, jossa pörssivälittäjät todella haluavat nauraa, on teatterinäytöksien aikana tai milloin he arvopaperipörssissä kertoilevat toisilleen kaksimielisiä kaskuja. Sillä kun pörssivälittäjä tapaa tytön, haluaa hän aina olla vakavampi ja antaa hänelle hyviä neuvoja.

Ensi työkseen välittäjä siis selitti Dorothylle, että New York oli kovin kovin jumalaton paikka. Mutta sensijaan että Dorothy olisi kunnioittavasti kuunnellut, kysyi hän, voisiko herra pörssimies antaa hänelle muutamia hyviä osoitteita. Ja se saattoi keskustelun kokonaan pysähdyksiin. Mutta vihdoin välittäjä unohti hänen erehdyksensä ja kävi myötävätuntoisemmaksi. Ja sitten hän sanoi Dorothylle, että tämän tulisi olla kovin, kovin varuillaan, keitä herrasmiehiä hän tapaisi, ja sitä ennen aina ensin kysyä häneltä. Silloin Dorothy sanoi hänelle, että ainoa, joka oli häntä kiikutellut, oli

Algonquinin hissipoika, mutta että hän, jos välittäjällä oli jotakin tuota hissipoikaa vastaan, alkaisi käyttää portaitakin. Nyt mies alkoi tuntea olonsa perin tuskalliseksi tytön kanssa, joka ei mitään kunnioittanut. Mutta vihdoin hän keskittyi ystävyyteensä Charlie Breeneä kohtaan ja lupasi yrittää auttaa Dorothya.

Mutta sitten tulikin ilmi, että tämän pörssivälittäjän ainoa, todellinen tuttavuus herra Ziegfieldin kanssa oli se, että sekä hän että herra Ziegfield käyttivät samaa lakimiestä. Niin hän kutsui Dorothyn ja lakimiehen päivälliselle, ja he ajoivat Arrow Headiin. Ja tämä lakimies katsasti Dorothyn päivällisen ajalla ja sanoi hänelle sitten, että hän vastikään oli suositellut herra Ziegfieldille trokaria, jonka skotlantilainen whiskey osoittausi pelkäksi puuspriiksi, joten hänen suosituksistaan ei olisi kenellekään tytölle mitään hyötyä. Niin ollen asia raukesi.

No, vihdoin Dorothy saavutti sen ajankohdan, jolloin hänen rahansa loppuivat. Mutta Dorothyn köyhyys näkyy olevan siinä, ettei hän vaivaa päätänsä sillä, miten laskut suoritetaan, joten hän vain jatkoi entiseen tapaansa, kuluttaen enimmän aikansa Algonquinhotellin eteisessä ja tullen yhä tuttavallisemmaksi hissipojan kanssa. Ja jokainen, joka meni hissiin tai tuli hissistä, pysähtyi aina kysymään Dorothyltä: "No neiti Shaw, milloin te menette toimeenne herra Ziegfieldin luo?" kunnes Dorothy lopulta alkoi ihan tuskastua ja senvuoksi eräänä aamuna käveli herra Ziegfieldin toimistoon New Amsterdam Theatreen, teki itsensä tuttavaksi juoksupojan kanssa ja kysyi, voisiko hän hankkia pääsyn herra Ziegfieldin luo. No, juoksupoika käski Dorothyn odottaa, kunnes hän käväisi herra Ziegfieldin toimistossa. Ja vihdoin Dorothy huomasi oven raottuvan. Lopuksi rako hävisi, mutta juoksupoika tuli jälleen ulos ja sanoi

Dorothylle, että tällä oli lupa astua sisälle. Ja niin Dorothy sitten tuli tavanneeksi herra Ziegfieldin.

Se, mitä nyt tapahtui Dorothylle, näyttää melkein ihmeeltä. Sillä herra Ziegfield sai hänet esiintymään vallan hyvässä valossa, tarkasti hänet kiireestä kantapäähän, poltteli sikaariaan ja poltteli sikaariaan, ja kirjoitti vihdoin määräyksen herra Jean Buckille, että tämä antaisi tytölle toimen, ja käski Dorothyn saapua maanantaina harjoituksiin.

Mutta se ei sittenkään ollut niin suuri ihme, vaan pikemmin herra Ziegfieldin neron leimahdus. Sillä herra Ziegfield kykenee näkemään kaikki tytön huonot puolet ja poimimaan esille hyvät. Ja Dorothy sanoo, että melkein kaikkia koomillisten teatterien tyttöjä on oikeastaan jokainen New Yorkin pörssimies esittänyt ennenkuin herra Ziegfield on heidät "kirkastanut". Sillä kun tuollaiset pörssimiehet joutuvat toimimaan omin päin, tekevät he melkein aina virheen ja valitsevat jonkun rikkiviisaan, vallan hyvin puetun tytön ja ihmettelevät sitten, mikä häntä vaivaa. Sillä tuskin kellään välittäjällä näkyy olevan kyllin sielutieteellisyyttä käsittääkseen, että hänen unelmiensa tosi-ihanteena on joku pikkukaupungin kaunotar, jonka ympärille hän kuusitoistavuotiaana kutoi romaanin. Mutta herra Ziegfield tuntee koko sielutieteen, ja sitä lajia hän valitsee. Ja Dorothy sanoo, että melkein kaikki, mitä herra Ziegfield tekee heidät "kirkastaakseen", on panna heidät kampaamaan heinät pois tukastaan ja jättämään tärkkelyksen pois liinavaatteistaan.

Ja mitä heidän kävelypukuihinsa tulee, sanoo Dorothy, että herra Ziegfield mieluummin näkee tytön saavan mallinsa Kentuckyn Pariisista kuin Ranskan Pariisista. Sillä kukaan ei tiedä paremmin kuin herra Ziegfield, että pilkullinen sveitsiläinen kangas on paljoa

heleämpää ja halutumpaa kuin konsaan Kiinan kreppi. Ja seurauksena on, että joukko teatterityttöjä loma-aikoinaan ei muistuta mitään niin paljoa kuin pienen kaupungin sunnuntaikoulua retkeilyllä.

Ja tosiaan on ajan tuhlausta hankkia suosituskirjeitä herra Ziegfieldille esitettäviksi, koska hän saa niitä enemmän kuin kaksikymmentätuhatta joka vuosi, ja Dorothy sanoo, että yhteisvalokuva kaikista kahdestakymmenestätuhannesta päälletysten ei edes kävisi sekavaksi, sillä tositeossa ne kaikki kuuluvat sanasta sanaan näin:

"Hyvä herra Ziegfield, täten pyydän suositella neiti X. X:ää, johon minulla ei ole muuta harrastusta kuin että haluan auttaa nuorta eteenpäin pyrkivää tyttöstä, jotta hän voisi tukea omaisiaan." Mutta

Dorothy sanoo, että kun herra Ziegfield saa moisen kirjeen, merkitsee se tavallisesti, että nuori tyttönen saapuu loistoautolla ja että hänet jo on herra Bendelin tai herra Tappén avulla "kirkastettu" siihen määrin, että hän on menettänyt kaiken omaperäisyytensä. Ja Dorothy sanoo, että herra Ziegfieldin paraat tytöt kävelevät 42. kadulla omilla jaloillaan juuri niinkuin hänkin käveli.

Kun Dorothy sitten oli saanut toimensa, palasi hän Algonquinhotelliin, tavaten sen seurusteluhuoneessa herra Hoodin, joka oli sen venäläisen kreivittären keksinyt. Sitten hän tuli tapansa mukaan ja sanoi Dorothylle: "No, neiti Shaw, milloin alatte harjoituksenne herra Ziegfieldin luona?" Ja kun Dorothy vastasi: "Maanantaina", ei hän ollut uskoa korviaan. Ja sitten Dorothy näytti herra Ziegfieldin kirjelapun herra Buckille, joka siitä melkein kaatui kuolleena maahan. Ja kun uutinen levisi seurustelusalissa, niin kaikki melkein kaatuivat kuolleina maahan. Mutta kun venäläinen

kreivitär siitä kuuli, niin hän tosiaan melkein kaatui kuoliaaksi. Sillä hän oli kuluttanut melkein kahdeksan viikkoa herra Ziegfieldin toimistossa, tyrkytellen kymmentä suosituskirjettä, eikä ollut koskaan vielä päässyt edes juoksupojan sivuitse.

Mutta Dorothy kuuli myöhemmin, että milloin vain joku lähettää herra Ziegfieldille jonkun älyllisen tytön, luo hän siihen ensin varsin pitkän silmäyksen ovenraosta. Ja jos tyttö lisäksi sattuu olemaan vampyyri tyyppiä, niin he tuskin koskaan henkilökohtaisesti tapaavat toisiaan. Sillä kukaan ei tiedä paremmin kuin herra Ziegfield, ettei vampyyrityypikäs tyttö tosiaan koskaan miksikään kehity. Eikä koko hänen teatterissaan ole ikinä ollut vampyyrityyppiä koskaan.

Tarkoitan, ettei edes kuuluisa Dolores, joka oli perin silmäänpistävä näyte kauniista pitkästä brynetistä, ollut mikään vampyyrityyppi, vaan todellakin "madonna".

Ja kävi niin, että se venäläinen kreivitär ei kaikella temppuramentillaan ja kaikilla aivoillaan koskaan päässyt yhtään mihinkään. Sillä herra Ziegfield tietää, että vaikka sentyyppinen tyttö saattaakin kiinnostaa kirjallisia herrasmiehiä, niin pörssikeinottelijain laita on ihan päinvastoin. Tarkoitan, ettei kukaan välittäjä tosiaan koskaan tunne oloaan kotoiseksi tytön kanssa, joka haluaa haastella niin vaarallisesta asiasta kuin lemmestä. Ja tytöt, jotka haastelevat "lemmestä", ovat yleensä etupäässä siitä kuuluisia, että herrasmiehet yrittävät heitä välttää.

Ja kaikki asioiden käänteet vain osoittivat, että herra Ziegfield on aina oikeassa. Sillä sittenkin on Dorothystä tullut yksi kuuluisimpia tyttöjä kaikista vioistaan huolimatta, kun taas venäläinen kreivitär lopultakin esiintyy vain yhtenä niistä ylimääräisistä tytöistä, joita

teatterin johto tarvitsee jossakin unkarilaista rahvaan elämää kuvittelevassa talonpoikaisnäytelmässä.

No, kun Charlie Breenen välittäjäystävä kuuli, että Dorothy harjoitteli osaa koomillisessa teatterissa, niin hän melkein ällistyi typerryksiin. Mutta siitä toivuttuaan hän alkoi tajuta, että Dorothy sittenkin oli aika veikeä. Ja Dorothy tosiaan alkoi tulla veikeämmäksikin, sillä ennen pitkää Dorothy käsitti, että jotakin oli vinossa jossakin. Siksipä hän antoi kaikki jalokivimukailunsa ja punaisen satiinipukunsa kamarineidolle ja osti itselleen täysivärisen vaaleanpunaisen puuvillapuvun Kuudennelta Avenuelta ja alkoi lopulta näyttää ihan samanlaiselta kuin muutkin sen teatterin tytöt. Ja sitten Charlie Breenen välittäjäystävä ryhtyi lähettelemään sähkösanomia Charlielle Kaliforniaan, kerskuen toimittaneensa Dorothyn teatteriin. Mutta se näkyi oikein kiukustuttaneen niiden saajaa, koska Charlie sähkötti hänelle vallan sarkastikkaasti tähän tapaan:

"Sinä närkästytät minua. Anna kunnia sille, kelle kunnia kuuluu. Kuka hänet keksi?" Charlie Breene" No sitten Charlie alkoi lähetellä

Dorothylle sähkösanomia joka päivä, onnitellen itseään siitä, että oli hänet keksinyt. Ja hänen kuului täytyvän viipyä Kaliforniassa polopelin vuoksi, ja lopuksi hän voitti kansainvälisessä polo-kilpailussa, mutta hän sähkötti Dorothylle, että hänen elämänsä ylpein päivä olisi, kun hän New Yorkiin päästyään pitäisi kutsut sen kunniaksi, että oli löytänyt tytön, joka kelpasi koomilliseen teatteriin.

Ja sillä välin kun Charlie jännitti jokaisen hermonsa rientääkseen New Yorkiin, harjoitteli Dorothy osiaan teatterissa. Ja ensimmäinen, mihin hän ryhtyi, oli valita itselleen tyttötoveri. Mutta sensijaan että olisi solminnut tuttavuuksia kuuluisien tyttöjen kanssa, jotka liikkuivat

seurapiireissä, kuten esimerkiksi Peggy Hopkins, alkoi Dorothy tietenkin katsella pitemmälle.

No, siinä teatterissa on tositeossa melkein aina kahdeksantoista tanssijatarta, jotka ovat englantilainen paletti; se ei ole merkillinen mistään muusta kuin kovasta työstä. Eivätkä he koskaan käy ulkona seurapiireissä, koska heidän täytyy harjoitella kaiken aikaa aivan kuin sotamiesten. Ja tuloksena on, että he näyttämöllä ja sen ulkopuolella ovat ihan kuin yksi ainoa tyttö. Kun Dorothy siis etsiskeli tyttötoveria, niin se oli, mitä hän löysi.

Tarkoitan, ettei Dorothy valinnut ainoastaan yhtä tanssityttöä. Ja minusta tosiaan tuntuu kovin epähienolta kävellä New Yorkin kaduilla kokonainen englantilainen paletti hännässä, kun hän aivan yhtä hyvin olisi voinut ajaa loistoautossa jonkun tytön kanssa, jolla on tulevaisuus. Mutta Dorothy sanoo, että yksi palettitanssijatar ei koskaan mene ulos kaipaamatta niitä muita seitsemäätoista. Ja ainoa syy valintaansa, minkä Dorothy saattoi tietää, oli se, ettei hän ikinä ollut kuullut englantilaisten tyttöjen niin hyvin puhuvan. Niinpä hän kuunteli tätä englantilaista palettia tuntikausia perätysten eikä koskaan lakannut ihmettelemästä.

No, eräänä aamuna Charlie Breene lopuksikin saapui New Yorkiin. Sitten hän vei Dorothyn puoliselle, ja sitten hänen täytyi rientää heidän maakartanolleen isänsä luo, joka oli kovin, kovin huonona keuhkotulehduksessa. Mutta hän pyysi Dorothylta anteeksi ja lupasi palata kello kymmeneltä illalla saattaakseen hänet kutsuihin, jotka oli hänen kunniakseen järjestetty

Mutta harjoitusten päätyttyä ei Dorothy mennyt huoneeseensa levähtääkseen ennen kutsuja, vaan otti autopussin kahdeksantoista tyttö toverinsa kanssa ja lähti Coney Islandiin. Ja siellä hänellä oli

niin hauskaa käydessään kaikissa sirkushuveissa, että hän unohti katsoa kelloa. Ja hän palasi vasta kahdentoista jälkeen hotelliin, jonka seurustelutuvassa Charlie Breene oli odotellut kaksi tuntia ja hermostunut siihen määrin, että oli vähällä kirkua. Ja lopuksi hän saattoi Dorothyn hienoon illatsuun, joka oli täynnä kaupanvälittäjiä ja veikeitä tyttöjä iltapuvuissa, ja hänellä itsellään oli isot reiät sukissaan, kun oli liukunut alas "paholaisen luisua" pitkin ja nyrjähdyttänyt lanteensakin melkein ihan sijoiltaan.

Yhdeksäs luku

No, Dorothy aloitti toimintansa koomillisessa teatterissa, ja Charlie Breene rakastui tavallista hurjemmin. Niinpä hän eräänä iltana otti Dorothyn pitkälle ajelulle Keskuspuiston ympäri suljetussa autossa ja kysyi, mitä hän nyt halusi tehdä. Mutta Dorothy ei kuulu halunneen tehdä mitään muuta kuin päästä ulos autosta, koska Dorothy kuuluu temppuramentiltaan siihen viileään tyyppiin, jonka mielestä kaksikin henkilöä usein on ihmisjoukko. Mutta Dorothy ei tahtonut loukata Charlien tunteita, minkä vuoksi hän turvautui pieneen hätävaleeseen. Tarkoitan, että hän sanoi olevansa vallan kiihkeä katolinen eikä voinut tehdä mitään, mikä olisi voinut saada katolisen papin kohottamaan kulmiaan rippituolissa.

Ja kun Charlie sai tietää, ettei Dorothy ollut ainoastaan puhdas, vaan uskonnollinenkin, niin hänen rakkautensa muuttui kunnioittavaksi ja hänen ajatuksensa alkoivat miettiä avioliittoa. Hän meni siis äitinsä luo ja haasteli varsin pitkälti avioliittokysymyksestä

ja siitä ihmeellisestä tytöstä, joka oli sattunut hänen elämänsä polulle.

Ja Charlie Breenen äiti kuului aina hartaasti toivoneen, että hän menisi naimisiin, vakaantuisi ja juopottelisi omassa kodissaan eikä yökerhoissa, missä jokainen näki hänen häpäisevän perheen vanhaa nimeä. Mutta rouva Breenen ja Charlien valinta ei koskaan näkynyt osuvan samaan tyttöön. Sillä rouva Breene antoi etusijan tytölle nimeltä Muriel Devanant, jonka esivanhemmat olivat liikkuneet samoissa seurapiireissä kuin heidänkin. Ja Murielista olisi tullut ihanteellinen vaimo, koska hän ei välittänyt nuorukaisista, vaan vietti kaiken aikansa tyttötoveriensa seurassa. Mutta minä luulen sittenkin, että Murielilla tosiaan oli hiukan tunteita nuorukaisia kohtaan lopultakin, koska hänen valitsemansa tyttötoverit aina muistuttivat poikia mahdollisimman paljon. Hän oli kuitenkin halukas jännittämään hermojaan ja menemään naimisiin Charlien kanssa tämän rahojen vuoksi.

Mutta pääsyy, miksi rouva Breene halusi Murielia miniäkseen, oli se, että tämä seurapiireissä aina osasi menetellä oikein oikealla ajalla. Mutta Charlie selitti äidilleen, että oikea menettely oikealla ajalla seurapiireissä oli nautintorikasta vain siinä tapauksessa, että siitä nautti. Mutta jollei nauttinut, oli se vain tyhjää pettävää varjoa, minkä vuoksi hän mieluummin nai Dorothyn kaltaisen tytön. Ja vihdoin rouva Breene tuli kovin makoiseksi ja sanoi Charlielle, että hänen hartain toivonsa olikin, että tämä naisi sydämensä valitun. Hän käski siis pojan ensin tuoda Dorothyn kotiin antaakseen koko perheelle tilaisuuden häneen tutustua.

Sillä vaikka rouva Breene onkin perin aristoraattinen, kuuluu hän mielipiteiltään olevan varsin vapaamielinen niin varakkaaksi

rouvaksi. Ja hän haluaa aina kutsua jonkun kotiinsa, mikäli tämä jotakin hommailee, ja saatuaan hänet sinne koettaa aina saada vieraansa tuntemaan itsensä melkein yhtä tärkeäksi kuin hienoston ihmiset, joiden ei tarvitse tehdä mitään ollakseen huomattavia.

Ja milloin vain Charlie rakastui silmittömästi johonkuhun teatterin uuteen tyttöön, halusi rouva Breene aina, että hän toisi neitosen kotiin. Ja kun hän sai hänet sinne, oli hän hyvin, hyvin herttainen ja johti hänet keskusteluun kirjallisuudesta ja musiikista ja taiteesta, joten Charlie näkisi, kuinka hyvin hän sopisi sellaiseen sivistyneeseen ympäristöön. Mutta joka kerta, kun rouva Breene sen teki, näkyy aina jotakin kohtalollista tapahtuneen. Sillä kun äiti oli suoriutunut teatteritytöstä, päätti Charlie aina ajatella toiseen kertaan ennenkuin kutoisi romaanin moisen tytön ympärille.

No niin, rouva Breene halusi niin hartaasti tavata Dorothya, että hän pyysi Charlieta tuomaan hänet heidän kotiinsa perhepäivällisille. Ja kun perhe olisi ehtinyt vieraaseen oikein tutustua, kutsuisivat he kaikki seuratuttavansa päivällisen jälkeen tapaamaan häntä seurapiirillisesti. Ja tehdäkseen yhdessäolon hilpeämmäksi hän oli tilannut jousikvartetin esittämään jotakin perhemusiikkia. Sillä rouva Breene sanoi, että koska Dorothy oli soitannollisessa teatterissa, rakastaisi hän epäilemättä jousikvartettia. Mutta eihän rouva Breene tiennyt, että jousikvartetissa on tuskin mitään, mikä tehoo Dorothyn kaltaiseen tyttöön. Mutta Charlie on sellainen herttainen poika, että hän piti äitinsä tuumaa ihan ihastuttavana.

No, saapuessaan Breenen vanhaan perhetaloon Kuudennen Avenuen varrelle pitäisi tytön tuntea, että hän on menossa johonkin. Sillä siellä on vieras opastettava kolmesta eri ovesta, ja ensimmäiset kaksi ovat raudasta. Mutta kun Charlie saattoi Dorothyn niiden

lävitse, niin ei Dorothy osannut muuta ajatella kuin että Breenen perhe oli varannut itselleen kolme eri tilaisuutta heittääkseen hänet ulos, ja hän alkoi menettää itsevarmuuttaan.

Mutta kun he olivat jättäneet taakseen kolmannen oven, ryhtyi hovimestari saattamaan heitä pitkän, onton käytävän kautta, jota elävöittämässä ei ollut muuta kuin joitakuita fajanssisia norsunpentuja luonnollisessa koossa, mikä sai Dorothyn tuntemaan itsensä vieläkin vähäpätöisemmäksi. Mutta lopuksi he saapuivat vanhaan perhekirjastoon ja siellä istui sähkölampun alla Charlie Breenen isä. Mutta Dorothy sanoo, että kaiken tuon jännityksen jälkeen Charlien isä ei ollut mikään erikoinen huippukohta. Tarkoitan, että hän on sen lajin herrasmies, joka ei elämässään koskaan ole tehnyt mitään tähän tai tuohon suuntaan. Ja Breenen perhe osoitti häntä aina esikuvana Charlielle siitä, mitä hän voisi jättää tekemättä, jos hän vain keskittäisi siihen ajatuksensa.

No, Dorothy katsasti herra Breeneä ja alkoi tuntea olonsa hiukan paremmaksi. Ja herra Breene sanoi Dorothylle olevansa mielissään, kun hänet tapasi, sillä joku oli kerran viisi vuotta sitten vienyt hänet huvinäytelmään, eikä hän tosiaan voinut muistaa milloinkaan nauttineensa niin nautintorikasta iltaa. Silloin Dorothy avasi suunsa ja sanoi: "Jos herra Breenestä siltä tuntuu, niin miksette tämän pitkän väliajan jälkeen yritä mennä sinne uudestaan?" Ja herra Breene sanoi, että se oli tosiaan mainio tuuma, ja ihmetteli, ettei hän koskaan ennen ollut tullut sitä ajatelleeksi.

Ja hänen ihmetellessään astui rouva Breene huoneeseen. Ja rouva Breene oli Dorothya kohtaan tosiaan enemmän kuin herttainen, sillä hän haasteli ihan kuin Dorothy olisi ollut hänen vertaisensa. Ja ensiksi hän tiedusti Dorothyn mielipidettä

joidenkuiden antiikkisten klassillisten kirjojen alkupainoksista, joita heillä oli kirjastossaan. Ja kun rouva Breene kysyy jonkun mielipidettä, on hän aina kyllin kohtelias odottaakseen vastausta. Mutta Dorothylla ei ollut vastausta kielellä, ja ilmakehä alkoi vallan jännittyä. Tarkoitan, että Dorothy ei tunne tarpeeksi ihmistapoja tietääkseen, että aina kun tyttö hoksaa, ettei hänellä taida olla mitään sanottavaa, niin on parasta pyytää lasillinen vettä. Ja vesilasillisen pyytäminen paikassa, jossa sen hankkiminen on vallan hankalaa, olisi saanut Dorothyn tuntemaan itsensä vallan tärkeäksi.

No, kun rouva Breene huomasi, että Dorothy oli niin nolostunut kuin kirjastossa voi nolostua, kutsui hän hänet taidekokoelmaan näyttääkseen hänelle taulun, jonka vastikään oli ostanut kuuluisalta espanjalaiselta taiteilijalta nimeltä Zuluago. Ja rouva Breene pyysi Dorothya silmäilemään sitä tarkasti ja sitten sanomaan hänelle, mitä hän ajatteli sen "kierrekuurosta". No, Dorothy ei siitä asiasta oikeastaan ymmärtänyt hölynpölyä, mutta sai äkkiä loistavan päähänpiston ja kysyi Charlielta, mitä hän siitä ajatteli. Ja Charlie avasi suunsa ja sanoi: "Minä en jukoliste tiedä, mitä se on." No, tietenkin se sai rouva Breenen näyttämään varsin vähäpätöiseltä, että joku, joka oli hänen poikansa, oli niin sivistymätön. Hänellä ei siis tosiaan ollut muuta neuvoa kuin purra huultaan. Mutta Dorothya kohtaan hän kävi entistä maireammaksi ja sanoi järjestäneensä hänelle pienen yllätyksenkin. Ja se yllätys oli sellainen, että hän oli kutsunut Jefferson Breenen, Charlien kuuluisan sedän, joka ei ole ainoastaan koko Breenen suvun pää, vaan aikansa huomatuimpia amerikkalaisia, tulemaan päivälliselle Dorothya katsastamaan.

No, sillä välin kun he odottivat Jefferson Breenen saapumista Dorothya katsastamaan, astui sisälle kuuluisa tiputantti Muriel Devenant ja katsasti. Ja Muriel näytti heti alusta ihastuvan

Dorothyyn, sillä hän tervehti tätä aivan sydämelliseen sävyyn ja puristi Dorothyn kättä niin lujin ottein, että Dorothy sanoo sen muistuttaneen hänelle kotiin ikävöivää hirveä, joka tapaa jonkun looshiveljensä vieraan maan ilmanalassa. Mutta Dorothyn menettely oli mitä syvintä epäkulduuria. Sillä hän väisti Murielia itsepuolustusasennossa ja alkoi silmillään etsiä uloskäytävää. Ja vihdoin Charliekin huomasi hänen hämminkinsä, vei hänet syrjään ja kysyi, vaivasiko häntä mikään. Ja Dorothy sanoi: "Ei se mitään sellaista ole, mitä ei pommi voisi selvittää." Mutta Charlie ei tajunnut, mihin hän tähtäili. Ja hän alkoi katsoa Dorothya kieroon.

No, lopuksi tulikin päivällisaika, ja rouva Breene sanoi, etteivät he odottaisi herra Jefferson Breeneä, sillä kun herrasmiehellä on kansakunnan asiat taskussaan, saattaa hän hyvinkin myöhästyä millä hetkellä tahansa. Sitten rouva Breene saattoi heidät viiden, kuuden isokokoisen salin läpi, joissa oli varsin liukkaat lattiat ja pieniä armenialaisia mattoja, ja Dorothy sanoo, että ainoa ero hänen ja jään yli kulkevan Elizan välillä oli, että rouva Breene oli unohtanut tilata verikoiria.

No, Dorothy sanoi, että he vihdoin saapuivat vanhaan tammiseen ruokasaliin, jossa Dorothy sanoi hänen kunniakseen katetun pöydän ihan muistuttaneen hautajaisia. Ja juuri kun he istuutuivat aterioimaan, astui mahtava Jefferson Breene itse sisälle. Mutta kun hän tuli huoneeseen, havaitsi Dorothy, että hän oli tuon herran jo ennenkin tavannut erään Gloria-nimisen tytön huoneessa teatterissa, sillä erotuksella vain, että hän Glorian huoneessa käytti salanimeä Jones. Ja kun Jefferson Breene esitettiin Dorothylle, niin mies tosiaan suuresti hämmästyi. Mutta hän ei näkynyt haluavan mainita heidän aikaisemmasta tuttavuudestaan perheen keskuudessa, vaan luki sensijaan pöytärukouksen.

Ja sitten päivällistä syödessään Jefferson Breene jutteli Dorothylle ihan tuttavallisesti nykyaikaisen elämän varjopuolista ja johti keskustelun lopuksi siihenkin, että hän oli tavannut Dorothyn Glorian huoneessa. Ja sitten hän selitti Dorothylle mielenkiintonsa Gloriaan johtuvan siitä, että hän tahtoi auttaa tyttöä joutumasta pahoille teille. Sillä hän sanoi uskovansa sellaiseen teoriaan, että jos herrasmiehet toimittaisivat tytöille kalliita asuntoja, autoja ja jalokiviä palkkioksi siitä, että nämä karttoivat vääriä tekoja, eivätkä päinvastaisessa tarkoituksessa, niin maailma olisi todellakin parempi kuin nyt. Hän kertoi siis Dorothylle, että juuri niin hän menetteli Gloriaa kohtaan. Mutta Dorothy tukki suunsa, koska hän sanoo, että sitä ainoata vastausta, jonka hän sille vanhalle käelle olisi keksinyt, ei olisi sopinut lausua julki hienostuneessa kodissa.

Ja sitten rouva Breene alkoi kysellä Dorothylta teatterityttöjen elämäntapoja. Sillä rouva Breene näkyi olleen niin vapaamielinen, ettei hän häikäillyt kuulla elämästä kuinka paljon tahansa. Mutta

Dorothy sanoo rouva Breenen olettaneen, että koomillisen teatterin tytöt olivat kuin punamuurahaisia, eikä Dorothy tiennyt kylliksi punamuurahaisista vastatakseen hänen kysymyksiinsä. Sitten

Dorothy yritti vihjaista Charlielle, että tämä keksisi nopean verukkeen lähteä ulos heti kun päivällinen oli syöty. Mutta Charlie ei ymmärtänyt hänen merkkiään, koska hän näkyi luulevan, että he olivat järjestäneet Dorothylle hauskan illan.

Sitten päivällinen oli tuskin päättynyt, kun jousikvartetti saapui. Ja sitten alkoi seuraelämän ihmisiä tipahdella sisälle soitto-ohjelmaa kuuntelemaan. Ja rouva Breene oli niin herttainen Dorothya kohtaan, että valitsi suuritittelisimmät aristoraatit esitelläkseen heille Dorothyn, vaikkei Dorothy tiennyt, miksi heitä oli puhuteltava. Mutta sensijaan että olisi ottanut tilaisuudesta vaarin ja hankkinut itselleen ystäviä

Dorothy salli vain jokaisen nähdä hänen kurjuutensa. Ja se ilme, joka tulee Dorothyn kasvoille, kun hän on kärsimäisillään enemmän kuin mitä hän voi kestää, melkein saa ihmiset luulemaan häntä kierosilmäksi. Niinpä seurapiirien ihmiset alkoivatkin jättää Dorothyn ankarasti yksikseen. Ja rouva Breene askarrutti Charlieta käskemällä hänen asettaa pieniä kullattuja tuoleja yltympäri salin, joten hän ei ehtinyt Dorothyn pakeille ja pitämään hänelle seuraa. Ja joka kerta, kun hän vilkaisi salin poikki Dorothyyn, istui tämä ypöyksin ja näytti ihan epäpopulaarilta, perin sopimaton ilme kasvoillaan. Ja minä tosiaan pelkäänkin, että Charlie alkoi ihmetellä.

Lopuksi sitten rouva Breene astui lattian poikki Dorothyn luo ja sanoi hänelle, että hänen tulisi hymyillä, riemuita ja yhtyä keskusteluun. Mutta Dorothy ei osaa ponnistella ja hymyillä susiteessä niinkuin meidän muiden on tehtävä. Ja lopuksi jousikvartetti alkoi soittaa jotakin, mitä ohjelmassa sanottiin Bachin fuukaksi, ja Dorothysta alkoi tuntua vielä pahemmalta.

Mutta nyt alkoivat rouva Breenen omat vastukset. Sillä rouva Breene ei voinut millään pelillä saada niitä musiikin harrastajia pysymään hiljaa. Heti kun hän oli saanut yhden kuuntelijaryhmän hillitsemään kielensä, alkoi toinen ryhmä toisaalla salissa supatella keskenään. Ja rouva Breenen täytyi tungeskella kaikkien kullattujen tuolien välitse ja kuiskata heille: "hst, hst!"

Mutta sitten alkoivat musiikinharrastajat salissa jälleen meluta. Ja rouva Breene yritti hillitä heitä etäämpää. Mutta se oli tosiaan kuin veden kaatamista hanhen selkään. Hänen täytyi siis tungeksia takaisin kaikkien kullattujen tuolien välitse hillitäkseen heitä jälleen siellä salin puolella. Ja hänen täytyi ponnistella kuin troijalaisen, silti

mihinkään tositulokseen pääsemättä. Ja jousikvartetti alkoi mulkoilla yhä synkemmin.

Ja lopulta tilanne kävi vielä pahemmaksi. Sillä joku huomasi, että hovimestari järjesteli samppanjalaseja kirjastossa. Ja sitten alkoi todellinen kansanvaellus sinne päin, kunnes salissa ei ollut jäljellä kuin neljä henkilöä, nimittäin jousikvartetti. Ja rouva Breene melkein kiivastui. Ja hän ryntäsi kirjastoon, mutta hänen sinne päästyään se oli sullottu ovea myöten täyteen musiikinharrastajia. No, vihdoin hänen onnistui tunkeutua joukon lävitse, ja hän sanoi heille, että samppanjapulloja ei avattaisi ennenkuin soitannollinen ohjelma oli suoritettu, joten heidän oikeastaan olisi parasta tyytyä kuuntelemaan jousikvartettia. Niin hän työnsikin heidät kaikki ulos ja lukitsi oven, ja he päättivät lopuksi mennä takaisin saliin ja olla hiljaa. Mutta rouva Breene ei tiennyt, että eräs vieraista tuli teljetyksi kirjastoon hovimestarin ja kaiken sen samppanjan kera. Ja se sinne teljetty vieras oli tietenkin Dorothy.

Ja hovimestari ja Dorothy kuuluivat heti alkaneen tulla tuttaviksi. Sillä hovimestari itse oli ihan bolsheviikkisessa mielentilassa, koska se olisi oikeastaan ollut hänen vapaailtansa. Ja hän kuului olleen saksalainen hovimestari, joka rakasti musiikkia ja senvuoksi oli ostanut itselleen oopperapiletin Lohengryyniin. Mutta tietenkin hänen täytyi jättää se sikseen. Eikä hän voinut edes kuunnella jousikvartettia, koska kirjaston ovi oli täytynyt sulkea vieraiden käyttäytymisen vuoksi. Siksipä hän näkyi ajattelevankin, että tässä maailmassa on musiikin kuunteleminen ainoastaan varakkaille suotu etuoikeus. Ja niin hän ja Dorothy ottivatkin ryypyn unohtaakseen huolensa.

No, samppanja on parasta laatua, minkä vuoksi he kaatoivat lisää, ja ennenkuin Dorothy muuta tiesikään, alkoi hän tulla hilpeämmäksi ja tunsi voivansa paremmin. Ja Dorothy sanoo, että sitten kun jousikvartetti oli suoriutunut ohjelmastaan, oli hän päässyt tilaan, jossa hän oli niin onnellinen kuin ikinä kala vedessä. Niinpä hän lähtikin kirjastosta ja palasi vierasjoukon välitse saliin, hymyillen oikealle ja vasemmalle ja tervehtien herttaisesti ihmisiä, joille ei häntä ollut esiteltykään.

No, kun Dorothy pääsi saliin, niin hän kuului ryhtyneen tanssimaan joitakin uusia askeleita, joita oli teatterissa oppinut. Tarkoitan, ettei kukaan ollut häntä ollenkaan pyytänyt, mutta ihmeellistä kyllä, sensijaan että jokainen olisi närkästynyt, olivat kaikki mielissään. Ja he alkoivat taputtaa käsiään. Ja sitten Dorothy päätti laulaa muutamia koomillisia laulunpätkiä, jotka joku tytöistä oli sepittänyt heidän oman pukuhuoneensa seinien sisälle ja jotka eivät olleet aiotut laulettaviksi edes teatterissa, saatikka salongissa. Mutta ne musiikinharrastajat eivät suinkaan suuttuneet, vaan ihastuivat yhä enemmän ja alkoivat tunkeutua takaisin saliin niin lukuisasti, että jousikvartetilta, joka ponnisteli päästäkseen sieltä ulos, melkein murskattiin shello.

Ja Dorothysta tuli koko seuran sielu. Charlie Breene seisoi ylpeänä vieressä ja katseli häntä lemmenliekki silmissään. Ja rouva Breenen täytyi lopuksi astua esille ja tarttua Dorothyn käsikynkkään pysähdyttääkseen hänet. Sillä hän sanoi vierailleen, etteivät he saaneet sallia sen rakkaan lapsen uuvuttaa itseään liiaksi.

Sitten Dorothy alkoi jättää hyvästi emännälleen, ja monetkin vieraista kerääntyivät yhä hänen ympärilleen kuuntelemaan, koska Dorothy oli saavuttanut vähän mainetta "seuran hauskuuttajana".

Siksipä rouva Breene oli Dorothylle tosiaankin enemmän kuin herttainen ja tarttui Dorothyn käteen ja näkyi haluavan pitää pienen keskustelunkin. Mutta Dorothy ei voinut ymmärtää, mitä hän sanoi, koska rouva Breene ei kuulemma voinut hillitä itseään puhumasta ranskaa. No, Dorothy oli kylläkin oppinut muutamia meksikolaisia sanoja ollessaan Etelä-Kaliforniassa, joten Dorothy antoi hänelle takaisin meksikonkielellä. Mutta Dorothyn ei olisi tosiaan tullut puhua meksikoa sellaiselle hienostuneelle seurapiirien johtohenkilölle kuin rouva Breene on, koska tuskin kukaan seurapiirien johtaja osaa meksikonkieltä, ja Dorothy oli niin syvästi tietämätön, ettei hän tiennyt, että meksikonkielellä haasteleminen on merkkinä perin huonosta sivistyksestä silloin, kun puhetoveri ei ymmärrä meksikonkielestä hajuakaan.

No, lopuksi Dorothy käski meksikonkielellä rouva Breeneä "menemään sinne, missä Turkinpippuri kasvaa", ja sitten hän tarttui Charlien käsivarteen ja kumarsi itsensä ulos. Ja kaikkein viimeiseksi hän näki, että rouva Breene seisoi Dorothya ihailevien vierattensa keskellä, narskutellen hampaitaan ja sanoen Charlielle, että hänen pitäisi tuoda pikkuystävänsä taloon joskus toistekin.

Ja kun he sitten pääsivät ulos, oli Charlie seitsemännessä taivaassa, koska se oli ensimmäinen kerta, kun hänen äitinsä oli siihen määrin hyväksynyt jonkun teatteritytön, että oli pyytänyt häntä tulemaan jälleen. Ja jokainen muukin oli niin ihastunut Dorothyyn, että Charlie oli kovin, kovin ylpeä. Ja niin hän pyysi Dorothya morsiamekseen.

Mutta Dorothy oli tapansa mukaan epäluuloinen. Sillä hän oli saanut päähänsä sen ajatuksen, että rouva Breenen innostus oli teennäistä ja voisi raueta, kun seisottaisiin alttarin edessä.

Senvuoksi hän pyysi Charlielta ajatusaikaa miettiäkseen ehdotusta.

Mutta Dorothy sanoo, että häntä oikeastaan viehätti sellainen ajatus, että hän voisi vastata rouva Breenen vieraanvaraisuuteen kutsumalla hänet heidän hääaamiaiselleen. Minusta siis Dorothynkin kaltainen tyttö voi joskus saada hauskan päähänpiston.

Kymmenes luku

No, Dorothy alkoi miettiä asiaa joka puolelta. Mutta Charlie ei tosiaan ollut sellainen herrasmies, joka tehoo hänenlaiseensa tyttöön. Sillä Charlie kulutti kaiken aikansa kertomalla hänelle, että hän oli ihmeellinen ja ettei hän itse ollut yhtään mitään. Ja Dorothy taas pitää herrasmiehistä, jotka luulevat, ettei mikään muu ole ihanteellista kuin he itse, ja antavat hänenkin sen tietää. Ja jos ne lisäksi odottavat häneltä lahjoja, niin hänen ihailunsa on täydellinen.

Mutta Charlie kulki väärää polkua hänen sydämeensä ja lähetteli hänelle ryöppynä kämmekkäitä ja suloisia lemmenlehtisiä, kirjoittaen aina jotakin runollista niinkuin: "Oi, sinä ihmeellinen tyttö!" Ja sitten Dorothy päätteli, ettei Charlie ollutkaan kovin älykäs, sillä miksi hän muutoin olisi pitänyt hänen kaltaistaan tyttöä ihmeellisenä?

No, siihen aikaan herra Ziegfield sähkötti Portlandiin Oregoniin, tilaten sieltä soittokunnan nimeltä Hendersonin Jazzikuoro, joka oli kehittynyt kotiseutunsa maaperällä ja tullut kuuluisaksi. Tämä jazzikuoro siis vihdoin saapui New Yorkiin, ja herra Buck toimitti heidät teatteriin. Ja Hendersonin soittokunnassa oli saksofonin soittaja nimeltä Lester, joka sai ainoastaan kuusikymmentäviisi dollaria viikossa. Ja siitä johtui, että hän ryhtyi lainailemaan.

Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.