SKIP THE SHIPPING
Use code NOSHIP during checkout to save 40% on eligible eBooks, now through January 5. Shop now.
This eBook includes the following formats, accessible from your Account page after purchase:
EPUB The open industry format known for its reflowable content and usability on supported mobile devices.
PDF The popular standard, used most often with the free Acrobat® Reader® software.
This eBook requires no passwords or activation to read. We customize your eBook by discreetly watermarking it with your name, making it uniquely yours.
Also available in other formats.
Register your product to gain access to bonus material or receive a coupon.
D is a programming language built to help programmers address the challenges of modern software development. It does so by fostering modules interconnected through precise interfaces, a federation of tightly integrated programming paradigms, language-enforced thread isolation, modular type safety, an efficient memory model, and more.
The D Programming Language is an authoritative and comprehensive introduction to D. Reflecting the author’s signature style, the writing is casual and conversational, but never at the expense of focus and pre¿cision. It covers all aspects of the language (such as expressions, statements, types, functions, contracts, and modules), but it is much more than an enumeration of features.
Inside the book you will find
Written for the working programmer, The D Programming Language not only introduces the D language—it presents a compendium of good practices and idioms to help both your coding with D and your coding in general.
Foreword by Walter Bright xv
Foreword by Scott Meyers xix
Preface xxiii
Chapter 1: “D”iving In 1
1.1 Numbers and Expressions 3
1.2 Statements 5
1.3 Function Basics 6
1.4 Arrays and Associative Arrays 7
1.5 Basic Data Structures 14
1.6 Interfaces and Classes 20
1.7 Values versus References 25
1.8 Summary 27
Chapter 2: Basic Types. Expressions 29
2.1 Symbols 30
2.2 Literals 32
2.3 Operators 42
2.4 Summary and Quick Reference 61
Chapter 3: Statements 65
3.1 The Expression Statement 65
3.2 The Compound Statement 66
3.3 The if Statement 67
3.4 The static if Statement 68
3.5 The switch Statement 71
3.6 The final switch Statement 72
3.7 Looping Statements 73
3.8 The goto Statement 78
3.9 The with Statement 80
3.10 The return Statement 81
3.11 The throw and try Statements 81
3.12 The mixin Statement 82
3.13 The scope Statement 84
3.14 The synchronized Statement 88
3.15 The asm Statement 89
3.16 Summary and Quick Reference 89
Chapter 4: Arrays, Associative Arrays, and Strings 93
4.1 Dynamic Arrays 93
4.2 Fixed-Size Arrays 107
4.3 Multidimensional Arrays 111
4.4 Associative Arrays 114
4.5 Strings 118
4.6 Arrays’ Maverick Cousin: The Pointer 124
4.7 Summary and Quick Reference 126
Chapter 5: Data and Functions. Functional Style 131
5.1 Writing and unittesting a Simple Function 131
5.2 Passing Conventions and Storage Classes 134
5.3 Type Parameters 138
5.4 Signature Constraints 140
5.5 Overloading 142
5.6 Higher-Order Functions. Function Literals 148
5.7 Nested Functions 150
5.8 Closures 152
5.9 Beyond Arrays. Ranges. Pseudo Members 154
5.10 Variadic Functions 159
5.11 Function Attributes 165
5.12 Compile-Time Evaluation 169
Chapter 6: Classes. Object-Oriented Style 175
6.1 Classes 175
6.2 Object Names Are References 177
6.3 It’s an Object’s Life 181
6.4 Methods and Inheritance 190
6.5 Class-Level Encapsulation with static Members 196
6.6 Curbing Extensibility with final Methods 197
6.7 Encapsulation 199
6.8 One Root to Rule Them All 203
6.9 Interfaces 212
6.10 Abstract Classes 218
6.11 Nested Classes 222
6.12 Multiple Inheritance 226
6.13 Multiple Subtyping 230
6.14 Parameterized Classes and Interfaces 233
6.15 Summary 237
Chapter 7: Other User-Defined Types 239
7.1 structs 240
7.2 unions 270
7.3 Enumerated Values 272
7.4 alias 276
7.5 Parameterized Scopes with template 278
7.6 Injecting Code with mixin templates 282
7.7 Summary and Reference 285
Chapter 8: Type Qualifiers 287
8.1 The immutable Qualifier 288
8.2 Composing with immutable 291
8.3 immutable Parameters and Methods 292
8.4 immutable Constructors 293
8.5 Conversions involving immutable 295
8.6 The const Qualifier 297
8.7 Interaction between const and immutable 298
8.8 Propagating a Qualifier from Parameter to Result 299
8.9 Summary 300
Chapter 9: Error Handling 301
9.1 throwing and catching 301
9.2 Types 302
9.3 finally clauses 306
9.4 nothrow Functions and the Special Nature of Throwable 307
9.5 Collateral Exceptions 307
9.6 Stack Unwinding and Exception-Safe Code 309
9.7 Uncaught Exceptions 312
Chapter 10: Contract Programming 313
10.1 Contracts 314
10.2 Assertions 316
10.3 Preconditions 317
10.4 Postconditions 319
10.5 Invariants 321
10.6 Skipping Contract Checks. Release Builds 324
10.7 Contracts: Not for Scrubbing Input 327
10.8 Contracts and Inheritance 329
10.9 Contracts in Interfaces 334
Chapter 11: Scaling Up 337
11.1 Packages and Modules 337
11.2 Safety 353
11.3 Module Constructors and Destructors 356
11.4 Documentation Comments 358
11.5 Interfacing with C and C++ 359
11.6 deprecated 359
11.7 version Declarations 360
11.8 debug Declarations 361
11.9 D’s Standard Library 361
Chapter 12: Operator Overloading 365
12.1 Overloading Operators 366
12.2 Overloading Unary Operators 367
12.3 Overloading Binary Operators 371
12.4 Overloading Comparison Operators 375
12.5 Overloading Assignment Operators 376
12.6 Overloading Indexing Operators 377
12.7 Overloading Slicing Operators 379
12.8 The $ Operator 379
12.9 Overloading foreach 380
12.10 Defining Overloaded Operators in Classes 383
12.11 And Now for Something Completely Different: opDispatch 384
12.12 Summary and Quick Reference 388
Chapter 13: Concurrency 391
13.1 Concurrentgate 392
13.2 A Brief History of Data Sharing 394
13.3 Look, Ma, No (Default) Sharing 397
13.4 Starting a Thread 399
13.5 Exchanging Messages between Threads 401
13.6 Pattern Matching with receive 403
13.7 File Copying—with a Twist 406
13.8 Thread Termination 407
13.9 Out-of-Band Communication 409
13.10 Mailbox Crowding 410
13.11 The shared Type Qualifier 411
13.12 Operations with shared Data and Their Effects 413
13.13 Lock-Based Synchronization with synchronized classes 414
13.14 Field Typing in synchronized classes 419
13.15 Deadlocks and the synchronized Statement 424
13.16 Lock-Free Coding with shared classes 426
13.17 Summary 431
Bibliography 433
Index 439