Oral History of Brian Kernighan
Total Page:16
File Type:pdf, Size:1020Kb
Load more
Recommended publications
-
Reasoning About Programs Need: Definition of Works/Correct: a Specification (And Bugs) but Programs Fail All the Time
Good programs, broken programs? Goal: program works (does not fail) Reasoning about Programs Need: definition of works/correct: a specification (and bugs) But programs fail all the time. Why? A brief interlude on 1. Misuse of your code: caller did not meet assumptions specifications, assertions, and debugging 2. Errors in your code: mistake causes wrong computation 3. Unpredictable external problems: • Out of memory, missing file, network down, … • Plan for these problems, fail gracefully. 4. Wrong or ambiguous specification, implemented correctly Largely based on material from University of Washington CSE 331 A Bug's Life, ca. 1947 A Bug's Life Defect: a mistake in the code Think 10 per 1000 lines of industry code. We're human. -- Grace Hopper Error: incorrect computation Because of defect, but not guaranteed to be visible Failure: observable error -- program violates its specification Crash, wrong output, unresponsive, corrupt data, etc. Time / code distance between stages varies: • tiny (<second to minutes / one line of code) • or enormous (years to decades to never / millons of lines of code) "How to build correct code" Testing 1. Design and Verify Make correctness more likely or provable from the start. • Can show that a program has an error. 2. Program Defensively • Can show a point where an error causes a failure. Plan for defects and errors. • Cannot show the error that caused the failure. • make testing more likely to reveal errors as failures • Cannot show the defect that caused the error. • make debugging failures easier 3. Test and Validate Try to cause failures. • Can improve confidence that the sorts of errors/failures • provide evidence of defects/errors targeted by the tests are less likely in programs similar • or increase confidence of their absence to the tests. -
Oral History of Fernando Corbató
Oral History of Fernando Corbató Interviewed by: Steven Webber Recorded: February 1, 2006 West Newton, Massachusetts CHM Reference number: X3438.2006 © 2006 Computer History Museum Oral History of Fernando Corbató Steven Webber: Today the Computer History Museum Oral History Project is going to interview Fernando J. Corbató, known as Corby. Today is February 1 in 2006. We like to start at the very beginning on these interviews. Can you tell us something about your birth, your early days, where you were born, your parents, your family? Fernando Corbató: Okay. That’s going back a long ways of course. I was born in Oakland. My parents were graduate students at Berkeley and then about age 5 we moved down to West Los Angeles, Westwood, where I grew up [and spent] most of my early years. My father was a professor of Spanish literature at UCLA. I went to public schools there in West Los Angeles, [namely,] grammar school, junior high and [the high school called] University High. So I had a straightforward public school education. I guess the most significant thing to get to is that World War II began when I was in high school and that caused several things to happen. I’m meandering here. There’s a little bit of a long story. Because of the wartime pressures on manpower, the high school went into early and late classes and I cleverly saw that I could get a chance to accelerate my progress. I ended up taking both early and late classes and graduating in two years instead of three and [thereby] got a chance to go to UCLA in 1943. -
GNU M4, Version 1.4.7 a Powerful Macro Processor Edition 1.4.7, 23 September 2006
GNU M4, version 1.4.7 A powerful macro processor Edition 1.4.7, 23 September 2006 by Ren´eSeindal This manual is for GNU M4 (version 1.4.7, 23 September 2006), a package containing an implementation of the m4 macro language. Copyright c 1989, 1990, 1991, 1992, 1993, 1994, 2004, 2005, 2006 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled “GNU Free Documentation License.” i Table of Contents 1 Introduction and preliminaries ................ 3 1.1 Introduction to m4 ............................................. 3 1.2 Historical references ............................................ 3 1.3 Invoking m4 .................................................... 4 1.4 Problems and bugs ............................................. 8 1.5 Using this manual .............................................. 8 2 Lexical and syntactic conventions ............ 11 2.1 Macro names ................................................. 11 2.2 Quoting input to m4........................................... 11 2.3 Comments in m4 input ........................................ 11 2.4 Other kinds of input tokens ................................... 12 2.5 How m4 copies input to output ................................ 12 3 How to invoke macros........................ -
UNIX Reference Card
UNlxt Reference Card distributed by Computing Information Service BELL LABORATORIES Murray Hill, N. J. 07974 compiled by Lorinda Cherry Second Edition March, 1979 TABLE OF CO~TEJIo"TS la. GENERAL UNIX COMMANDS adb general purpose debugger ...S. 21 ar archive & library maimainer. ..S as assembler. ..S at execute commands at designated time S awk pattern scanning & processing language S bas basic ...S basename strip filename affixes ...5 be arbitrary precision interactive language ... S calendar reminder service ... 5 cat concatenate & print...5 cb C program beautifier ...no arguments cc C compiler ...5 cd change working directory 5 chgrp change groupoid of files 6 . chmod change mode of files S chown change owner of files 6 cmp compare 2 files ...6 col filter reverse line feeds ...6 comm print" lines common to 2 files ...6 cp copy ...6 crypt encode/decode 6 date print or set date 6 de desk calculator 6 dd convert & copy a file ...6 deroff remove text formatting commands ...6 diff differential file comparator. ..6 dUO 3-way differential file comparison ...6 du summarize disk usage ...6 echo echo arguments ...7 ed text editor. ..7, 20 egrep full regular expression pattern search ...8 enroll enroll in secret mail...no arguments eqn typeset mathematics ...7. 29 expr evaluate arguments as expressions ...7 fT7 Fortran 77 compiler ... 7 factor factor a number ...7 false truth value ...no arguments fgrep search for a fixed pauern ...8 file determine file type ...7 find find files ...7 graph draw a graph ...7 grep search a file for a pattern ...8 join relational database operator. -
GNU M4, Version 1.4.19 a Powerful Macro Processor Edition 1.4.19, 28 May 2021
GNU M4, version 1.4.19 A powerful macro processor Edition 1.4.19, 28 May 2021 by Ren´eSeindal, Fran¸coisPinard, Gary V. Vaughan, and Eric Blake ([email protected]) This manual (28 May 2021) is for GNU M4 (version 1.4.19), a package containing an implementation of the m4 macro language. Copyright c 1989{1994, 2004{2014, 2016{2017, 2020{2021 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled \GNU Free Documentation License." i Table of Contents 1 Introduction and preliminaries ::::::::::::::::: 3 1.1 Introduction to m4 :::::::::::::::::::::::::::::::::::::::::::::: 3 1.2 Historical references :::::::::::::::::::::::::::::::::::::::::::: 3 1.3 Problems and bugs ::::::::::::::::::::::::::::::::::::::::::::: 4 1.4 Using this manual :::::::::::::::::::::::::::::::::::::::::::::: 5 2 Invoking m4::::::::::::::::::::::::::::::::::::::: 7 2.1 Command line options for operation modes ::::::::::::::::::::: 7 2.2 Command line options for preprocessor features ::::::::::::::::: 8 2.3 Command line options for limits control ::::::::::::::::::::::: 10 2.4 Command line options for frozen state ::::::::::::::::::::::::: 11 2.5 Command line options for debugging :::::::::::::::::::::::::: 11 2.6 Specifying input files on the command line ::::::::::::::::::::: -
Programmer's Manual. the Documents Here Are Grouped
Programmer’s Manual. The documents here are grouped roughly into the areas of basics, editing, language tools, document preparation, and system maintenance. Further general information may be found in the Bell System Tech- nical Journal special issue on UNIX, July-August, 1978. Many of the documents cited within this volume as Bell Laboratories internal memoranda or Computing Science Technical Reports (CSTR) are also contained here. These documents contain occasional localisms, typically references to other operating systems like GCOS and IBM. In all cases, such references may be safely ignored by UNIX users. General Works 1.7th Edition UNIX — Summary. A concise summary of the facilities available on UNIX. 2.The UNIX Time-Sharing System. D. M. Ritchie and K. Thompson. The original UNIX paper, reprinted from CACM. Getting Started 3.UNIX for Beginners — Second Edition. B. W. Kernighan. An introduction to the most basic use of the system. 4.A Tutorial Introduction to the UNIX Text Editor. B. W. Kernighan. An easy way to get started with the editor. 5.Advanced Editing on UNIX. B. W. Kernighan. The next step. 6.An Introduction to the UNIX Shell. S. R. Bourne. An introduction to the capabilities of the command interpreter, the shell. 7.Learn — Computer Aided Instruction on UNIX. M. E. Lesk and B. W. Kernighan. Describes a computer-aided instruction program that walks new users through the basics of files, the edi- tor, and document preparation software. Document Preparation 8.Typing Documents on the UNIX System. M. E. Lesk. Describes the basic use of the formatting tools. Also describes ‘‘−ms’’, a standardized package of format- ting requests that can be used to lay out most documents (including those in this volume). -
The AWK Programming Language
The Programming ~" ·. Language PolyAWK- The Toolbox Language· Auru:o V. AHo BRIAN W.I<ERNIGHAN PETER J. WEINBERGER TheAWK4 Programming~ Language TheAWI(. Programming~ Language ALFRED V. AHo BRIAN w. KERNIGHAN PETER J. WEINBERGER AT& T Bell Laboratories Murray Hill, New Jersey A ADDISON-WESLEY•• PUBLISHING COMPANY Reading, Massachusetts • Menlo Park, California • New York Don Mills, Ontario • Wokingham, England • Amsterdam • Bonn Sydney • Singapore • Tokyo • Madrid • Bogota Santiago • San Juan This book is in the Addison-Wesley Series in Computer Science Michael A. Harrison Consulting Editor Library of Congress Cataloging-in-Publication Data Aho, Alfred V. The AWK programming language. Includes index. I. AWK (Computer program language) I. Kernighan, Brian W. II. Weinberger, Peter J. III. Title. QA76.73.A95A35 1988 005.13'3 87-17566 ISBN 0-201-07981-X This book was typeset in Times Roman and Courier by the authors, using an Autologic APS-5 phototypesetter and a DEC VAX 8550 running the 9th Edition of the UNIX~ operating system. -~- ATs.T Copyright c 1988 by Bell Telephone Laboratories, Incorporated. 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, electronic, mechanical, photocopy ing, recording, or otherwise, without the prior written permission of the publisher. Printed in the United States of America. Published simultaneously in Canada. UNIX is a registered trademark of AT&T. DEFGHIJ-AL-898 PREFACE Computer users spend a lot of time doing simple, mechanical data manipula tion - changing the format of data, checking its validity, finding items with some property, adding up numbers, printing reports, and the like. -
The Evolution of the Unix Time-Sharing System*
The Evolution of the Unix Time-sharing System* Dennis M. Ritchie Bell Laboratories, Murray Hill, NJ, 07974 ABSTRACT This paper presents a brief history of the early development of the Unix operating system. It concentrates on the evolution of the file system, the process-control mechanism, and the idea of pipelined commands. Some attention is paid to social conditions during the development of the system. NOTE: *This paper was first presented at the Language Design and Programming Methodology conference at Sydney, Australia, September 1979. The conference proceedings were published as Lecture Notes in Computer Science #79: Language Design and Programming Methodology, Springer-Verlag, 1980. This rendition is based on a reprinted version appearing in AT&T Bell Laboratories Technical Journal 63 No. 6 Part 2, October 1984, pp. 1577-93. Introduction During the past few years, the Unix operating system has come into wide use, so wide that its very name has become a trademark of Bell Laboratories. Its important characteristics have become known to many people. It has suffered much rewriting and tinkering since the first publication describing it in 1974 [1], but few fundamental changes. However, Unix was born in 1969 not 1974, and the account of its development makes a little-known and perhaps instructive story. This paper presents a technical and social history of the evolution of the system. Origins For computer science at Bell Laboratories, the period 1968-1969 was somewhat unsettled. The main reason for this was the slow, though clearly inevitable, withdrawal of the Labs from the Multics project. To the Labs computing community as a whole, the problem was the increasing obviousness of the failure of Multics to deliver promptly any sort of usable system, let alone the panacea envisioned earlier. -
Computer Science Undergraduate Program
Princeton Computer Science Undergraduate Program JP Singh and Brian Kernighan Directors of Undergraduate Studies March, 2020 Why Computer Science? • it's fun and it's interesting • computers are a part of everything – daily life: mail, web, Facebook, phones, ... – lots of hidden computing too: phones, cars, ... – unlimited applications, always something new • so everything is a potential topic for – CS courses – independent work – summer jobs – permanent jobs, doing a startup – grad school What do majors do next? • software companies both large and small • Wall St, consulting • grad school in CS • grad school in law, medicine, business, ... • their own startups • teaching • ... Princeton Computer Science Faculty • 45 regular faculty, 13 lecturers – theory – operating systems & networks – programming languages – graphics & vision – artificial intelligence, machine learning – computational biology – security & privacy, policy, … – ... Other important people Director of Undergraduate Director of Undergraduate Studies Studies - Pre-majors - Ugrad Curriculum - Non-majors - Honors, Awards - Study Abroad - Certificate Program - Transferring In to COS Brian Kernighan JP Singh Current Students • COS is the most popular major with 454 concentrators • 162 seniors – 128 BSE, 34 AB – 53 females (33%) • 171 juniors – 114 BSE, 57 AB – 62 females (36%) • 121 sophomores (BSEs only) – 51 females (42%) – AB sophomores declare in late April • COS 126 is Princeton’s most popular course – Nearly 70% of all students take at least one CS course 6 Undergrad CS -
Time-Sharing System
UNIXTM TIME-SHARING SYSTEM: UNIX PROGRAMMER'S MANUAL Seventh Edition, Volume 2B January, 1979 Bell Telephone Laboratories, Incorporated Murray Hill, New Jersey Yacc: Yet Another Compiler-Compiler Stephen C. Johnson Bell Laboratories Murray Hill, New Jersey 07974 ABSTRACT Computer program input generally has some structure; in fact, every computer program that does input can be thought of as de®ning an ``input language'' which it accepts. An input language may be as complex as a programming language, or as sim- ple as a sequence of numbers. Unfortunately, usual input facilities are limited, dif®cult to use, and often are lax about checking their inputs for validity. Yacc provides a general tool for describing the input to a computer program. The Yacc user speci®es the structures of his input, together with code to be invoked as each such structure is recognized. Yacc turns such a speci®cation into a subroutine that handles the input process; frequently, it is convenient and appropriate to have most of the ¯ow of control in the user's application handled by this subroutine. The input subroutine produced by Yacc calls a user-supplied routine to return the next basic input item. Thus, the user can specify his input in terms of individual input characters, or in terms of higher level constructs such as names and numbers. The user-supplied routine may also handle idiomatic features such as comment and con- tinuation conventions, which typically defy easy grammatical speci®cation. Yacc is written in portable C. The class of speci®cations accepted is a very gen- eral one: LALR(1) grammars with disambiguating rules. -
Lab Manual of Compiler Design
LAB MANUAL OF COMPILER DESIGN Department of Electronics & Computer Engg. Dronacharya College Of Engineering Khentawas, Gurgaon – 123506 LIST OF EXPERIMENTS S. No. AIM OF EXPERIMENT 1. STUDY OF LEX AND YACC TOOLS. 2 TO CONVERT REGULAR EXPRESSION INTO NFA. 3 WAP TO FIND FIRST IN CFG. 4. WAP TO FIND STRING IS KEYWORD OR NOT. 5. WAP TO FIND STRING IS IDENTIFIER OR NOT. 6. WAP TO FIND STRING IS CONSTANT OR NOT. 7. WAP TO COUNT NO. OF WHITESPACES AND NEWLINE. 8. WAP TO GENERATE TOKENS FOR THE GIVEN GRAMMER. 9. AN ALGO TO CONVERT NFA TO DFA. 10. AN ALGO FOR MINIMIZING OF DFA. 11. WAP TO CHECK STRING IS IN GRAMMER OR NOT. 12. WAP TO CALCULATE LEADING FOR ALL NON TERMINALS . 13. WAP TO CALCULATE TRAILING FOR ALL NON TERMINALS . PROGRAM NO:-1 PRACTICE OF LEX/YACC OF COMPILER WRITING A compiler or interpreter for a programming language is often decomposed into two parts: 1. Read the source program and discover its structure. 2. Process this structure, e.g. to generate the target program. Lex and Yacc can generate program fragments that solve the first task. The task of discovering the source structure again is decomposed into subtasks: 1. Split the source file into tokens (Lex). 2. Find the hierarchical structure of the program (Yacc). Lex - A Lexical Analyzer Generator Lex is a program generator designed for lexical processing of character input streams. It accepts a high-level, problem oriented specification for character string matching, and produces a program in a general purpose language which recognizes regular expressions. -
Turing Award • John Von Neumann Medal • NAE, NAS, AAAS Fellow
15-712: Advanced Operating Systems & Distributed Systems A Few Classics Prof. Phillip Gibbons Spring 2021, Lecture 2 Today’s Reminders / Announcements • Summaries are to be submitted via Canvas by class time • Announcements and Q&A are via Piazza (please enroll) • Office Hours: – Prof. Phil Gibbons: Fri 1-2 pm & by appointment – TA Jack Kosaian: Mon 1-2 pm – Zoom links: See canvas/Zoom 2 CS is a Fast Moving Field: Why Read/Discuss Old Papers? “Those who cannot remember the past are condemned to repeat it.” - George Santayana, The Life of Reason, Volume 1, 1905 See what breakthrough research ideas look like when first presented 3 The Rise of Worse is Better Richard Gabriel 1991 • MIT/Stanford style of design: “the right thing” – Simplicity in interface 1st, implementation 2nd – Correctness in all observable aspects required – Consistency – Completeness: cover as many important situations as is practical • Unix/C style: “worse is better” – Simplicity in implementation 1st, interface 2nd – Correctness, but simplicity trumps correctness – Consistency is nice to have – Completeness is lowest priority 4 Worse-is-better is Better for SW • Worse-is-better has better survival characteristics than the-right-thing • Unix and C are the ultimate computer viruses – Simple structures, easy to port, required few machine resources to run, provide 50-80% of what you want – Programmer conditioned to sacrifice some safety, convenience, and hassle to get good performance and modest resource use – First gain acceptance, condition users to expect less, later