From 4ffd69dfe93b19d605e774e5c21df99501023665 Mon Sep 17 00:00:00 2001 From: "Carol (Nichols || Goulding)" Date: Mon, 19 Feb 2018 14:50:45 -0500 Subject: [PATCH] Snapshot of the introduction to send to nostarch --- second-edition/nostarch/introduction.md | 133 ++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 second-edition/nostarch/introduction.md diff --git a/second-edition/nostarch/introduction.md b/second-edition/nostarch/introduction.md new file mode 100644 index 000000000..5d90ab2d2 --- /dev/null +++ b/second-edition/nostarch/introduction.md @@ -0,0 +1,133 @@ + +[TOC] + +# Introduction + +Welcome to “The Rust Programming Language,” an introductory book about Rust. + +Rust is a programming language that helps you write faster, more reliable +software. High-level ergonomics and low-level control are often at odds with +each other in programming language design; Rust stands to challenge that. +Through balancing powerful technical capacity and a great developer experience, +Rust gives you the option to control low-level details (such as memory usage) +without all the hassle traditionally associated with such control. + +## Who Rust is For + +Rust is great for many people for a variety of reasons. Let’s discuss a few of +the most important groups. + +### Teams of Developers + +Rust is proving to be a productive tool for collaborating among large teams of +developers with varying levels of systems programming knowledge. Low-level code +is prone to a variety of subtle bugs, which in most other languages can only be +caught through extensive testing and careful code review by experienced +developers. In Rust, the compiler plays a gatekeeper role by refusing to +compile code with these kinds of bugs--including concurrency bugs. By working +alongside the compiler, the team can spend more time focusing on the logic of +the program rather than chasing down bugs. + +Rust also brings contemporary developer tools to the systems programming world: + +* Cargo, the included dependency manager and build tool, makes adding, + compiling, and managing dependencies painless and consistent across the Rust + ecosystem. +* Rustfmt ensures a consistent coding style across developers. +* The Rust Language Server powers IDE integration for code completion and + inline error messages. + +By using these and other tools in the Rust ecosystem, developers can be +productive while writing systems-level code. + +### Students + +Rust is for students and people who are interested in learning about systems +concepts. Many people have learned about topics like operating systems +development through Rust. The community is happy to answer student questions. +Through efforts such as this book, the Rust teams want to make systems concepts +more accessible to more people, especially those getting started with +programming. + +### Companies + +Rust is used in production by hundreds of companies, large and small, for a +variety of tasks, such as command line tools, web services, DevOps tooling, +embedded devices, audio and video analysis and transcoding, cryptocurrencies, +bioinformatics, search engines, internet of things applications, machine +learning, and even major parts of the Firefox web browser. + +### Open Source Developers + +Rust is for people who want to build the Rust programming language, community, +developer tools, and libraries. We’d love for you to contribute to the Rust +language. + +### People Who Value Speed and Stability + +By speed, we mean both the speed of the programs that Rust lets you create and +the speed at which Rust lets you write them. The Rust compiler’s checks ensure +stability through feature additions and refactoring, as opposed to brittle +legacy code in languages without these checks that developers are afraid to +modify. By striving for zero-cost abstractions, higher level features that +compile to lower level code as fast as code written manually, Rust endeavors to +make safe code be fast code as well. + +This isn’t a complete list of everyone the Rust language hopes to support, but +these are some of the biggest stakeholders. Overall, Rust’s greatest ambition +is to take trade-offs that have been accepted by programmers for decades and +eliminate the dichotomy. Safety *and* productivity. Speed *and* ergonomics. +Give Rust a try, and see if its choices work for you. + +## Who This Book is For + +This book assumes that you’ve written code in some other programming language, +but doesn’t make any assumptions about which one. We’ve tried to make the +material broadly accessible to those from a wide variety of programming +backgrounds. We don’t spend a lot of time talking about what programming *is* +or how to think about it; someone new to programming entirely would be better +served by reading a book specifically providing an introduction to programming. + +## How to Use This Book + +This book generally assumes that you’re reading it front-to-back, that is, +later chapters build on top of concepts in earlier chapters, and earlier +chapters may not dig into details on a topic, revisiting the topic in a later +chapter. + +There are two kinds of chapters in this book: concept chapters, and project +chapters. In concept chapters, you’ll learn about an aspect of Rust. In the +project chapters, we’ll build small programs together, applying what we’ve +learned so far. Chapters 2, 12, and 20 are project chapters; the rest are +concept chapters. + +Additionally, Chapter 2 is a hands-on introduction to Rust as a language. We’ll +cover concepts at a high level, and later chapters will go into them in detail. +If you’re the kind of person who likes to get their hands dirty right away, +Chapter 2 is great for that. If you’re *really* that kind of person, you may +even wish to skip over Chapter 3, which covers features that are very similar +to other programming languages, and go straight to Chapter 4 to learn about +Rust’s ownership system. By contrast, if you’re a particularly meticulous +learner who prefers to learn every detail before moving onto the next, you may +want to skip Chapter 2 and go straight to Chapter 3. + +In the end, there’s no wrong way to read a book: if you want to skip ahead, go +for it! You may have to jump back if you find things confusing. Do whatever +works for you. + +An important part of the process of learning Rust is learning how to read the +error messages that the compiler gives you. As such, we’ll be showing a lot of +code that doesn’t compile, and the error message the compiler will show you in +that situation. As such, if you pick a random example, it may not compile! +Please read the surrounding text to make sure that you didn’t happen to pick +one of the in-progress examples. + +Finally, there are some appendices. These contain useful information about the +language in a more reference-like format. + +## Contributing to the Book + +This book is open source. If you find an error, please don’t hesitate to file +an issue or send a pull request on GitHub at *https://github.com/rust-lang/book*. Please see CONTRIBUTING.md at *https://github.com/rust-lang/book/blob/master/CONTRIBUTING.md* for +more details. +