內容簡介
《編程大師智慧(影印版)》的主要特色在於它是多位程式語言創造者的獨家採訪,他們創造的這些程式語言極具歷史意義,對於當下的信息社會產生了重大影響。從這部獨特的採訪集中,你將了解到某些特殊設計決定產生的過程,包括這些先行者當時頭腦中的既定目標、他們不得不做的折衷權衡,以及這些寶貴經驗至今對編程產生了怎樣的影響。
如果你對那些用遠見卓識和努力工作造就計算機產業的人們感興趣的話,那么自然會發現《編程大師智慧(影印版)》是一本令人著迷的好書。
目錄
FOREWORD
PREFACE
1 C++
Design Decisions
Using the Language
OOP and Concurrency
Future
Teaching
2 PYTHON
The Pythonic Way
The Good Programmer
Multiple Pythons
Expedients and Experience
3 APL
Paper and Pencil
Elementary Principles
Parallelism
Legacy
4 FORTH
The Forth Language and Language Design
Hardware
Application Design
5 BASIC
The Goals Behind BASIC
Compiler Design
Language and Programming Practice
Langua~'e Design
Work Goals
6 AWK
The Life of Algorithms
Language Design
Unix and Its Culture
The Role of Documentation
Computer Science
Breeding Little Languages
Designing a New Language
Legacy Culture
Transformative Technologies
Bits Ttiat Change the Universe
Theory and Practice
Waiting for a Breakthrough
Programming by Example
7 LUA
The Power of Scripting
Experience
Language Design
8 HASKELL
A Functional Team
Trajectory of Functional Programming
The Haskell Language
Spreading (Functional) Education
formalismand Evolution
9 ML
The Soundness of Theorems
The Theory of Meaning
Beyond Informatics
10 SQL
A Seminal Paper
The Language
Feedback and Evolution
XQuery and XML
11 OBJECTIVE-C
Eng'ineering Objective-C
Growing a Language
Education and Training
Project Management and Legacy Software
Objective-C and Other Languages
Components, Sand, and Bricks
Quality As an Economic Phenomenon
Education
12 JAVA
Power or Simplicity
A Matter of Taste
Concurrency
Designing a Languae
Feedback Loop
13 C#
Language and Design
Growing a Language
C#
The Future of Computer Science
14 UML
Learning and Teaching
The Role of the People
UML
Knowledge
Be Ready for Change
UsingUML
Layers and Languages
A Bit of Reusability
Symmetric Relationships
UML
Language Design
Training Developers
Creativity, Refinement, and Patterns
15 PERL
The Language of Revolutions
Language
Community
Evolution and Revolution
16 POSTSCRIPT
Designed to Last
Research and Education
Interfaces to Longevity
Standard Wishes
17 EIFFEL
An Inspired Afternoon
Reusability and Genericity
Proofreading Languages
Managing Growth and Evolution
AFTERWORD
CONTRIBUTORS
INDEX
前言
序言
PROGRAMMING LANGUAGE DESIGN IS A FASCINATING TOPIC. There are so many programmerswho think they can design a programming language better than one they are currentlyusing; and there are so many researchers who believe they can design a programming lan-guage better than any that are in current use. Their beliefs are oftenJustified, but few oftheir designs ever leave the designer's bottomdrawer. You will not find them representedin this book.Programming language design is a serious business. Small errors in a language design canbe conducive to large errors in an actual program written in the language, and even smallerrors in programs can have large and extremely costly consequences. The vulnerabilitiesof widely used software have repeatedly allowed attack by malware to cause billions ofdollars of damage to the world economy. The safety and security of programming lan-guages is a recurrent theme of this book.
精彩書摘
This is of course what we have for usual numeric types, such as INTS, doubles, complexnumbers, and mathematical abstractions, such as vectors. This is a most useful notion,which C++ supports for built-in types and for any user-defined type for which we want it.This contrast to Java where built-in types such and char and int follow it, but user-definedtypes do not, and indeed cannot. As in simula, all user-defined types in Java have refer-ence semantics. In C++, a programmer can support either, as the desired semantics of atype requires. C# (incompletely) follows C++ in supporting user-defined types with valuesemantics."General resource management" refers to the popular technique of having a resource (e.g.,a file handle or a lock) owned by an object. If that object is a scoped variable, the lifetimeof the variable puts a maximum limit on the time the resource is held. Typically, a con-structor acquires the resource and the destructor releases it. This is often called RAIIiResource Acquisition Is Initialization) and integrates beautifully with error handlingusing Exceptions. Obviously, not every resource can be handled in this way, but manycan, and for those, resource management becomes implicit and efficient.