Beyond the Basic Stuff with Python

Total Page:16

File Type:pdf, Size:1020Kb

Beyond the Basic Stuff with Python BEYOND THE BASIC STUFF WITH PYTHON BEST PRACTICES FOR WRITING CLEAN CODE AL SWEIGART BEYOND THE BASIC STUFF WITH PYTHON BEYOND THE BASIC STUFF WITH PYTHON Best Practices for Writing Clean Code Al Sweigart San Francisco BEYOND THE BASIC STUFF WITH PYTHON. Copyright © 2021 by Al Sweigart. All rights reserved. No part of this work may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording, or by any information storage or retrieval system, without the prior written permission of the copyright owner and the publisher. ISBN-13: 978-1-59327-966-0 (print) ISBN-13: 978-1-59327-967-7 (ebook) Publisher: William Pollock Executive Editor: Barbara Yien Production Editor: Maureen Forys, Happenstance Type-O-Rama Developmental Editor: Frances Saux Cover Design: Octopod Studios Interior Design: Octopod Studios Cover Illustration: Josh Ellingson Technical Reviewer: Kenneth Love Copyeditor: Anne Marie Walker Compositor: Happenstance Type-O-Rama Proofreader: Rachel Monaghan Indexer: Valerie Perry For information on book distributors or translations, please contact No Starch Press, Inc. directly: No Starch Press, Inc. 245 8th Street, San Francisco, CA 94103 phone: 1-415-863-9900; [email protected] www.nostarch.com Library of Congress Cataloging-in-Publication Data Library of Congress Cataloging-in-Publication Data Names: Sweigart, Al, author. Title: Beyond the basic stuff with python : best practices for writing clean code / Al Sweigart. Description: San Francisco, CA : No Starch Press, Inc., [2021] | Includes index. Identifiers: LCCN 2020034287 (print) | LCCN 2020034288 (ebook) | ISBN 9781593279660 (paperback) | ISBN 9781593279677 (ebook) Subjects: LCSH: Python (Computer program language) | Computer programming. Classification: LCC QA76.73.P98 S943 2021 (print) | LCC QA76.73.P98 (ebook) | DDC 005.13/3—dc23 LC record available at https://lccn.loc.gov/2020034287 LC ebook record available at https://lccn.loc.gov/2020034288 No Starch Press and the No Starch Press logo are registered trademarks of No Starch Press, Inc. Other product and company names mentioned herein may be the trademarks of their respective owners. Rather than use a trademark symbol with every occurrence of a trademarked name, we are using the names only in an editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the trademark. For my nephew Jack About the Author Al Sweigart is a software developer and tech book author living in Seattle. Python is his favorite programming language, and he is the developer of sev- eral open source modules for it. His other books are freely available under a Creative Commons license on his website at https://www.inventwithpython.com/. His cat Zophie weighs 11 pounds. About the Technical Reviewer Kenneth Love is a programmer, teacher, and conference organizer. He is a Django contributor and PSF Fellow, and currently works as a tech lead and software engineer for O’Reilly Media. BRIEF CONTENTS Acknowledgments . xix Acknowledgments . xix Introduction . xxi Introduction . xxi PART 1: GETTING STARTED ......................1 PART I: GETTING STARTED .............................1 Chapter 1: Dealing with Errors and Asking for Help . 3 Chapter 1: Dealing with Errors and Asking for Help . 3 Chapter 2: Environment Setup and the Command Line . 17 Chapter 2: Environment Setup and the Command Line . 17 PART 2: BEST PRACTICES, TOOLS, AND TECHNIQUES ..43 PART II: BEST PRACTICES, TOOLS, AND TECHNIQUES ........43 Chapter 3: Code Formatting with Black . 45 Chapter 3: Code Formatting with Black . 45 Chapter 4: Choosing Understandable Names . 59 Chapter 4: Choosing Understandable Names . 59 Chapter 5: Finding Code Smells . 69 Chapter 5: Finding Code Smells . 69 Chapter 6: Writing Pythonic Code . 87 Chapter 6: Writing Pythonic Code . 87 Chapter 7: Programming Jargon . 107 Chapter 7: Programming Jargon . 107 Chapter 8: Common Python Gotchas . 133 Chapter 8: Common Python Gotchas . 133 Chapter 9: Esoteric Python Oddities . 153 Chapter 9: Esoteric Python Oddities . 153 Chapter 10: Writing Effective Functions . 161 Chapter 10: Writing Effective Functions . 161 Chapter 11: Comments, Docstrings, and Type Hints . 181 Chapter 11: Comments, Docstrings, and Type Hints . 181 Chapter 12: Organizing Your Code Projects with Git . 199 Chapter 12: Organizing Your Code Projects with Git . 199 Chapter 13: Measuring Performance and Big O Algorithm Analysis . 225 Chapter 13: Measuring Performance and Big O Algorithm Analysis . .225 Chapter 14: Practice Projects . 247 Chapter 14: Practice Projects . 247 PART 3: OBJECT-ORIENTED PYTHON ............273 PART III: OBJECT-ORIENTED PYTHON . 273 Chapter 15: Object-Oriented Programming and Classes . 275 Chapter 15: Object-Oriented Programming and Classes . 275 Chapter 16: Object-Oriented Programming and Inheritance . 293 Chapter 16: Object-Oriented Programming and Inheritance . 293 Chapter 17: Pythonic OOP: Properties and Dunder Methods . 315 Chapter 17: Pythonic OOP: Properties and Dunder Methods . 315 Index . 339 Index . 339 CONTENTS IN DETAIL CONTENTS IN DETAIL About the Author . vii About the Technical Reviewer . vii ACKNOWLEDGMENTS xix ACKNOWLEDGMENTS XIX INTRODUCTION xxi INTRODUCTION XXI Who Should Read This Book and Why . xxii Who Should Read This Book and Why . xxii About This Book . xxii About This Book . xxii Your Programming Journey . xxiv Your Programming Journey . xxiv PART I: GETTING STARTED 1 PART 1 1 DEALING WITH ERRORS AND ASKING FOR HELP 3 How to Understand Python Error Messages . 4 GETTING STARTED 1 Examining Tracebacks . 4 Searching for Error Messages . 7 1 Preventing Errors with Linters . 8 How to Ask for Programming Help . 9 DEALING WITH ERRORS AND ASKING FOR HELP 3 Limit Back and Forth by Providing Your Information Upfront . 10 State Your Question in the Form of an Actual Question . 10 How to Understand Python Error Messages . 4 Ask Your Question on the Appropriate Website . 10 Examining Tracebacks . 4 Summarize Your Question in the Headline . 11 Searching for Error Messages . 7 Explain What You Want the Code to Do . 11 Preventing Errors with Linters . 8 Include the Full Error Message . 11 How to Ask for Programming Help . 9 Share Your Complete Code . 11 Limit Back and Forth by Providing Your Information Upfront . 10 Make Your Code Readable with Proper Formatting . 12 State Your Question in the Form of an Actual Question . 10 Tell Your Helper What You’ve Already Tried . 13 Ask Your Question on the Appropriate Website . 10 Describe Your Setup . 13 Summarize Your Question in the Headline . 11 Examples of Asking a Question . 14 Explain What You Want the Code to Do . 11 Summary . 14 Include the Full Error Message . 11 Share Your Complete Code . 11 2 Make Your Code Readable with Proper Formatting . 12 ENVIRONMENT SETUP AND THE COMMAND LINE 17 Tell Your Helper What You’ve Already Tried . 13 Describe Your Setup . 13 The Filesystem . 18 Examples of Asking a Question . 14 Paths in Python . 18 Summary . 14 The Home Directory . 19 The Current Working Directory . 19 2 Absolute vs . Relative Paths . 20 Programs and Processes . 21 The Command Line . 22 ENVIRONMENT SETUP AND THE COMMAND LINE 17 Opening a Terminal Window . 23 The Filesystem . 18 Running Programs from the Command Line . 23 Paths in Python . 18 Using Command Line Arguments . 24 The Home Directory . 19 Running Python Code from the Command Line with -c . 26 The Current Working Directory . 19 Running Python Programs from the Command Line . 26 Absolute vs . Relative Paths . 20 Programs and Processes . 21 xi The Command Line . 22 Opening a Terminal Window . 23 Running Programs from the Command Line . 23 Using Command Line Arguments . 24 Running Python Code from the Command Line with -c . 26 Running Python Programs from the Command Line . 26 Running the py .exe Program . 26 Running Commands from a Python Program . 27 Minimizing Typing with Tab Completion . 27 Running the py .exe Program . 26 Running Commands from a Python Program . 27 Minimizing Typing with Tab Completion . 27 Viewing the Command History . 28 Working with Common Commands . 28 Environment Variables and PATH . 35 Viewing Environment Variables . 36 Working with the PATH Environment Variable . 36 Changing the Command Line’s PATH Environment Variable . 37 Permanently Adding Folders to PATH on Windows . 38 Permanently Adding Folders to PATH on macOS and Linux . 39 Running Python Programs Without the Command Line . 39 Running Python Programs on Windows . 40 Running Python Programs on macOS . 41 Running Python Programs on Ubuntu Linux . 41 Summary . 42 PART III: BEST PRACTICES, TOOLS, AND TECHNIQUES 43 3 CODE FORMATTING WITH BLACK 45 How to Lose Friends and Alienate Co-Workers . 46 Style Guides and PEP 8 . 46 Horizontal Spacing . 47 Use Space Characters for Indentation . 47 Spacing Within a Line . 48 Vertical Spacing . 51 A Vertical Spacing Example . 51 Vertical Spacing Best Practices . 52 Black: The Uncompromising Code Formatter . 53 Installing Black . 54 Running Black from the Command Line . 54 Disabling Black for Parts of Your Code ..
Recommended publications
  • Cambridge University Press 978-1-108-78987-5 — How to Write Good Programs Perdita Stevens Index More Information
    Cambridge University Press 978-1-108-78987-5 — How to Write Good Programs Perdita Stevens Index More Information Index A bold page number indicates where a term is deined. abstract syntax tree, 105 C, 35, 45, 189 abstraction, 29, 141 C♯,35 see also model C++, 35, 190 agile, 64, 159, 198 camel case, 89 algorithm, 29, 147, 148, 196 change, 141, 144, 197 Alice, 44 checklist, 127 arguments, 25,28 cloud, 66 functions as, 45 code order of, 108 commented-out, 62 type of, 41, 108 completion, 52,90 assert, 71 dead, 64 assignment, 131 line length, 99 vs. comparison, 126 reputable body of, 46, 63, 94, 99 Atom, 18 spaghetti, 98, 122 autocompletion, 52,90 unreachable, 64 autosave, 57 code sense, 3, 133 coding, 4 backups, 65 coding dojo, 153 bar, see metasyntactic variable coding interview, 148 BASIC, 44, 125 command line, 15, 49 baz, see metasyntactic variable comment, 27, 70, 85–88 BlueJ, 44, 54 commenting-out, 62 breakpoint, 111 comparison bug, 32, 101, 190, 191 of booleans, 126 after removing, 124 of objects, 130 avoiding, 138 vs. assignment, 126 avoiding recurrence of, 77 compiler, 13, 35 in compiler, 109 bug, 109 removing, 122 incremental, 51 the Lauren bug, 78 computational complexity, 148 see also debugging content assist, 52,90 build, 51, 53 contract, 88 202 © in this web service Cambridge University Press www.cambridge.org Cambridge University Press 978-1-108-78987-5 — How to Write Good Programs Perdita Stevens Index More Information Index 203 crash, 118 time, 146 currying, 23 user, 146 Emacs, 18, 49, 58, 90, 95 data science, 192 embedded
    [Show full text]
  • Section “Creating R Packages” in Writing R Extensions
    Writing R Extensions Version 3.1.0 Under development (2013-03-29) R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the con- ditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another lan- guage, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. Copyright c 1999{2013 R Core Team i Table of Contents Acknowledgements ::::::::::::::::::::::::::::::::: 1 1 Creating R packages:::::::::::::::::::::::::::: 2 1.1 Package structure :::::::::::::::::::::::::::::::::::::::::::::: 3 1.1.1 The `DESCRIPTION' file :::::::::::::::::::::::::::::::::::: 4 1.1.2 Licensing:::::::::::::::::::::::::::::::::::::::::::::::::: 9 1.1.3 The `INDEX' file :::::::::::::::::::::::::::::::::::::::::: 10 1.1.4 Package subdirectories:::::::::::::::::::::::::::::::::::: 11 1.1.5 Data in packages ::::::::::::::::::::::::::::::::::::::::: 14 1.1.6 Non-R scripts in packages :::::::::::::::::::::::::::::::: 15 1.2 Configure and cleanup :::::::::::::::::::::::::::::::::::::::: 16 1.2.1 Using `Makevars'::::::::::::::::::::::::::::::::::::::::: 19 1.2.1.1 OpenMP support::::::::::::::::::::::::::::::::::::
    [Show full text]
  • Debreach: Selective Dictionary Compression to Prevent BREACH and CRIME
    debreach: Selective Dictionary Compression to Prevent BREACH and CRIME A THESIS SUBMITTED TO THE FACULTY OF THE GRADUATE SCHOOL OF THE UNIVERSITY OF MINNESOTA BY Brandon Paulsen IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF MASTER OF SCIENCE Professor Peter A.H. Peterson July 2017 © Brandon Paulsen 2017 Acknowledgements First, I’d like to thank my advisor Peter Peterson and my lab mate Jonathan Beaulieu for their insights and discussion throughout this research project. Their contributions have undoubtedly improved this work. I’d like to thank Peter specifically for renew- ing my motivation when my project appeared to be at a dead–end. I’d like to thank Jonathan specifically for being my programming therapist. Next, I’d like to thank my family and friends for constantly supporting my aca- demic goals. In particular, I’d like to thank my mom and dad for their emotional support and encouragement. I’d like to thank my brother Derek and my friend Paul “The Wall” Vaynshenk for being great rock climbing partners, which provided me the escape from work that I needed at times. I’d like to again thank Jonathan Beaulieu and Xinru Yan for being great friends and for many games of Settlers of Catan. I’d like to thank Laura Krebs for helping me to discover my passion for academics and learning. Finally, I’d like to thank my fellow graduate students and the computer science faculty of UMD for an enjoyable graduate program. I’d also like to thank Professor Bethany Kubik and Professor Haiyang Wang for serving on my thesis committee.
    [Show full text]
  • Turbo.Lua Documentation Release 2.1.2
    Turbo.lua Documentation Release 2.1.2 John Abrahamsen Nov 02, 2018 Contents 1 Hello World 3 2 Supported Architectures 5 3 Supported Operating Systems7 4 Installation 9 5 Object oriented Lua 11 6 Packaging 13 7 Dependencies 15 8 License 17 9 Tutorials 19 9.1 Get Started With Turbo.......................................... 19 9.1.1 Installing Turbo......................................... 19 9.1.2 Hello World........................................... 20 9.1.3 Request parameters....................................... 20 9.1.4 Routes.............................................. 20 9.1.5 Serving Static Files....................................... 21 9.1.6 JSON Output.......................................... 22 9.2 Asynchronous modules......................................... 22 9.2.1 Overview............................................ 22 9.2.2 Example module........................................ 24 10 API documentation 27 10.1 Turbo.lua API Versioning........................................ 27 10.1.1 Preliminaries.......................................... 27 10.1.2 Module Version......................................... 27 10.2 turbo.web – Core web framework.................................... 28 10.2.1 RequestHandler class...................................... 28 10.2.2 HTTPError class........................................ 32 10.2.3 StaticFileHandler class..................................... 32 10.2.4 RedirectHandler class...................................... 33 10.2.5 Application class........................................ 33
    [Show full text]
  • Fundamental Data Structures Contents
    Fundamental Data Structures Contents 1 Introduction 1 1.1 Abstract data type ........................................... 1 1.1.1 Examples ........................................... 1 1.1.2 Introduction .......................................... 2 1.1.3 Defining an abstract data type ................................. 2 1.1.4 Advantages of abstract data typing .............................. 4 1.1.5 Typical operations ...................................... 4 1.1.6 Examples ........................................... 5 1.1.7 Implementation ........................................ 5 1.1.8 See also ............................................ 6 1.1.9 Notes ............................................. 6 1.1.10 References .......................................... 6 1.1.11 Further ............................................ 7 1.1.12 External links ......................................... 7 1.2 Data structure ............................................. 7 1.2.1 Overview ........................................... 7 1.2.2 Examples ........................................... 7 1.2.3 Language support ....................................... 8 1.2.4 See also ............................................ 8 1.2.5 References .......................................... 8 1.2.6 Further reading ........................................ 8 1.2.7 External links ......................................... 9 1.3 Analysis of algorithms ......................................... 9 1.3.1 Cost models ......................................... 9 1.3.2 Run-time analysis
    [Show full text]
  • Section “Creating R Packages” in Writing R Extensions
    Writing R Extensions Version 3.0.0 RC (2013-03-28) R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the con- ditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another lan- guage, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. Copyright c 1999{2013 R Core Team i Table of Contents Acknowledgements ::::::::::::::::::::::::::::::::: 1 1 Creating R packages:::::::::::::::::::::::::::: 2 1.1 Package structure :::::::::::::::::::::::::::::::::::::::::::::: 3 1.1.1 The `DESCRIPTION' file :::::::::::::::::::::::::::::::::::: 4 1.1.2 Licensing:::::::::::::::::::::::::::::::::::::::::::::::::: 9 1.1.3 The `INDEX' file :::::::::::::::::::::::::::::::::::::::::: 10 1.1.4 Package subdirectories:::::::::::::::::::::::::::::::::::: 11 1.1.5 Data in packages ::::::::::::::::::::::::::::::::::::::::: 14 1.1.6 Non-R scripts in packages :::::::::::::::::::::::::::::::: 15 1.2 Configure and cleanup :::::::::::::::::::::::::::::::::::::::: 16 1.2.1 Using `Makevars'::::::::::::::::::::::::::::::::::::::::: 19 1.2.1.1 OpenMP support:::::::::::::::::::::::::::::::::::: 22 1.2.1.2
    [Show full text]
  • Writing R Extensions
    Writing R Extensions Version 4.1.1 Patched (2021-09-22) R Core Team This manual is for R, version 4.1.1 Patched (2021-09-22). Copyright c 1999{2021 R Core Team Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into an- other language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the R Core Team. i Table of Contents Acknowledgements ::::::::::::::::::::::::::::::::::::::::::::::::: 1 1 Creating R packages ::::::::::::::::::::::::::::::::::::::::::: 2 1.1 Package structure :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 3 1.1.1 The DESCRIPTION file ::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 4 1.1.2 Licensing ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 8 1.1.3 Package Dependencies::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 9 1.1.3.1 Suggested packages:::::::::::::::::::::::::::::::::::::::::::::::::::::: 12 1.1.4 The INDEX file ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 13 1.1.5 Package subdirectories :::::::::::::::::::::::::::::::::::::::::::::::::::::::
    [Show full text]
  • Year of the Horse. the Months of The
    here are many animals named in the Template of the Hidden Texts which appear anomalous to the context. It turns out they are Chinese years or Celtic symbols (such as salmon) or constellations. Also there are several codes which the word HORSE indicates. The months of the horse,which happen to be the same horses as those of the "apocalypse" (the "unveiling"), the constellations: of the winged horse Scheat of Pegasus, the colt Equulus the foal, the horse's blaze Kurnah in Cepheus, Hippocampus the seahorse, Leucippe the white horse, Alpha Andromeda and then there is the Year of the Horse. The months of the horse have far too many ciphers ~ nag, Dan, ornament, Ma, ears, Be, Elm, shoe, Ara, Bau and all the other words which mean Gemini, Cancer, Virgo, Libra/October, Scorpio and Sagittarius. Something big is slotted for Sagittarius. The White Horse Warning at Uffington is Sagittarius, complete with the large cross of the bow and arrow. Sagittarius is not shown at all on the zodiac column of St John The Divine. This forum is a collection of all the lines with the word horse or fourteen coded within them. Before we get started on the year which is the beginning of the end for our current lifestyle, a pertinent detail will be outlined. The matter of the "shar" of the Nibiru system. The shar is the "year", the orbit this solar system keeps. Many people have many different numbers of our years in one shart. It seems the Anakim (the biblical spelling for a civilization who have as many names as there are tribes on Earth) do have some control over their system.
    [Show full text]
  • Language and Framework Support for Reviewably- Secure Software Systems
    Language and Framework Support for Reviewably- Secure Software Systems Adrian Mettler Electrical Engineering and Computer Sciences University of California at Berkeley Technical Report No. UCB/EECS-2012-244 http://www.eecs.berkeley.edu/Pubs/TechRpts/2012/EECS-2012-244.html December 13, 2012 Copyright © 2012, by the author(s). All rights reserved. Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission. Language and Framework Support for Reviewably-Secure Software Systems by Adrian Matthew Mettler A dissertation submitted in partial satisfaction of the requirements for the degree of Doctor of Philosophy in Computer Science in the Graduate Division of the University of California, Berkeley Committee in charge: Professor David Wagner, Chair Professor Deirdre Mulligan Professor Dawn Song Fall 2012 Language and Framework Support for Reviewably-Secure Software Systems Copyright 2012 by Adrian Matthew Mettler 1 Abstract Language and Framework Support for Reviewably-Secure Software Systems by Adrian Matthew Mettler Doctor of Philosophy in Computer Science University of California, Berkeley Professor David Wagner, Chair My thesis is that languages and frameworks can and should be designed to make it easier for programmers to write reviewably secure systems. A system is reviewably secure if its security is easy for an experienced programmer to verify, given access to the source code.
    [Show full text]
  • A Glossary for IWGS (Auto-Generated)
    A Glossary for IWGS (Auto-Generated) Michael Kohlhase Computer Science, FAU Erlangen-Nürnberg https://kwarc.info/kohlhase July 1, 2021 Preface This document contains an English glossary for the course Informatische Werkzeuge in den Geistes- und Sozialwissenschaften at FAU Erlangen-Nürnberg (IWGS). It is automatically generated from the sources of the IWGS course notes and should be up-to-date with the course progress. The glossary contains definitions for all technical terms used in the course, both theones defined in the course, as well as the ones presupposed. The latter should be relatively few,since IWGS is intended as a beginner’s course. 1 1 Glossary for IWGS Given a description logic D, a D-ontology consists of D-ontology–a terminology (or TBox): concepts and roles and a set of concept axioms that describe them, and – assertions (or ABox): a set of individuals and statements about concept membership and role relationships for them. To make the role of arguments extremely clear, we write functions in λ-notation. For f = f(x; E) j x 2 Xg, where E is an expression, we write λx 2 X:E. n n-dim Cartesianλ-notation space n-dim Cartesian space: A := fha1; : : : ; ani j 1≤i≤n ) ai 2 Ag, call ha1; : : : ; ani a vector n-dimensional Cartesian space An n-dimensional Cartesian product A1 × ::: × An is called a n-dimensional Cartesian space n n over A (and denoted A ) iff Ai = A for some set A for all i. We call ha1; : : : ; ani 2 A a vector. n-fold Cartesian product Let A := fAi j 1≤i≤ng be a collection of sets, then the n-fold Cartesian product A1 × ::: × An is fha1; : : : ; ani j ai 2 Ai for all 1≤i≤ng, we call ha1; : : : ; ani 2 A1 × ::: × An an n-tuple.
    [Show full text]
  • The Checker Framework Manual: Custom Pluggable Types for Java
    The Checker Framework Manual: Custom pluggable types for Java https://checkerframework.org/ Version 2.5.7 (4 Nov 2018) For the impatient: Section 1.3 (page 13) describes how to install and use pluggable type-checkers. Contents 1 Introduction 12 1.1 How to read this manual . 13 1.2 How it works: Pluggable types . 13 1.3 Installation . 13 1.4 Example use: detecting a null pointer bug . 13 2 Using a checker 15 2.1 Writing annotations . 15 2.2 Running a checker . 16 2.2.1 Using annotated libraries . 16 2.2.2 Distributing your annotated project . 17 2.2.3 Summary of command-line options . 17 2.2.4 Checker auto-discovery . 19 2.2.5 Shorthand for built-in checkers . 19 2.3 What the checker guarantees . 19 2.4 Tips about writing annotations . 20 2.4.1 Write annotations before you run a checker . 20 2.4.2 How to get started annotating legacy code . 20 2.4.3 Annotations indicate non-exceptional behavior . 22 2.4.4 Subclasses must respect superclass annotations . 22 2.4.5 Annotations on constructor invocations . 23 2.4.6 What to do if a checker issues a warning about your code . 24 3 Nullness Checker 26 3.1 What the Nullness Checker checks . 26 3.2 Nullness annotations . 27 3.2.1 Nullness qualifiers . 27 3.2.2 Nullness method annotations . 28 3.2.3 Initialization qualifiers . 28 3.2.4 Map key qualifiers . 28 3.3 Writing nullness annotations . 29 3.3.1 Implicit qualifiers . 29 3.3.2 Default annotation .
    [Show full text]
  • Proceedings Chapter Reference
    Proceedings Chapter Featherweight Swift: A Core Calculus for Swift's Type System RACORDON, Dimitri, BUCHS, Didier Abstract Swift is a modern general-purpose programming language, designed to be a replacement for C-based languages. Although primarily directed at development of applications for Apple’s operating systems, Swift’s adoption has been growing steadily in other domains, ranging from server-side services to machine learning. This success can be partly attributed to a rich type system that enables the design of safe, fast, and expressive programming interfaces. Unfortunately, this richness comes at the cost of complexity, setting a high entry barrier to exploit Swift’s full potential. Furthermore, existing documentation typically only relies on examples, leaving new users with little help to build a deeper under- standing of the underlying rules and mechanisms. This paper aims to tackle this issue by laying out the foundations for a formal framework to reason about Swift’s type system. We introduce Featherweight Swift, a minimal language stripped of all features not essential to describe its typing rules. Featherweight Swift features classes and protocol inheritance, supports retroactive modeling, and emulates Swift’s [...] Reference RACORDON, Dimitri, BUCHS, Didier. Featherweight Swift: A Core Calculus for Swift’s Type System. In: Proceedings of the 13th ACM SIGPLAN International Conference on Software Language En- gineering (SLE ’20). 2020. Available at: http://archive-ouverte.unige.ch/unige:144345 Disclaimer: layout of this document may differ from the published version. 1 / 1 Featherweight Swift: A Core Calculus for Swift’s Type System Dimitri Racordon Didier Buchs University of Geneva University of Geneva Department of Computer Science Department of Computer Science Switzerland Switzerland [email protected] [email protected] Abstract ACM Reference Format: Swift is a modern general-purpose programming language, Dimitri Racordon and Didier Buchs.
    [Show full text]