© kenneth c. louden, 20031 chapter 3 - language design principles programming languages: principles...
TRANSCRIPT
![Page 1: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/1.jpg)
© Kenneth C. Louden, 2003 1
Chapter 3 - Language Design Chapter 3 - Language Design PrinciplesPrinciples
Programming Languages:
Principles and Practice, 2nd Ed.
Kenneth C. Louden
![Page 2: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/2.jpg)
Chapter 3 K. Louden, Programming Languages 2
The language design problemThe language design problem
Language design is difficult, and success is hard to predict:– Pascal a success, Modula-2 a failure– Algol60 a success, Algol68 a failure– FORTRAN a success, PL/I a failure
Nevertheless, there have been some basic goals or principles that have been important over the years, and that can contribute to success.
![Page 3: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/3.jpg)
Chapter 3 K. Louden, Programming Languages 3
EfficiencyEfficiency
The “first” goal (FORTRAN): execution efficiency.
Still an important goal in some settings (C++, C).
Many other criteria can be interpreted from the point of view of efficiency:– programming efficiency: writability,
reliability (security).–maintenance efficiency: readability.
![Page 4: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/4.jpg)
Chapter 3 K. Louden, Programming Languages 4
Features that aid efficiency of Features that aid efficiency of executionexecution
Static data types allow efficient allocation and access.
Manual memory management avoids overhead of “garbage collection”.
Simple semantics allow for simple structure of running programs (simple environments - Chapter 8).
![Page 5: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/5.jpg)
Chapter 3 K. Louden, Programming Languages 5
Features that aid other design Features that aid other design goals (note efficiency conflicts):goals (note efficiency conflicts):Writability, expressiveness: no static
data types (variables can hold anything, no need for type declarations).
Reliability, writability, readability: automatic memory management (no need for pointers).
Expressiveness, writability, readability: more complex semantics, allowing greater abstraction.
![Page 6: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/6.jpg)
Chapter 3 K. Louden, Programming Languages 6
Internal consistency of a Internal consistency of a language design: Regularitylanguage design: Regularity Regularity is a measure of how well a
language integrates its features, so that there are no unusual restrictions, interactions, or behavior.
Regularity issues can often be placed in subcategories:– Generality: are constructs general enough? (Or
too general?)– Orthogonality: are there strange interactions?– Uniformity: Do similar things look the same, and
do different things look different?
![Page 7: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/7.jpg)
Chapter 3 K. Louden, Programming Languages 7
Regularity examples from CRegularity examples from CFunctions are not general: there are
no local functions (simplicity of environment).
Declarations are not uniform: data declarations must be followed by a semicolon, function declarations must not.
Parameters are not orthogonal with data type: arrays are references, other parameters are copies.
![Page 8: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/8.jpg)
Chapter 3 K. Louden, Programming Languages 8
What about Java?What about Java? Are function declarations non-general?– There are no functions, so a non-issue. (Well,
what about static methods?)
Are class declarations non-general?– No multiple inheritance (but there is a reason:
complexity of environment).– Java has a good replacement: interface
inheritance.
Do declarations require semicolons?– Local variables do, but is that an issue? (Not
really - they look like statements.)
![Page 9: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/9.jpg)
Chapter 3 K. Louden, Programming Languages 9
Java regularity, continuedJava regularity, continued Are some parameters references, others
not?– Yes: objects are references, simple data are
copies.– This is a result of the non-uniformity of data in
Java, in which not every piece of data is an object.
– The reason is efficiency: simple data have fast access.
What is the worst non-regularity in Java?– My vote: arrays. But there are excuses.
![Page 10: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/10.jpg)
Chapter 3 K. Louden, Programming Languages 10
Other design principlesOther design principles Simplicity: make things as simple as
possible, but not simpler. (Pascal, C) Expressiveness: make it possible to
express conceptual abstractions directly and simply. (Scheme)
Extensibility: allow the programmer to extend the language in various ways. (Scheme, C++)
Security: programs cannot do unexpected damage. (Java)
![Page 11: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/11.jpg)
Chapter 3 K. Louden, Programming Languages 11
Other design principles (cont.)Other design principles (cont.) Preciseness: having a definition that can
answer programmers and implementors questions. (Most languages today, but only one has a mathematical definition: ML)
Machine-independence: should run the same on any machine. (Java)
Consistent with accepted notations. (Most languages today, but not Smalltalk & Perl)
Restrictability: a programmer can program effectively in a subset of the full language. (C++: avoids runtime penalties)
![Page 12: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/12.jpg)
Chapter 3 K. Louden, Programming Languages 12
C++ case studyC++ case study
Thanks to Bjarne Stroustrup, C++ is not only a great success story, but also the best-documented language development effort in history:– 1997: The C++ Programming Language,
3rd Edition (Addison-Wesley).– 1994: The Design and Evolution of C++
(Addison-Wesley).– 1993: A History of C++ 1979-1991,
SIGPLAN Notices 28(3).
![Page 13: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/13.jpg)
Chapter 3 K. Louden, Programming Languages 13
Major C++ design goalsMajor C++ design goals
OO features: class, inheritanceStrong type checking for better
compile-time debuggingEfficient executionPortableEasy to implementGood interfaces with other tools
![Page 14: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/14.jpg)
Chapter 3 K. Louden, Programming Languages 14
Supplemental C++ design goalsSupplemental C++ design goals C compatibility (but not an absolute goal:
no gratuitous incompatibilities) Incremental development based on
experience. No runtime penalty for unused features. Multiparadigm Stronger type checking than C Learnable in stages Compatibility with other languages and
systems
![Page 15: © Kenneth C. Louden, 20031 Chapter 3 - Language Design Principles Programming Languages: Principles and Practice, 2nd Ed. Kenneth C. Louden](https://reader036.vdocuments.site/reader036/viewer/2022082422/5697bf781a28abf838c820dc/html5/thumbnails/15.jpg)
Chapter 3 K. Louden, Programming Languages 15
C++ design errorsC++ design errors
Too big?– C++ programs can be hard to
understand and debug– Not easy to implement– Defended by Stroustrup: multiparadigm
features are worthwhileNo standard library until late (and
even then lacking major features)– Stroustrup agrees this has been a major
problem