loading

Logout succeed

Logout succeed. See you again!

ebook img

The Design and Evolution of C++, First Edition PDF

pages506 Pages
release year1994
file size2.821 MB
languageEnglish

Preview The Design and Evolution of C++, First Edition

The Design and Evolution of C++ Bjarne Stroustrup AT&T Bell Laboratories Murray Hill, New Jersey ADDISON-WESLEY PUBLISHING COMPANY Reading, Massachusetts • Menlo Park, California • New York Don Mills, Ontario • Wokingham, England • Amsterdam • Bonn • Sydney Singapore • Tokyo • Madrid • San Juan • Milan • Paris Library of Congress Cataloging-in-Publication Data Stroustrup, Bjarne. The Design and Evolution of C++ / Bjarne Stroustrup. p. cm. Includes bibliographical references and index. ISBN 0-201-54330-3 1. C++ (Computer program language) I. Title. II. Title: Design and Evolution of C plus plus. QA76.73.C153S79 1994 005.13'3—dc20 93-50758 CIP AT&T Copyright © 1994 by AT&T Bell Labs. 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, photocopying, recording, or otherwise, without the prior written permission of the publisher. Printed in the United States of America. This book was typeset in Times Roman and Courier by the author. 123456789 10-MA-969594 Preface He who does not plow, must write. - Martin A. Hansen The ACM HOPL-2 conference on the History of Programming Languages asked me to write a paper on the history of C++. This seemed a reasonable idea and a bit of an honor, so I started writing. To get a more comprehensive and balanced view of C++'s growth, I asked a few friends from the early days of C++ for their recollections. That caused news of this project to travel through the grapevine. There, the story mutated, and one day I received a message from a friend asking where he could buy my new book on the design of C++. That email message is the real origin of this book. Traditional books about programming and programming languages explain what a language is and how to use it. However, many people are also curious about why a language is the way it is and how it came to be that way. This book answers these last two questions for C++. It explains how C++ evolved from its first design to the lan guage in use today. It describes the key problems, design aims, language ideas, and constraints that shaped C++, and how they changed over time. Naturally, C++ and the ideas about design and programming that shaped it didn't just mutate by themselves. What really evolved was the C++ users' understanding of their practical problems and of the tools needed to help solve them. Consequently, this book also traces the key problems tackled using C++ and the views of the people who tackled them in ways that influenced C++. C++ is still a young language. Some of the issues discussed here are yet unknown to many users. Many implications of decisions described here will not become obvi ous for years to come. This book presents my view of how C++ came about, what it is, and what it ought to be. I hope this will be of help to people trying to understand how best to use C++ and in the continuing evolution of C++. iv Preface The emphasis is on the overall design goals, practical constraints, and people that shaped C++. The key design decisions relating to language features are discussed and put into their historical context. The evolution of C++ is traced from C with Classes through Release 1.0 and 2.0 to the current ANSI/ISO standards work and the explo sion of use, interest, commercial activity, compilers, tools, environments, and libraries. C++'s relationship to C and Simula is discussed in detail. C++'s relation ship to other languages is discussed briefly. The design of major language facilities such as classes, inheritance, abstract classes, overloading, memory management, tem plates, exception handling, run-time type information, and namespaces are discussed in some detail. The primary aim of this book is to give C++ programmers a better idea of the background and fundamental concepts of their language and hopefully to inspire them to experiment with ways of using C++ that are new to them. This book can also be read by experienced programmers and students of programming languages and might help them decide whether using C++ might be worth their while. Acknowledgments I am very grateful to Steve Clamage, Tony Hansen, Lorraine Juhl, Peter Juhl, Brian Kernighan, Lee Knight, Doug Lea, Doug McIlroy, Barbara Moo, Jens Palsberg, Steve Rumsby, and Christopher Skelly for reading complete drafts of this book. Their con structive comments caused major changes to the contents and organization of this book. Steve Buroff, Martin Carroll, Sean Corfield, Tom Hagelskjær, Rick Hollin- beck, Dennis Mancl, and Stan Lippman helped by commenting on selected chapters. Also, thanks to Archie Lachner for asking for this book before I had thought of writ ing it. Naturally, I owe thanks to the many people who helped make C++. In a sense, this book is a tribute to them and some of their names can be found throughout the chap ters and in the index. Should I single out individuals, it must be Brian Kernighan, Andrew Koenig, Doug McIlroy, and Jonathan Shopiro, each of whom has been a steady source of help, encouragement, and ideas for more than a decade. Also, thanks to Kristen Nygaard and Dennis Ritchie as the designers of Simula and C from which the key ingredients of C++ were borrowed. Over the years, I have come to appreciate them not only as brilliant and practical language designers, but also as gentlemen and thoroughly likable individuals. Murray Hill, New Jersey Bjarne Stroustrup Contents Preface iii Acknowledgments iv Contents v Notes to the Reader 1 Introduction 1 How to Read this Book 2 C++ Timeline 4 Focus on Use and Users 4 Programming Languages 5 References 7 Part I: 17 The Prehistory of C++ 19 1.1 Simula and Distributed Systems 19 1.2 C and Systems Programming 22 1.3 General Background 23 vi Contents C with Classes 27 2.1 The Birth of C with Classes 27 2.2 Feature overview 29 2.3 Classes 30 2.4 Run-Time Efficiency 32 2.5 The Linkage Model 34 2.6 Static Type Checking 40 2.7 Why C? 43 2.8 Syntax Problems 45 2.9 Derived Classes 49 2.10 The Protection Model 53 2.11 Run-Time Guarantees 56 2.12 Minor Features 58 2.13 Features Considered, but not Provided 59 2.14 Work Environment 60 The Birth of C++ 63 3.1 From C with Classes to C++ 63 3.2 Aims 65 3.3 Cfront 66 3.4 Language Features 71 3.5 Virtual Functions 72 3.6 Overloading 78 3.7 References 85 3.8 Constants 89 3.9 Memory Management 91 3.10 Type Checking 92 3.11 Minor Features 93 3.12 Relationship to Classic C 100 3.13 Tools for Language Design 103 3.14 The C++ Programming Language (1st edition) 105 3.15 The Whatis? Paper 106 C++ Language Design Rules 109 4.1 Rules and Principles 109 4.2 General Rules 110 4.3 Design Support Rules 114 4.4 Language-Technical Rules 117 4.5 Low-Level Programming Support Rules 120 4.6 A Final Word 122 Contents vii Chronology 1985-1993 123 5.1 Introduction 123 5.2 Release 2.0 124 5.3 The Annotated Reference Manual 126 5.4 ANSI and ISO Standardization 128 Standardization 133 6.1 What is a Standard? 133 6.2 How does the Committee Operate? 136 6.3 Clarifications 138 6.4 Extensions 147 6.5 Examples of Proposed Extensions 153 Interest and Use 163 7.1 The Explosion in Interest and Use 163 7.2 Teaching and Learning C++ 168 7.3 Users and Applications 173 7.4 Commercial Competition 175 Libraries 181 8.1 Introduction 181 8.2 C++ Library Design 182 8.3 Early Libraries 184 8.4 Other Libraries 191 8.5 A Standard Library 194 Looking Ahead 195 9.1 Introduction 195 9.2 Retrospective 195 9.3 Only a Bridge? 200 9.4 What Will Make C++ Much More Effective? 205 viii Contents Part II: 209 Memory Management 211 10.1 Introduction 211 10.2 Separating Allocation and Initialization 212 10.3 Array Allocation 213 10.4 Placement 214 10.5 Deallocation Problems 216 10.6 Memory Exhaustion 218 10.7 Automatic Garbage Collection 219 Overloading 223 11.1 Introduction 223 11.2 Overload Resolution 224 11.3 Type-Safe Linkage 232 11.4 Object Creation and Copying 237 11.5 Notational Convenience 241 11.6 Adding Operators to C++ 247 11.7 Enumerations 253 Multiple Inheritance 257 12.1 Introduction 257 12.2 Ordinary Base Classes 258 12.3 Virtual Base Classes 259 12.4 The Object Layout Model 264 12.5 Method Combination 268 12.6 The Multiple Inheritance Controversy 269 12.7 Delegation 272 12.8 Renaming 273 12.9 Base and Member Initializers 275 Class Concept Refinements 277 13.1 Introduction 277 13.2 Abstract Classes 277 13.3 const Member Functions 284 13.4 Static Member Functions 288 13.5 Nested Classes 289 13.6 Inherited:: 290 Contents ix 13.7 Relaxation of Overriding Rules 293 13.8 Multi-methods 297 13.9 Protected Members 301 13.10 Improved Code Generation 302 13.11 Pointers to Members 303 Casting 305 14.1 Major Extensions 305 14.2 Run-Time Type Information 306 14.3 A New Cast Notation 327 Templates 337 15.1 Introduction 337 15.2 Templates 338 15.3 Class Templates 341 15.4 Constraints on Template Arguments 343 15.5 Avoiding Code Replication 346 15.6 Function Templates 348 15.7 Syntax 355 15.8 Composition Techniques 356 15.9 Template Class Relationships 360 15.10 Template Instantiation 365 15.11 Implications of Templates 378 Exception Handling 383 16.1 Introduction 383 16.2 Aims and Assumptions 384 16.3 Syntax 385 16.4 Grouping 386 16.5 Resource Management 388 16.5 Resumption vs. Termination 390 16.5 Asynchronous Events 393 16.6 Multi-level Propagation 394 16.7 Static Checking 395 16.8 Invariants 397 Namespaces 399 17.1 Introduction 399

See more

The list of books you might like