Benefits and Drawbacks of Adopting a Secure Programming Language: Rust As a Case Study

Total Page:16

File Type:pdf, Size:1020Kb

Benefits and Drawbacks of Adopting a Secure Programming Language: Rust As a Case Study Benefits and Drawbacks of Adopting a Secure Programming Language: Rust as a Case Study Kelsey R. Fulton, Anna Chan, Daniel Votipka†, Michael Hicks, and Michelle L. Mazurek University of Maryland †Tufts University Abstract ties have remained a consistent, and sometimes worsening, Programming languages such as Rust and Go were devel- threat [37], with estimates that 60-70% of critical vulnerabili- oped to combat common and potentially devastating memory- ties in Chrome [13], Microsoft products [7] and in other large safety-related vulnerabilities. But adoption of new, more se- critical systems [12] owe to memory safety vulnerabilities. cure languages can be fraught and complex. To better under- Overwhelmingly, memory safety vulnerabilites occur in stand the benefits and challenges of adopting Rust in partic- C and C++ code—while most popular languages enforce ular, we conducted semi-structured interviews with profes- memory safety automatically, C and C++ do not [43, 47]. sional, primarily senior software developers who have worked Relatively recently, Google developed Go [14] and Mozilla with Rust on their teams or tried to introduce it (n = 16), and developed Rust [33] to be practical but secure alternatives to we deployed a survey to the Rust development community C and C++; these languages aim to be fast, low-level, and (n = 178). We asked participants about their personal experi- type- and memory-safe [34,40]. Rust and Go have been rising ences using Rust, as well as experiences using Rust at their in popularity—IEEE’s 2019 Top Programming languages list companies. We find a range of positive features, including ranks them 17 and 10, respectively—but C and C++ continue good tooling and documentation, benefits for the development to occupy top spots (3 and 4). We might wonder: What are lifecycle, and improvement of overall secure coding skills, as the factors fueling the rise of these secure languages? Is there well as drawbacks including a steep learning curve, limited li- a chance they will overtake their insecure counterparts, C and brary support, and concerns about the ability to hire additional C++, and if so, how? Rust developers in the future. Our results have implications In this paper, we attempt to answer these questions for Rust, for promoting the adoption of Rust specifically and secure in particular. While Go is extremely popular, Rust’s popular- programming languages and tools more generally. ity has also risen sharply in the last few years [9,15,34,39,46]. Rust’s “zero-cost abstractions” and its lack of garbage col- lection make it appropriate for resource-constrained environ- 1 Introduction ments, where Go would be less appropriate and C and C++ have traditionally been the only game in town. Secure software development is a difficult and important task. Vulnerabilities are still discovered in production code on a reg- We conducted semi-structured interviews with professional, ular basis [4,27,38], and many of these arise from highly dan- primarily senior developers who have actively worked with gerous violations of memory safety, such as use-after-frees, Rust on their product teams, and/or attempted to get their com- buffer overflows, and out-of-bounds reads/writes [28–32]. panies to adopt Rust (n = 16). We also surveyed participants Despite their long history and the many attempts aimed at in Rust development community forums (n = 178). We asked mitigating or blocking their exploitation, such vulnerabili- participants about their general programming experience and experiences using and adopting Rust both personally and at a company. We also asked about the benefits and drawbacks of using Rust in both settings. By asking these questions, we aim to understand the challenges that inhibit adoption, the net benefits (if any) that accrue after adoption, and what tactics Copyright is held by the author/owner. Permission to make digital or hard have been (un)successful in driving adoption and use. copies of all or part of this work for personal or classroom use is granted Our survey population likely represents those who view without fee. USENIX Symposium on Usable Privacy and Security (SOUPS) 2021. Rust at least somewhat positively, since we would not expect August 8–10, 2021, Virtual Conference. those who tried Rust and abandoned it to be members of Rust forums. That said, our survey population comprised people For those with a deeper interest, we recommend the tutorial with a variety of general and Rust-specific development expe- offered in the official Rust Programming Language Book [21]. rience. 26% of respondents had used Rust for less than one year and they often held similar opinions to more experienced 2.1 Core features and ecosystem Rust users. Our results uncovered a wide variety of specific challenges and benefits which can provide novel insights into Rust is a multi-paradigm language, with elements drawn from the human factors of secure language adoption. functional, imperative, and object oriented languages. Rust’s Participants largely perceived Rust to succeed at its goals traits abstract behavior that types can have in common, sim- of security and performance. Other key strengths identified ilarly to interfaces in Java of typeclasses in Haskell. Traits by participants include an active community, high-quality can be applied to any type, and types need not specifically documentation, and clear error messages, all of which make mention them in their definitions. Objects can be encoded it easy to find solutions to problems. Further, participants using traits and structures. Rust also supports generics and indicated that overall Rust benefits the development cycle in modules, and a sophisticated macro system. Rust’s variables both speed and quality, and using Rust improved their mental are immutable by default: once a value is bound to a vari- models of secure programming in ways that extend to other able, the variable cannot be changed unless it is specifically languages. annotated as mutable. Immutability eases safe code composi- However, participants also noted key drawbacks that can tion, and plays well with ownership, described shortly. Rust inhibit adoption, most seriously a steep learning curve to also enjoys local type inference: types on local variables are adjust to the paradigms that enforce security guarantees. Other generally optional, and can be inferred from their initializer. concerns included dependency bloat, limited library support, Rust also supports tagged unions (“enums”) and pattern slow compile times, high up-front costs, worries about future matching, which allow it to, for example, avoid the need for stability and maintenance, and apprehension about the ability a null value (the “billion dollar mistake” [19]). to hire Rust programmers going forward. For our participants, Rust has an integrated build system and package man- these negatives, while important, were generally outweighed ager called Cargo, which downloads library packages, called by the positive aspects of the language. crates, as needed, during builds. Rust has an official commu- Lastly, participants offered advice for others wanting to ad- nity package registry called crates.io. At the time of writing, vocate adoption of Rust or other secure languages: be patient, Crates.io lists more than 49,000 crates. pick projects playing to the language’s strengths, and offer support and mentorship during the transition. 2.2 Ownership and Lifetimes Analyzing our findings, we offer recommendations aimed at supporting greater adoption of Rust in particular and se- To avoid dangerous, security-relevant errors involving ref- cure languages generally. The popularity of Rust with our erences, Rust enforces a programming discipline involving participants highlights the importance of the ecosystem — ownership, borrowing, and lifetimes. tooling, documentation, community — when developing se- Ownership. Most type-safe languages use garbage col- cure languages and tools that users will actually want to use. lection to prevent the possibility of using a pointer after its Our results also suggest that perhaps the most critical path memory has been freed. Rust prevents this without garbage toward increased adoption of Rust in particular is to flatten collection by enforcing a strict ownership-based programming its learning curve, perhaps by finding ways to gradually train discipline involving three rules, enforced by the compiler: developers to use Rust’s ownership and lifetimes. Further, we 1. Each value in Rust has a variable that is its owner. find that much of the cost of adoption occurs up front, while 2. There can only be one owner at a time for each value. benefits tend to accrue later and with more uncertainty; secu- 3. A value is dropped when its owner goes out of scope. rity advocates should look for ways to rebalance this calculus An example of these rules can be seen in Listing1. In this by investing in a pipeline of trained developers and contribut- example, a is the owner of the value “example.” The scope ing to the longevity and stability of the Rust ecosystem. of a starts when a is created on line 3. The scope of a ends on line 5, so the value of a is then dropped. In the second x 2 Background block of code, is the initial owner of the value “example.” Ownership is then transferred to y on line 11, which is why the print on line 13 fails. The value cannot have two owners. Rust is an open-source systems programming language cre- ated by Mozilla, with its first stable release in 2014. Rust’s Borrowing. Since Rust does not allow values to have more creators promote its ability to “help developers create fast, than one owner, a non-owner wanting to use the value must secure applications” and argue that Rust “prevents segmenta- borrow a reference to a value. A borrow may take place so tion faults and guarantees thread safety.” This section presents long as the following invariant is maintained: There can be (a) Rust’s basic setup and how it aims to achieve these benefits.
Recommended publications
  • Download the Paper (PDF)
    WWW.VIRUSBULLETIN.COM/CONFERENCE 2019 LONDON 2 – 4 October 2019 EXPLORING EMOTET, AN ELABORATE EVERYDAY ENIGMA Luca Nagy Sophos, Hungary [email protected] ABSTRACT Based on Sophos detection numbers, the Emotet trojan is the most widespread malware family in the wild. Since its appearance more than fi ve years ago, it has been – and remains – the most notorious and costly active malware. Emotet owes its reputation to its constant state of evolution and change. The malware’s rapid advancement helps support its highly sophisticated operation. This paper will discuss the reverse engineering of its components, as well as the capabilities and features of Emotet: a detailed overview of its multi-layered operation, starting with the spam lure, the malicious attachments (and their evolution), and the malware executable itself, from its highly sophisticated packer to its C2 server communications. Emotet is well known for its modular architecture, its worm-like propagation, and its highly skilled persistence techniques. The recent versions spread rapidly using multiple methods. Besides its ability to spread by brute forcing using its own password lists, it can also harvest email addresses and email content from victims, then spread through spam. Its diverse module list hides different malicious intentions, such as information stealing, including credentials from web browsers or email clients; spreading capabilities; and delivering other malware including ransomware and other banking trojans. We will dissect the background operations of the payload modules. We will also present statistics from Sophos about Emotet’s global reach. A BRIEF HISTORY OF EMOTET The fi rst Emotet sample we detected popped up on 26 May 2014.
    [Show full text]
  • The ENIGMA Data Clearinghouse: a Platform for Rigorous Self-Validated Data Modeling and Integrative, Reproducible Data Analysis
    The ENIGMA Data Clearinghouse: A platform for rigorous self-validated data modeling and integrative, reproducible data analysis John-Marc Chandonia*,1 ([email protected]), Pavel S. Novichov*,1, Adam P. Arkin, and Paul D. Adams1,2 1Lawrence Berkeley National Lab, Berkeley; 2University of California at Berkeley; *co-first authors http://enigma.lbl.gov Project Goals: ENIGMA (Ecosystems and Networks Integrated with Genes and Molecular Assemblies) uses a systems biology approach to understand the interaction between microbial communities and the ecosystems that they inhabit. To link genetic, ecological, and environmental factors to the structure and function of microbial communities, ENIGMA integrates and develops laboratory, field, and computational methods. One of the Grand Challenges of data science is to facilitate knowledge discovery by enabling datasets to be readily analyzable both by humans and by machine learning algorithms. In 2016, a diverse group of stakeholders formalized a concise and measurable set of principles, called FAIR, to increase the utility of datasets for the purpose of knowledge discovery. The four principles of FAIR are Findability, Accessibility, Interoperability, and Reusability. Findability means that data are assigned stable identifiers, and properly indexed. Accessibility means the data are easily retrievable by people authorized to have access. Interoperability means the data are clearly documented using a formal language, in order to facilitate integrated analyses that span multiple datasets. Reusability means the data are documented sufficiently well that it may be used by other people than those who originally generated it, and that the provenance of all data is clear. The latter two principles are particularly challenging, yet critical to achieve, for organizations such as ENIGMA that draw conclusions based on highly integrative analyses of many types of data generated by multiple labs.
    [Show full text]
  • Toolchains Instructor: Prabal Dutta Date: October 2, 2012
    EECS 373: Design of Microprocessor-Based Systems Fall 2012 Lecture 3: Toolchains Instructor: Prabal Dutta Date: October 2, 2012 Note: Unless otherwise specified, these notes assume: (i) an ARM Cortex-M3 processor operating in little endian mode; (ii) the ARM EABI application binary interface; and (iii) the GNU GCC toolchain. Toolchains A complete software toolchain includes programs to convert source code into binary machine code, link together separately assembled/compiled code modules, disassemble the binaries, and convert their formats. Binary program file (.bin) Assembly Object Executable files (.s) files (.o) image file objcopy ld (linker) as objdump (assembler) Memory layout Disassembled Linker code (.lst) script (.ld) Figure 0.1: Assembler Toolchain. A typical GNU (GNU's Not Unix) assembler toolchain includes several programs that interact as shown in Figure 0.1 and perform the following functions: • as is the assembler and it converts human-readable assembly language programs into binary machine language code. It typically takes as input .s assembly files and outputs .o object files. • ld is the linker and it is used to combine multiple object files by resolving their external symbol references and relocating their data sections, and outputting a single executable file. It typically takes as input .o object files and .ld linker scripts and outputs .out executable files. • objcopy is a translation utility that copies and converts the contents of an object file from one format (e.g. .out) another (e.g. .bin). • objdump is a disassembler but it can also display various other information about object files. It is often used to disassemble binary files (e.g.
    [Show full text]
  • Linux from Scratch Version 6.2
    Linux From Scratch Version 6.2 Gerard Beekmans Linux From Scratch: Version 6.2 by Gerard Beekmans Copyright © 1999–2006 Gerard Beekmans Copyright (c) 1999–2006, Gerard Beekmans All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: • Redistributions in any form must retain the above copyright notice, this list of conditions and the following disclaimer • Neither the name of “Linux From Scratch” nor the names of its contributors may be used to endorse or promote products derived from this material without specific prior written permission • Any material derived from Linux From Scratch must contain a reference to the “Linux From Scratch” project THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Linux From Scratch - Version 6.2 Table of Contents Preface
    [Show full text]
  • Anatomy of Cross-Compilation Toolchains
    Embedded Linux Conference Europe 2016 Anatomy of cross-compilation toolchains Thomas Petazzoni free electrons [email protected] Artwork and Photography by Jason Freeny free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 1/1 Thomas Petazzoni I CTO and Embedded Linux engineer at Free Electrons I Embedded Linux specialists. I Development, consulting and training. I http://free-electrons.com I Contributions I Kernel support for the Marvell Armada ARM SoCs from Marvell I Major contributor to Buildroot, an open-source, simple and fast embedded Linux build system I Living in Toulouse, south west of France Drawing from Frank Tizzoni, at Kernel Recipes 2016 free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 2/1 Disclaimer I I am not a toolchain developer. Not pretending to know everything about toolchains. I Experience gained from building simple toolchains in the context of Buildroot I Purpose of the talk is to give an introduction, not in-depth information. I Focused on simple gcc-based toolchains, and for a number of examples, on ARM specific details. I Will not cover advanced use cases, such as LTO, GRAPHITE optimizations, etc. I Will not cover LLVM free electrons - Embedded Linux, kernel, drivers - Development, consulting, training and support. http://free-electrons.com 3/1 What is a cross-compiling toolchain? I A set of tools that allows to build source code into binary code for
    [Show full text]
  • GCC Toolchain Eclipse Setup Guide
    !"#$ % '#((#()*!+,-.#)/$01234 GCC Toolchain Eclipse Setup Guide WP0001 Version 5 September 23, 2020 Copyright © 2017-2020 JBLopen Inc. All rights reserved. No part of this document and any associated software may be reproduced, distributed or transmitted in any form or by any means without the prior written consent of JBLopen Inc. Disclaimer While JBLopen Inc. has made every attempt to ensure the accuracy of the information contained in this publication, JBLopen Inc. cannot warrant the accuracy of completeness of such information. JBLopen Inc. may change, add or remove any content in this publication at any time without notice. All the information contained in this publication as well as any associated material, including software, scripts, and examples are provided “as is”. JBLopen Inc. makes no express or implied warranty of any kind, including warranty of merchantability, noninfringement of intellectual property, or fitness for a particular purpose. In no event shall JBLopen Inc. be held liable for any damage resulting from the use or inability to use the information contained therein or any other associated material. Trademark JBLopen, the JBLopen logo, TREEspanTM and BASEplatformTM are trademarks of JBLopen Inc. All other trademarks are trademarks or registered trademarks of their respective owners. Contents 1 Overview 1 1.1 About Eclipse ............................................. 1 2 Eclipse Setup Guide (Windows) 2 2.1 MSYS2 Installation .......................................... 2 2.2 Eclipse Installation .......................................... 11 2.3 Toolchain Installation ......................................... 16 2.4 Environment Variable Setup ..................................... 17 2.4.1 PATH Environnement Variable Setup ........................... 17 3 Eclipse Setup Guide (Linux) 22 3.1 Eclipse Installation .......................................... 22 3.2 Toolchain Installation ......................................... 27 3.3 GNU Make Installation .......................................
    [Show full text]
  • Transaction / Regular Paper Title
    TFG EN ENGINYERIA INFORMÀTICA, ESCOLA D’ENGINYERIA (EE), UNIVERSITAT AUTÒNOMA DE BARCELONA (UAB) 1 ENIGMA A Python-based file sharing server that ensures privacy, anonymity and confidentiality Xavier Torrent Gorjón Resum—Des dels inicis de la humanitat, la comunicació i la seva privacitat ha estat un camp d'exhaustiva recerca. Això encara és cert avui dia, considerant que la privacitat i seguretat a Internet és motiu de debat diàriament. Aquest projecte apunta a oferir un servidor basat en Python capaç d'emmagatzemar arxius en línia, tot preservant la seva privacitat, confidencialitat i anonimat. Hem iterat sobre diversos dissenys en la nostra cerca d'una implementació que complís tots els nostres requeriments. Finalment hem aconseguit una solució que implica usar dos servidors diferents, un a càrrec de les accions com logins i processos de registre, i l'altre responsable de tractar amb els fitxers. Des de l'esquema teòric hem desenvolupat una aplicació considerant tots els possibles atacs que es podrien fer contra el nostre sistema, centrant-nos en els atacs de man-in-the-middle. Hem completat satisfactòriament el projecte en el calendari previst, oferint un producte que pot complir tots els requeriments de seguretat d'avui en dia, mantenint la senzillesa d'ús. Paraules clau—Privacitat de dades, confidencialitat, anonimat en arxius. Abstract—Ever since the inception of humanity, communication and its privacy has been a field of extensive research. Even today, this premise holds true, as privacy and security on the Internet is a daily topic. This project aims to deliver a Python-based on-line server capable of storing all kinds of files while preserving privacy, confidentiality and anonymity.
    [Show full text]
  • Find Truth in Data 74 $3 7,500 ,000 10 931.5125 640 5 ,859,700
    Find truth in data 2016MOMENTUM REPORT 5,859,700 Average daily traffic at 59th St N/Q/R MTA subway station 10 74 Elevators Noise $37,500,000 last complaints Last sale inspected in 2016 price 3/2/2015 of Thor Equities 640 Student enrollment at PS 112 931.5125 Frequency of Verizon Wireless Antenna #3295904 2016 MOMENTUM REPORT Issue 01 - 02 COMPANY 2014 - 2016 2015 Total Capital Raised Revenue Growth Series B Round $34.6mil 500% $28.2mil Enigma is backed by top-tier Fortune 500 clients including Circle of trusted advisors expands investors including NEA, Two Merck, American Express, to include NEA: Scott Sandell, Sigma Ventures, American Express and EMD are realizing the Managing General Partner; Ventures, Comcast Ventures, immense value of data that Forest Baskett, former CTO of Silicon Crosslink, and The New York Times. is connected and actionable. Graphics; and Greg Papadopoulos, former CTO of Sun Microsystems. 2015 - 2016 Bookings 10X Enigma bookings increased more than tenfold from 2015 to 2016 as the company has partnered with new clients and identified opportunities to expand existing relationships. 2015 2016 GROWTH Our New Flatiron HQ Office Square 13,000 ft2 Footage 867% Enigma Technologies, Inc. was founded in a small Harlem apartment and has since evolved to a 13,000 ft2 150 ft2 space on 5th Avenue to accommodate the fast growing team. 2013 2014 2015 2016 Employee Headcount 65 722% There are now 70 team members supporting a range of functions 9 from Operations and HR to Data Science and Engineering. 2013 2014 2015 2016 2016 MOMENTUM REPORT Issue 01 - 03 TEAM Where We Live Employees boast a wide range of backgrounds, from industrial engineering, computational astrophysics, and neuroscience, to art history, philosophy, and journalism.
    [Show full text]
  • The GNU Toolchain for ARM Targets HOWTO Wookey Chris Rutter Jeff Sutherland Paul Webb
    This chapter contains information on building a GNU toolchain for ARM targets. The GNU Toolchain for ARM targets HOWTO Wookey Chris Rutter Jeff Sutherland Paul Webb This document contains information on setting up a GNU toolchain for ARM targets. It details both some pre-compiled toolchains which you can install, and how to compile your own toolchain, as either a native or a cross-compiler. 1. Credits This document is based on the work of Chris Rutter (now, sadly, deceased) who’s ’Building the GNU toolchain for ARM targets’ document was gospel for some time. It eventually became out of date so Wookey (<[email protected]>) updated it and gave it a substantion rewrite, adding the pre-built toolchain info at the same time. Paul Webb (<[email protected]>) did the initial conversion to DocBook, Phil 1 The GNU Toolchain for ARM targets HOWTO Blundell (<[email protected]>) provided info on the current state of the art and comments on the draft. Jeff Sutherland (<[email protected]>) then fixed the bits that were still wrong, and now maintains the doc, along with Wookey. Thanx to all. As well as being on-line as a stand-alone HOWTO, this document is also available as a chapter of the book: A ’Guide to ARMLinux for Developers’ (http://www.aleph1.co.uk/armlinux/thebook.html) 2 This chapter contains information on building a GNU toolchain for ARM targets. 1. Toolchain overview The toolchain actually consists of a number of components. The main one is the compiler itself gcc, which can be native to the host or a cross-compiler.
    [Show full text]
  • Exploring the Construction of a Domain-Aware Toolchain for High-Performance Computing
    Exploring the Construction of a Domain-Aware Toolchain for High-Performance Computing Patrick McCormick, Christine Sweeney, Nick Moss, Dean Prichard, Samuel K. Gutierrez, Kei Davis, Jamaludin Mohd-Yusof Los Alamos National Laboratory Los Alamos, NM, USA Abstract—The push towards exascale computing has sparked in such a way that we can maintain the benefits of a general- a new set of explorations for providing new productive pro- purpose toolchain but also maintain a domain awareness within gramming environments. While many efforts are focusing on the entire toolchain. Scout is a strict superset of the C and the design and development of domain-specific languages (DSLs), C++ languages and extends the general-purpose toolchain few have addressed the need for providing a fully domain-aware to maintain this domain context throughout the compilation toolchain. Without such domain awareness critical features for process. This step is critical to enable support for a produc- achieving acceptance and adoption, such as debugger support, pose a long-term risk to the overall success of the DSL approach. tive and complete, domain-aware environment for developing, In this paper we explore the use of language extensions to debugging, and profiling applications. design and implement the Scout DSL and a supporting toolchain infrastructure. We highlight how language features and the A. Domain-Specific Languages software design methodologies used within the toolchain play a significant role in providing a suitable environment for DSL Although domain-specific languages have only recently development. become popular in the high-performance computing (HPC) research community, they have been a common part of com- Keywords—Domain Specific Language, Compiler, Debugging, puting for decades [2].
    [Show full text]
  • Migrating to Swift from Flash and Actionscript
    ©Radoslava Leseva Adams & Hristo Lesev Migrating to Swift from Flash and ActionScript Radoslava Leseva Adams Hristo Lesev ©Radoslava Leseva Adams & Hristo Lesev Contents at a Glance About the Authors ...................................................................................................xxi About the Technical Reviewer ..............................................................................xxiii Acknowledgments .................................................................................................xxv Preface ................................................................................................................xxvii ■ Part I: Tool Migration ..........................................................................1 ■ Chapter 1: Setting Up Your Environment ............................................................... 3 ■ Chapter 2: Hello, Xcode! ...................................................................................... 15 ■ Chapter 3: Introducing the Xcode Debugger ....................................................... 39 ■ Chapter 4: Additional Development Tools ............................................................51 ■ Part II: Workfl ow Migration .............................................................. 69 ■ Chapter 5: “Hello, Swift!”—A Tutorial for Building an iOS App ...........................71 ■ Chapter 6: Adding a More Complex UI ...............................................................105 ■ Chapter 7: Concurrency .....................................................................................171
    [Show full text]
  • The Essential Turing: Seminal Writings in Computing, Logic, Philosophy, Artificial Intelligence, and Artificial Life: Plus the Secrets of Enigma
    The Essential Turing: Seminal Writings in Computing, Logic, Philosophy, Artificial Intelligence, and Artificial Life: Plus The Secrets of Enigma B. Jack Copeland, Editor OXFORD UNIVERSITY PRESS The Essential Turing Alan M. Turing The Essential Turing Seminal Writings in Computing, Logic, Philosophy, Artificial Intelligence, and Artificial Life plus The Secrets of Enigma Edited by B. Jack Copeland CLARENDON PRESS OXFORD Great Clarendon Street, Oxford OX2 6DP Oxford University Press is a department of the University of Oxford. It furthers the University’s objective of excellence in research, scholarship, and education by publishing worldwide in Oxford New York Auckland Cape Town Dar es Salaam Hong Kong Karachi Kuala Lumpur Madrid Melbourne Mexico City Nairobi New Delhi Taipei Toronto Shanghai With offices in Argentina Austria Brazil Chile Czech Republic France Greece Guatemala Hungary Italy Japan South Korea Poland Portugal Singapore Switzerland Thailand Turkey Ukraine Vietnam Published in the United States by Oxford University Press Inc., New York © In this volume the Estate of Alan Turing 2004 Supplementary Material © the several contributors 2004 The moral rights of the author have been asserted Database right Oxford University Press (maker) First published 2004 All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by any means, without the prior permission in writing of Oxford University Press, or as expressly permitted by law, or under terms agreed with the appropriate reprographics rights organization. Enquiries concerning reproduction outside the scope of the above should be sent to the Rights Department, Oxford University Press, at the address above.
    [Show full text]