The Rust Programming Language

Total Page:16

File Type:pdf, Size:1020Kb

The Rust Programming Language The Rust Programming Language The Rust Programming Language Steve Klabnik and Carol Nichols, with Contributions from the Rust Community The Rust Programming Language, © Steve Klabnik and Carol Nichols, with Contributions from the Rust Community. Contents I Getting started 7 1 Introduction 9 1.1 Contributing to the book ................. 10 1.2 ................................ 10 1.3 ................................ 12 2 Guessing Game 21 2.1 Setting Up a New Project ................. 21 2.2 Processing a Guess ..................... 22 2.3 Generating a Secret Number ............... 27 2.4 Comparing the Guess to the Secret Number ....... 33 2.5 Allowing Multiple Guesses with Looping ......... 38 2.6 Summary .......................... 44 3 Common Programming Concepts 45 3.1 ................................ 46 3.2 ................................ 50 3.3 ................................ 58 3.4 ................................ 65 3.5 ................................ 66 4 Understanding Ownership 77 4.1 ................................ 77 4.2 ................................ 90 4.3 ................................ 97 5 Using Structs to Structure Related Data 105 5.1 ................................ 105 5.2 ................................ 111 5.3 ................................ 117 6 6 Enums and Pattern Matching 123 6.1 ................................ 123 6.2 ................................ 132 6.3 ................................ 138 II Basic Rust Literacy 143 1 Using Modules to Reuse and Organize Code 145 1.1 ................................ 146 1.2 ................................ 155 1.3 ................................ 162 2 Common Collections 169 2.1 ................................ 170 2.2 ................................ 175 2.3 ................................ 183 3 Error Handling 191 3.1 ................................ 192 3.2 ................................ 196 3.3 ................................ 206 4 Generic Types, Traits, and Lifetimes 213 4.1 Removing Duplication by Extracting a Function .... 214 4.2 ................................ 217 4.3 ................................ 227 4.4 ................................ 237 5 Testing 255 5.1 ................................ 256 5.2 ................................ 273 5.3 ................................ 280 6 An I/O Project Building a Small Grep 287 6.1 ................................ 288 6.2 ................................ 291 6.3 ................................ 294 6.4 ................................ 309 6.5 ................................ 317 6.6 ................................ 324 7 III Thinking in Rust 329 1 Functional Language features in Rust: Iterators and Closures 331 1.1 ................................ 332 1.2 ................................ 350 1.3 ................................ 360 1.4 ................................ 365 2 More about Cargo and Crates.io 369 2.1 ................................ 369 2.2 ................................ 371 2.3 ................................ 379 2.4 ................................ 383 2.5 ................................ 384 3 Smart Pointers 385 3.1 ................................ 386 3.2 ................................ 390 3.3 ................................ 395 3.4 ................................ 398 3.5 ................................ 402 3.6 ................................ 408 4 Fearless Concurrency 419 4.1 ................................ 420 4.2 ................................ 428 4.3 ................................ 436 4.4 ................................ 446 5 Is Rust an Object-Oriented Programming Language? 449 5.1 ................................ 449 5.2 ................................ 454 5.3 ................................ 464 IV Advanced Topics 481 1 Patterns Match the Structure of Values 483 1.1 ................................ 483 1.2 ................................ 489 1.3 ................................ 491 8 2 Advanced Features 507 2.1 ................................ 508 2.2 ................................ 518 2.3 ................................ 527 2.4 ................................ 540 2.5 ................................ 547 3 Final Project: Building a Multithreaded Web Server 551 3.1 ................................ 553 3.2 ................................ 565 3.3 ................................ 568 3.4 ................................ 574 3.5 ................................ 580 3.6 ................................ 592 Part I Getting started Chapter 1 Introduction Welcome to “The Rust Programming Language,” an introductory book about Rust. Rust is a programming language that’s focused on safety, speed, and concurrency. Its design lets you create programs that have the performance and control of a low-level language, but with the pow- erful abstractions of a high-level language. These properties make Rust suitable for programmers who have experience in languages like C and are looking for a safer alternative, as well as those from languages like Python who are looking for ways to write code that performs better without sacrificing expressiveness. Rust performs the majority of its safety checks and memory man- agement decisions at compile time, so that your program’s runtime performance isn’t impacted. This makes it useful in a number of use cases that other languages aren’t good at: programs with predictable space and time requirements, embedding in other languages, and writ- ing low-level code, like device drivers and operating systems. It’s also great for web applications: it powers the Rust package registry site, crates.io! We’re excited to see what you create with Rust. This book is written for a reader who already knows how to program in at least one programming language. After reading this book, you should be comfortable writing Rust programs. We’ll be learning Rust through small, focused examples that build on each other to demon- strate how to use various features of Rust as well as how they work behind the scenes. 12 1.1 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. Please see CON- TRIBUTING.md for more details. 1.2 Installation The first step to using Rust is to install it. You’ll need an internet con- nection to run the commands in this chapter, as we’ll be downloading Rust from the internet. We’ll be showing off a number of commands using a terminal, and those lines all start with $. You don’t need to type in the $ character; they are there to indicate the start of each command. You’ll see many tutorials and examples around the web that follow this convention: $ for commands run as a regular user, and # for commands you should be running as an administrator. Lines that don’t start with $ are typically showing the output of the previous command. Installing on Linux or Mac If you’re on Linux or a Mac, all you need to do is open a terminal and type this: $ curl https://sh.rustup.rs -sSf | sh This will download a script and start the installation. You may be prompted for your password. If it all goes well, you’ll see this appear: Rust is installed now. Great! Of course, if you disapprove of the curl | sh pattern, you can down- load, inspect and run the script however you like. Installing on Windows On Windows, go to https://rustup.rs and follow the instructions to download rustup-init.exe. Run that and follow the rest of the instruc- tions it gives you. The rest of the Windows-specific commands in the book will assume that you are using cmd as your shell. If you use a different shell, you 13 may be able to run the same commands that Linux and Mac users do. If neither work, consult the documentation for the shell you are using. Custom installations If you have reasons for preferring not to use rustup.rs, please see the Rust installation page for other options. Updating Once you have Rust installed, updating to the latest version is easy. From your shell, run the update script: $ rustup update Uninstalling Uninstalling Rust is as easy as installing it. From your shell, run the uninstall script: $ rustup self uninstall Troubleshooting If you’ve got Rust installed, you can open up a shell, and type this: $ rustc --version You should see the version number, commit hash, and commit date in a format similar to this for the latest stable version at the time you install: rustc x.y.z (abcabcabc yyyy-mm-dd) If you see this, Rust has been installed successfully! Congrats! If you don’t and you’re on Windows, check that Rust is in your %PATH% system variable. If it still isn’t working, there are a number of places where you can get help. The easiest is the #rust IRC channel on irc.mozilla.org, which you can access through Mibbit. Go to that address, and you’ll be chatting with other Rustaceans (a silly nickname we call ourselves) who can help you out. Other great resources include the Users forum and Stack Overflow. 14 Local documentation The installer also includes a copy of the documentation locally, so you can read it offline. Run rustup doc to open the local documentation in your browser. Any time there’s a type or function provided by the standard library and you’re not sure what it does, use the API documentation to find out! 1.3 Hello, World! Now that you have Rust installed, let’s write your first Rust program. It’s traditional when learning a new language to write a little program to print the text “Hello, world!” to the screen, and in this section, we’ll follow that tradition. Note: This book assumes basic familiarity with the com- mand line. Rust itself makes no specific
Recommended publications
  • On the Naming of Methods: a Survey of Professional Developers
    On the Naming of Methods: A Survey of Professional Developers Reem S. Alsuhaibani Christian D. Newman Michael J. Decker Michael L. Collard Jonathan I. Maletic Computer Science Software Engineering Computer Science Computer Science Computer Science Kent State University Rochester Institute of Bowling Green State The University of Akron Kent State University Prince Sultan University Technology University Ohio, USA Ohio, USA Riyadh, Saudi Arabia New York, USA Ohio, USA [email protected] [email protected] [email protected] [email protected] [email protected] Abstract—This paper describes the results of a large (+1100 Here, we focus specifically on the names given to methods responses) survey of professional software developers concerning in object-oriented software systems. However, much of this also standards for naming source code methods. The various applies to (free) functions in non-object-oriented systems (or standards for source code method names are derived from and parts). We focus on methods for several reasons. First, we are supported in the software engineering literature. The goal of the interested in method naming in the context of automatic method survey is to determine if there is a general consensus among summarization and documentation. Furthermore, different developers that the standards are accepted and used in practice. programming language constructs have their own naming Additionally, the paper examines factors such as years of guidelines. That is, local variables are named differently than experience and programming language knowledge in the context methods, which are named differently than classes [10,11]. Of of survey responses. The survey results show that participants these, prior work has found that function names have the largest very much agree about the importance of various standards and how they apply to names and that years of experience and the number of unique name variants when analyzed at the level of programming language has almost no effect on their responses.
    [Show full text]
  • Perl 6 Deep Dive
    Perl 6 Deep Dive Data manipulation, concurrency, functional programming, and more Andrew Shitov BIRMINGHAM - MUMBAI Perl 6 Deep Dive Copyright © 2017 Packt Publishing All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews. Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book. Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information. First published: September 2017 Production reference: 1060917 Published by Packt Publishing Ltd. Livery Place 35 Livery Street Birmingham B3 2PB, UK. ISBN 978-1-78728-204-9 www.packtpub.com Credits Author Copy Editor Andrew Shitov Safis Editing Reviewer Project Coordinator Alex Kapranoff Prajakta Naik Commissioning Editor Proofreader Merint Mathew Safis Editing Acquisition Editor Indexer Chaitanya Nair Francy Puthiry Content Development Editor Graphics Lawrence Veigas Abhinash Sahu Technical Editor Production Coordinator Mehul Singh Nilesh Mohite About the Author Andrew Shitov has been a Perl enthusiast since the end of the 1990s, and is the organizer of over 30 Perl conferences in eight countries.
    [Show full text]
  • Eff Directly in Ocaml
    Eff Directly in OCaml Oleg Kiselyov KC Sivaramakrishnan Tohoku University, Japan University of Cambridge, UK [email protected] [email protected] The language Eff is an OCaml-like language serving as a prototype implementation of the theory of algebraic effects, intended for experimentation with algebraic effects on a large scale. We present the embedding of Eff into OCaml, using the library of delimited continuations or the multicore OCaml branch. We demonstrate the correctness of the embedding denotationally, re- lying on the tagless-final–style interpreter-based denotational semantics, including the novel, direct denotational semantics of multi-prompt delimited control. The embedding is systematic, lightweight, performant and supports even higher-order, ‘dynamic’ effects with their polymorphism. OCaml thus may be regarded as another implementation of Eff, broadening the scope and appeal of that language. 1 Introduction Algebraic effects [33, 32] are becoming a more and more popular approach for expressing and com- posing computational effects. There are implementations of algebraic effects in Haskell [18, 22], Idris [4], OCaml [10, 18], Koka [27], Scala1, Javascript2, PureScript3, and other languages. The most direct embodiment of algebraic effect theory is the language Eff4 “built to test the mathematical ideas of alge- braic effects in practice”. It is an OCaml-like language with the native facilities (syntax, type system) to declare effects and their handlers [2]. It is currently implemented as an interpreter, with an optimizing compiler to OCaml in the works. Rather than compile Eff to OCaml, we embed it. After all, save for algebraic effects, Eff truly is a subset of OCaml and can be interpreted or compiled as a regular OCaml code.
    [Show full text]
  • An Overview of the Scala Programming Language
    An Overview of the Scala Programming Language Second Edition Martin Odersky, Philippe Altherr, Vincent Cremet, Iulian Dragos Gilles Dubochet, Burak Emir, Sean McDirmid, Stéphane Micheloud, Nikolay Mihaylov, Michel Schinz, Erik Stenman, Lex Spoon, Matthias Zenger École Polytechnique Fédérale de Lausanne (EPFL) 1015 Lausanne, Switzerland Technical Report LAMP-REPORT-2006-001 Abstract guage for component software needs to be scalable in the sense that the same concepts can describe small as well as Scala fuses object-oriented and functional programming in large parts. Therefore, we concentrate on mechanisms for a statically typed programming language. It is aimed at the abstraction, composition, and decomposition rather than construction of components and component systems. This adding a large set of primitives which might be useful for paper gives an overview of the Scala language for readers components at some level of scale, but not at other lev- who are familar with programming methods and program- els. Second, we postulate that scalable support for compo- ming language design. nents can be provided by a programming language which unies and generalizes object-oriented and functional pro- gramming. For statically typed languages, of which Scala 1 Introduction is an instance, these two paradigms were up to now largely separate. True component systems have been an elusive goal of the To validate our hypotheses, Scala needs to be applied software industry. Ideally, software should be assembled in the design of components and component systems. Only from libraries of pre-written components, just as hardware is serious application by a user community can tell whether the assembled from pre-fabricated chips.
    [Show full text]
  • Declare Variable on Python
    Declare Variable On Python Is Herby devout when Ambrose presaged familiarly? Rob castigate stertorously. Jake interchanging unwieldily? The final equals sign should point to the value you want to assign to your variables. There are some guidelines you need to know before you name a variable. Java, python variables and different data types with several examples are explained. There is a question that always hovers among Python programmers. Strings are declared within a single or double quote. Break a string based on some rule. It is very important that the number of variables on that line equals the number of values; otherwise, and can be subdivided into two basic categories, instead of using dummy names. Python interpreter allocates the memory to the variable. Python assigns values from right to left. However, Sam, then check your prediction. This article has been made free for everyone, I understand it will sometimes show up in the debugger. The data stored in memory can be of many types. Reassigning variables can be useful in some cases, by Tim Peters Beautiful is better than ugly. The variables that are prefixed with __ are known as the special variables. Swapping values between two variables is a common programming operation. We will go through python variables and python data types in more detail further in this blog. Lists in Python are very similar to arrays in many other languages, say you are receiving user input in your code. What if we try to call the local variable outside of the function? This appends a single value to the end of a list.
    [Show full text]
  • C++ API for BLAS and LAPACK
    2 C++ API for BLAS and LAPACK Mark Gates ICL1 Piotr Luszczek ICL Ahmad Abdelfattah ICL Jakub Kurzak ICL Jack Dongarra ICL Konstantin Arturov Intel2 Cris Cecka NVIDIA3 Chip Freitag AMD4 1Innovative Computing Laboratory 2Intel Corporation 3NVIDIA Corporation 4Advanced Micro Devices, Inc. February 21, 2018 This research was supported by the Exascale Computing Project (17-SC-20-SC), a collaborative effort of two U.S. Department of Energy organizations (Office of Science and the National Nuclear Security Administration) responsible for the planning and preparation of a capable exascale ecosystem, including software, applications, hardware, advanced system engineering and early testbed platforms, in support of the nation's exascale computing imperative. Revision Notes 06-2017 first publication 02-2018 • copy editing, • new cover. 03-2018 • adding a section about GPU support, • adding Ahmad Abdelfattah as an author. @techreport{gates2017cpp, author={Gates, Mark and Luszczek, Piotr and Abdelfattah, Ahmad and Kurzak, Jakub and Dongarra, Jack and Arturov, Konstantin and Cecka, Cris and Freitag, Chip}, title={{SLATE} Working Note 2: C++ {API} for {BLAS} and {LAPACK}}, institution={Innovative Computing Laboratory, University of Tennessee}, year={2017}, month={June}, number={ICL-UT-17-03}, note={revision 03-2018} } i Contents 1 Introduction and Motivation1 2 Standards and Trends2 2.1 Programming Language Fortran............................ 2 2.1.1 FORTRAN 77.................................. 2 2.1.2 BLAST XBLAS................................. 4 2.1.3 Fortran 90.................................... 4 2.2 Programming Language C................................ 5 2.2.1 Netlib CBLAS.................................. 5 2.2.2 Intel MKL CBLAS................................ 6 2.2.3 Netlib lapack cwrapper............................. 6 2.2.4 LAPACKE.................................... 7 2.2.5 Next-Generation BLAS: \BLAS G2".....................
    [Show full text]
  • Json Schema Type Number Or Null
    Json Schema Type Number Or Null decreeInflectionless ablaze. and Intermittently parsonical cavalierly,Penn frescos: Vassili which reinter Benjamen highlighting is strapless and unfeudalizes enough? Happiest sarcoplasm. Thaddius boobs his Tucana May also takes precedence over each json null values passed to be submitted as described by calling either as geo. Rfc will crash if not of type number. The json type? Schemas and Types GraphQL. Means any worse at jail so little is support one quality from my chosen set followed by any character not number of times. JSON Data Types REST API Tutorial. Example 47 a string-valued annotation a Boolean-valued annotation a slender float-valued annotation. Computing whether it has a number type of the schema to be appreciated, by related resources. 3 Answers You want also specimen type number null as Adam suggests but always think anyOf is cleaner as long as he use demand draft-04 implementation and ties the minimum and maximum declaration to purchase number explicitly Disclaimer I don't know instead about the python implementation my flip is about json schema. Where crazy is now string specifying any valid JSON Schema type boolean integer number of array decay and null Unless creating an empty schema. Currently the null type number or edit my web url to work for? Given named types can also several different way to help, type schema number or json null values: just describes the schema validator criteria are some examples. Numeric multipleOf exclusiveMaximum exclusiveMinimum. Relatively systematic ways json object; the number or null type number or unknown properties.
    [Show full text]
  • Scripting Layer for Android: Updated and Expanded Support
    POLITECNICO DI MILANO School of Industrial and Information Engineering Master of Science in Computer Science and Engineering SCRIPTING LAYER FOR ANDROID: UPDATED AND EXPANDED SUPPORT Master graduation thesis: Miguel Angel Palacio Delgado – Student ID: 816355 Supervisor: Dr. Giovanni Agosta Academic Year 2015-2016 iii Acknowledgements I would like to thank my family for all their support throughout my master's studies, without it I would not have been able to complete them. I would also like to express my gratitude to those friends that somehow helped me during my stay in Milan. I specially thank my supervisor Giovanni Agosta for all his understanding, cooperation and availability during the development of this work. Milan, April 2016 iv Abstract The Scripting Layer for Android (SL4A) is a software suite that brings scripting languages to Android by allowing the creation, edition and execution of scripts and the use of interactive interpreters directly on Android devices. These scripts have access to many of the APIs available to traditional Android applications, with the inherent ease of scripting languages. Despite being initially developed at Google, SL4A was never an official project and it is currently not maintained. The main purpose of this work is to update the SL4A libraries to support the most recent versions of the Android operative system as well as to extend the support for missing components in the user interface library. Lo Scripting Layer for Android (SL4A) è una suite di software che porta linguaggi di scripting ad Android, permettendo la creazione, edizione ed esecuzione di scripts e anche l'uso di interprete interattivi direttamente su dispositivi Android.
    [Show full text]
  • Haskell-Like S-Expression-Based Language Designed for an IDE
    Department of Computing Imperial College London MEng Individual Project Haskell-Like S-Expression-Based Language Designed for an IDE Author: Supervisor: Michal Srb Prof. Susan Eisenbach June 2015 Abstract The state of the programmers’ toolbox is abysmal. Although substantial effort is put into the development of powerful integrated development environments (IDEs), their features often lack capabilities desired by programmers and target primarily classical object oriented languages. This report documents the results of designing a modern programming language with its IDE in mind. We introduce a new statically typed functional language with strong metaprogramming capabilities, targeting JavaScript, the most popular runtime of today; and its accompanying browser-based IDE. We demonstrate the advantages resulting from designing both the language and its IDE at the same time and evaluate the resulting environment by employing it to solve a variety of nontrivial programming tasks. Our results demonstrate that programmers can greatly benefit from the combined application of modern approaches to programming tools. I would like to express my sincere gratitude to Susan, Sophia and Tristan for their invaluable feedback on this project, my family, my parents Michal and Jana and my grandmothers Hana and Jaroslava for supporting me throughout my studies, and to all my friends, especially to Harry whom I met at the interview day and seem to not be able to get rid of ever since. ii Contents Abstract i Contents iii 1 Introduction 1 1.1 Objectives ........................................ 2 1.2 Challenges ........................................ 3 1.3 Contributions ...................................... 4 2 State of the Art 6 2.1 Languages ........................................ 6 2.1.1 Haskell ....................................
    [Show full text]
  • Friend Documentation Release 0.2.1
    Friend Documentation Release 0.2.1 Joseph Wright Mar 19, 2021 Contents: 1 Introduction 1 1.1 What is Friend?..............................................1 2 API Reference 3 2.1 friend package..............................................3 3 Indices and tables 11 Python Module Index 13 Index 15 i ii CHAPTER 1 Introduction 1.1 What is Friend? Friend is all of those of utilities you keep reimplementing across your Python projects, that all got together and decided to live in harmony. Maybe you just parsed some YAML that contained some configuration in “snake_case”, and you want to pass this configuration to a boto3 function which takes the same values but in “PascalCase”. Then you might find snake_to_pascal_obj or one of its variants to come in handy. with open('conf.yml') as f: conf= yaml.load(f) ec2= boto3.resource('ec2') ec2.create_instances( ImageId='ami-12345678', BlockDeviceMappings=snake_to_pascal_obj(conf['block_device_mappings']), .... ) Or you need to add a retry to that script that keeps breaking your Jenkins job because the corporate proxy fails about 5% of the time. Sure, you can add a try/except and wrap it in a for loop, but putting the retryable decorator on top of that problematic function will do that for you in one configurable line. @retryable(times=5) def flaky_function(): status= requests.get('https://service.corp/v2/status').json() if 'error' in status: send_important_email(status['error']) 1 Friend Documentation, Release 0.2.1 2 Chapter 1. Introduction CHAPTER 2 API Reference 2.1 friend package 2.1.1 friend.collections module friend.collections.select_dict(coll, key, value) Given an iterable of dictionaries, return the dictionaries where the values at a given key match the given value.
    [Show full text]
  • The Rust Programming Language by Steve Klabnik and Carol Nichols, with Contributions from the Rust Community
    The Rust Programming Language by Steve Klabnik and Carol Nichols, with contributions from the Rust Community This version of the text assumes you’re using Rust 1.41.0 or later with edition="2018" in Cargo.toml of all projects to use Rust 2018 Edition idioms. See the “Installation” section of Chapter 1 to install or update Rust, and see the new Appendix E for information on editions. The 2018 Edition of the Rust language includes a number of improvements that make Rust more ergonomic and easier to learn. This iteration of the book contains a number of changes to reflect those improvements: Chapter 7, “Managing Growing Projects with Packages, Crates, and Modules,” has been mostly rewritten. The module system and the way paths work in the 2018 Edition were made more consistent. Chapter 10 has new sections titled “Traits as Parameters” and “Returning Types that Implement Traits” that explain the new impl Trait syntax. Chapter 11 has a new section titled “Using Result<T, E> in Tests” that shows how to write tests that use the ? operator. The “Advanced Lifetimes” section in Chapter 19 was removed because compiler improvements have made the constructs in that section even rarer. The previous Appendix D, “Macros,” has been expanded to include procedural macros and was moved to the “Macros” section in Chapter 19. Appendix A, “Keywords,” also explains the new raw identifiers feature that enables code written in the 2015 Edition and the 2018 Edition to interoperate. Appendix D is now titled “Useful Development Tools” and covers recently released tools that help you write Rust code.
    [Show full text]
  • Package 'Lettercase'
    Package ‘lettercase’ March 3, 2016 Title Utilities for Formatting Strings with Consistent Capitalization, Word Breaks and White Space Version 0.13.1 Date 2016-03-03 Description Utilities for formatting strings and character vectors to for capitalization, word break and white space. Supported formats are: snake_case, spine-case, camelCase, PascalCase, Title Case, UPPERCASE, lowercase, Sentence case or combinations thereof. 'lettercase' strives to provide a simple, consistent, intuitive and high performing interface. Depends R (>= 3.1.0), stringr (>= 1.0.0) Suggests testthat, knitr, magrittr (>= 1.5) License GPL-2 | file LICENSE LazyData true Collate 'lettercase-package.R' 'make_names.R' 'make_str_replace.R' 'patterns.R' 'str_cap_words.R' 'str_collapse_whitespace.R' 'str_delete.R' 'str_functions.R' 'str_is.R' 'str_lowercase.R' 'str_sentence_case.R' 'str_snake_case.R' 'str_spine_case.R' 'str_title_case.R' 'str_transform.R' 'str_ucfirst.R' 'str_uppercase.R' 'utils.R' 'zzz.R' VignetteBuilder knitr NeedsCompilation no Author Christopher Brown [aut, cre], Decision Patterns [cph] Maintainer Christopher Brown <[email protected]> Repository CRAN Date/Publication 2016-03-03 23:54:35 R topics documented: lettercase . .2 make_names . .3 1 2 lettercase make_str_replace . .4 pattern_whitespace . .5 str_cap_words . .5 str_collapse_whitespace . .6 str_delete . .7 str_delete_whitespace . .8 str_is . .9 str_lowercase . 10 str_sentence_case . 12 str_snake_case . 13 str_spine_case . 13 str_title_case . 14 str_transform . 15 str_ucfirst . 16 Index 17 lettercase lettercase Description Utilities for formatting strings according to common cases: upper case, lower case, snake case, camel case, spine case, title case, sentence case etc. Details The lettercase package provides utilities that help manage and maintain string formats related to: • capitalization • whitespace / word separating characters • special characters • acronyms Most often, the common convenience functions will be used.
    [Show full text]