PDF Practical Foundations For Programming Languages 2nd Edition Robert Harper Download
PDF Practical Foundations For Programming Languages 2nd Edition Robert Harper Download
com
https://textbookfull.com/product/practical-
foundations-for-programming-languages-2nd-edition-
robert-harper/
https://textbookfull.com/product/foundations-of-programming-languages-
second-edition-lee/
textbookfull.com
https://textbookfull.com/product/foundations-of-programming-languages-
kent-d-lee/
textbookfull.com
https://textbookfull.com/product/concepts-of-programming-languages-
global-edition-robert-w-sebesta-sebesta-r-w/
textbookfull.com
https://textbookfull.com/product/ptsd-and-the-politics-of-trauma-in-
israel-a-nation-on-the-couch-keren-friedman-peleg/
textbookfull.com
Computational seismology : a practical introduction 1st
Edition Igel
https://textbookfull.com/product/computational-seismology-a-practical-
introduction-1st-edition-igel/
textbookfull.com
https://textbookfull.com/product/anthology-of-world-scriptures-robert-
e-van-voorst/
textbookfull.com
https://textbookfull.com/product/the-electronics-companion-devices-
and-circuits-for-physicists-and-engineers-2nd-edition-fischer-cripps/
textbookfull.com
https://textbookfull.com/product/the-best-people-trump-s-cabinet-and-
the-siege-on-washington-alexander-nazaryan/
textbookfull.com
https://textbookfull.com/product/integration-of-nature-and-technology-
for-smart-cities-3rd-edition-anil-ahuja/
textbookfull.com
Christianity and Social Work Readings on the Integration
of Christian Faith and Social Work Practice Fifth Edition
T. Laine Scales
https://textbookfull.com/product/christianity-and-social-work-
readings-on-the-integration-of-christian-faith-and-social-work-
practice-fifth-edition-t-laine-scales/
textbookfull.com
Practical Foundations for Programming Languages
This text develops a comprehensive theory of programming languages based on type sys-
tems and structural operational semantics. Language concepts are precisely defined by their
static and dynamic semantics, presenting the essential tools both intuitively and rigorously
while relying on only elementary mathematics. These tools are used to analyze and prove
properties of languages and provide the framework for combining and comparing language
features. The broad range of concepts includes fundamental data types such as sums and
products, polymorphic and abstract types, dynamic typing, dynamic dispatch, subtyping
and refinement types, symbols and dynamic classification, parallelism and cost semantics,
and concurrency and distribution. The methods are directly applicable to language imple-
mentation, to the development of logics for reasoning about programs, and to the formal
verification language properties such as type safety.
This thoroughly revised second edition includes exercises at the end of nearly every
chapter and a new chapter on type refinements.
Robert Harper
Carnegie Mellon University
32 Avenue of the Americas, New York, NY 10013
www.cambridge.org
Information on this title: www.cambridge.org/9781107150300
© Robert Harper 2016
A catalog record for this publication is available from the British Library.
1 Abstract Syntax 3
1.1 Abstract Syntax Trees 3
1.2 Abstract Binding Trees 6
1.3 Notes 10
2 Inductive Definitions 12
2.1 Judgments 12
2.2 Inference Rules 12
2.3 Derivations 14
2.4 Rule Induction 15
2.5 Iterated and Simultaneous Inductive Definitions 17
2.6 Defining Functions by Rules 18
2.7 Notes 19
4 Statics 33
4.1 Syntax 33
4.2 Type System 34
4.3 Structural Properties 35
4.4 Notes 37
vi Contents
5 Dynamics 39
5.1 Transition Systems 39
5.2 Structural Dynamics 40
5.3 Contextual Dynamics 42
5.4 Equational Dynamics 44
5.5 Notes 46
6 Type Safety 48
6.1 Preservation 48
6.2 Progress 49
6.3 Run-Time Errors 50
6.4 Notes 52
7 Evaluation Dynamics 53
7.1 Evaluation Dynamics 53
7.2 Relating Structural and Evaluation Dynamics 54
7.3 Type Safety, Revisited 55
7.4 Cost Dynamics 56
7.5 Notes 57
10 Product Types 79
10.1 Nullary and Binary Products 79
10.2 Finite Products 81
10.3 Primitive Mutual Recursion 82
10.4 Notes 83
vii Contents
11 Sum Types 85
11.1 Nullary and Binary Sums 85
11.2 Finite Sums 86
11.3 Applications of Sum Types 88
11.4 Notes 91
12 Constructive Logic 95
12.1 Constructive Semantics 95
12.2 Constructive Logic 96
12.3 Proof Dynamics 100
12.4 Propositions as Types 101
12.5 Notes 101
Part X Subtyping
27 Inheritance 245
27.1 Class and Method Extension 245
27.2 Class-Based Inheritance 246
27.3 Method-Based Inheritance 248
27.4 Notes 249
29 Exceptions 260
29.1 Failures 260
29.2 Exceptions 262
29.3 Exception Values 263
29.4 Notes 264
30 Continuations 266
30.1 Overview 266
30.2 Continuation Dynamics 268
30.3 Coroutines from Continuations 269
30.4 Notes 272
31 Symbols 277
31.1 Symbol Declaration 277
31.2 Symbol References 280
31.3 Notes 282
Part XV Parallelism
48 Parametricity 454
48.1 Overview 454
48.2 Observational Equivalence 455
48.3 Logical Equivalence 456
48.4 Parametricity Properties 461
48.5 Representation Independence, Revisited 464
48.6 Notes 465
Bibliography 479
Index 487
Preface to the Second Edition
Writing the second edition to a textbook incurs the same risk as building the second version
of a software system. It is difficult to make substantive improvements, while avoiding the
temptation to overburden and undermine the foundation on which one is building. With the
hope of avoiding the second system effect, I have sought to make corrections, revisions,
expansions, and deletions that improve the coherence of the development, remove some
topics that distract from the main themes, add new topics that were omitted from the first
edition, and include exercises for almost every chapter.
The revision removes a number of typographical errors, corrects a few material errors
(especially the formulation of the parallel abstract machine and of concurrency in Algol),
and improves the writing throughout. Some chapters have been deleted (general pattern
matching and polarization, restricted forms of polymorphism), some have been completely
rewritten (the chapter on higher kinds), some have been substantially revised (general
and parametric inductive definitions, concurrent and distributed Algol), several have been
reorganized (to better distinguish partial from total type theories), and a new chapter
has been added (on type refinements). Titular attributions on several chapters have been
removed, not to diminish credit, but to avoid confusion between the present and the original
formulations of several topics. A new system of (pronounceable!) language names has been
introduced throughout. The exercises generally seek to expand on the ideas in the main
text, and their solutions often involve significant technical ideas that merit study. Routine
exercises of the kind one might include in a homework assignment are deliberately few.
My purpose in writing this book is to establish a comprehensive framework for formu-
lating and analyzing a broad range of ideas in programming languages. If language design
and programming methodology are to advance from a trade-craft to a rigorous discipline,
it is essential that we first get the definitions right. Then, and only then, can there be mean-
ingful analysis and consolidation of ideas. My hope is that I have helped to build such a
foundation.
I am grateful to Stephen Brookes, Evan Cavallo, Karl Crary, Jon Sterling, James R.
Wilcox and Todd Wilson for their help in critiquing drafts of this edition and for their
suggestions for modification and revision. I thank my department head, Frank Pfenning,
for his support of my work on the completion of this edition. Thanks also to my editors, Ada
Brunstein and Lauren Cowles, for their guidance and assistance. And thanks to Andrew
Shulaev for corrections to the draft.
Neither the author nor the publisher make any warranty, express or implied, that the
definitions, theorems, and proofs contained in this volume are free of error, or are consistent
with any particular standard of merchantability, or that they will meet requirements for any
particular application. They should not be relied on for solving a problem whose incorrect
xvi Preface to the Second Edition
solution could result in injury to a person or loss of property. If you do use this material
in such a manner, it is at your own risk. The author and publisher disclaim all liability for
direct or consequential damage resulting from its use.
Pittsburgh
July 2015
Preface to the First Edition
Types are the central organizing principle of the theory of programming languages. Lan-
guage features are manifestations of type structure. The syntax of a language is governed
by the constructs that define its types, and its semantics is determined by the interactions
among those constructs. The soundness of a language design—the absence of ill-defined
programs—follows naturally.
The purpose of this book is to explain this remark. A variety of programming language
features are analyzed in the unifying framework of type theory. A language feature is defined
by its statics, the rules governing the use of the feature in a program, and its dynamics, the
rules defining how programs using this feature are to be executed. The concept of safety
emerges as the coherence of the statics and the dynamics of a language.
In this way, we establish a foundation for the study of programming languages. But
why these particular methods? The main justification is provided by the book itself. The
methods we use are both precise and intuitive, providing a uniform framework for explaining
programming language concepts. Importantly, these methods scale to a wide range of
programming language concepts, supporting rigorous analysis of their properties. Although
it would require another book in itself to justify this assertion, these methods are also
practical in that they are directly applicable to implementation and uniquely effective as a
basis for mechanized reasoning. No other framework offers as much.
Being a consolidation and distillation of decades of research, this book does not provide
an exhaustive account of the history of the ideas that inform it. Suffice it to say that much
of the development is not original but rather is largely a reformulation of what has gone
before. The notes at the end of each chapter signpost the major developments but are
not intended as a complete guide to the literature. For further information and alternative
perspectives, the reader is referred to such excellent sources as Constable (1986, 1998),
Girard (1989), Martin-Löf (1984), Mitchell (1996), Pierce (2002, 2004), and Reynolds
(1998).
The book is divided into parts that are, in the main, independent of one another. Parts
I and II, however, provide the foundation for the rest of the book and must therefore be
considered prior to all other parts. On first reading, it may be best to skim Part I, and begin
in earnest with Part II, returning to Part I for clarification of the logical framework in which
the rest of the book is cast.
Numerous people have read and commented on earlier editions of this book and have
suggested corrections and improvements to it. I am particularly grateful to Umut Acar,
Jesper Louis Andersen, Carlo Angiuli, Andrew Appel, Stephanie Balzer, Eric Bergstrom,
Guy E. Blelloch, Iliano Cervesato, Lin Chase, Karl Crary, Rowan Davies, Derek Dreyer,
Dan Licata, Zhong Shao, Rob Simmons, and Todd Wilson for their extensive efforts in
xviii Preface to the First Edition
reading and criticizing the book. I also thank the following people for their suggestions:
Joseph Abrahamson, Arbob Ahmad, Zena Ariola, Eric Bergstrome, William Byrd, Alejan-
dro Cabrera, Luis Caires, Luca Cardelli, Manuel Chakravarty, Richard C. Cobbe, James
Cooper, Yi Dai, Daniel Dantas, Anupam Datta, Jake Donham, Bill Duff, Matthias Felleisen,
Kathleen Fisher, Dan Friedman, Peter Gammie, Maia Ginsburg, Byron Hawkins, Kevin
Hely, Kuen-Bang Hou (Favonia), Justin Hsu, Wojciech Jedynak, Cao Jing, Salil Joshi,
Gabriele Keller, Scott Kilpatrick, Danielle Kramer, Dan Kreysa, Akiva Leffert, Ruy Ley-
Wild, Karen Liu, Dave MacQueen, Chris Martens, Greg Morrisett, Stefan Muller, Tom
Murphy, Aleksandar Nanevski, Georg Neis, David Neville, Adrian Trejo Nuñez, Cyrus
Omar, Doug Perkins, Frank Pfenning, Jean Pichon, Benjamin Pierce, Andrew M. Pitts,
Gordon Plotkin, David Renshaw, John Reynolds, Andreas Rossberg, Carter Schonwald,
Dale Schumacher, Dana Scott, Shayak Sen, Pawel Sobocinski, Kristina Sojakova, Daniel
Spoonhower, Paulo Tanimoto, Joe Tassarotti, Peter Thiemann, Bernardo Toninho, Michael
Tschantz, Kami Vaniea, Carsten Varming, David Walker, Dan Wang, Jack Wileden, Sergei
Winitzki, Roger Wolff, Omer Zach, Luke Zarko, and Yu Zhang. I am very grateful to the
students of 15-312 and 15-814 at Carnegie Mellon who have provided the impetus for the
preparation of this book and who have endured the many revisions to it over the last ten
years.
I thank the Max Planck Institute for Software Systems for its hospitality and support.
I also thank Espresso a Mano in Pittsburgh, CB2 Cafe in Cambridge, and Thonet Cafe
in Saarbrücken for providing a steady supply of coffee and a conducive atmosphere for
writing.
This material is, in part, based on work supported by the National Science Foundation
under Grant Nos. 0702381 and 0716469. Any opinions, findings, and conclusions or rec-
ommendations expressed in this material are those of the author(s) and do not necessarily
reflect the views of the National Science Foundation.
Robert Harper
Pittsburgh
March 2012
Visit https://textbookfull.com
now to explore a rich
collection of eBooks, textbook
and enjoy exciting offers!
PART I
An abstract syntax tree, or ast for short, is an ordered tree whose leaves are variables, and
whose interior nodes are operators whose arguments are its children. Ast’s are classified
4 Abstract Syntax
into a variety of sorts corresponding to different forms of syntax. A variable stands for an
unspecified, or generic, piece of syntax of a specified sort. Ast’s can be combined by an
operator, which has an arity specifying the sort of the operator and the number and sorts
of its arguments. An operator of sort s and arity s1 , . . . , sn combines n ≥ 0 ast’s of sort
s1 , . . . , sn , respectively, into a compound ast of sort s.
The concept of a variable is central and therefore deserves special emphasis. A variable
is an unknown object drawn from some domain. The unknown can become known by
substitution of a particular object for all occurrences of a variable in a formula, thereby
specializing a general formula to a particular instance. For example, in school algebra
variables range over real numbers, and we may form polynomials, such as x 2 + 2 x + 1,
that can be specialized by substitution of, say, 7 for x to obtain 72 + (2 × 7) + 1, which can
be simplified according to the laws of arithmetic to obtain 64, which is (7 + 1)2 .
Abstract syntax trees are classified by sorts that divide ast’s into syntactic categories.
For example, familiar programming languages often have a syntactic distinction between
expressions and commands; these are two sorts of abstract syntax trees. Variables in abstract
syntax trees range over sorts in the sense that only ast’s of the specified sort of the variable
can be plugged in for that variable. Thus, it would make no sense to replace an expression
variable by a command, nor a command variable by an expression, the two being different
sorts of things. But the core idea carries over from school mathematics, namely that a
variable is an unknown, or a place-holder, whose meaning is given by substitution.
As an example, consider a language of arithmetic expressions built from numbers,
addition, and multiplication. The abstract syntax of such a language consists of a single
sort Exp generated by these operators:
The expression 2 + (3 × x), which involves a variable, x, would be represented by the ast
of sort Exp, under the assumption that x is also of this sort. Because, say, num[4], is an ast
of sort Exp, we may plug it in for x in the above ast to obtain the ast
which is written informally as 2 + (3 × 4). We may, of course, plug in more complex ast’s
of sort Exp for x to obtain other ast’s as result.
The tree structure of ast’s provides a very useful principle of reasoning, called structural
induction. Suppose that we wish to prove that some property P(a) holds for all ast’s a of a
given sort. To show this, it is enough to consider all the ways in which a can be generated
and show that the property holds in each case under the assumption that it holds for its
constituent ast’s (if any). So, in the case of the sort Exp just described, we must show
1. The property holds for any variable x of sort Exp: prove that P(x).
2. The property holds for any number, num[n]: for every n ∈ N, prove that P(num[n]).
5 1.1 Abstract Syntax Trees
3. Assuming that the property holds for a1 and a2 , prove that it holds for plus(a1 ; a2 ) and
times(a1 ; a2 ): if P(a1 ) and P(a2 ), then P(plus(a1 ; a2 )) and P(times(a1 ; a2 )).
Because these cases exhaust all possibilities for the formation of a, we are assured that
P(a) holds for any ast a of sort Exp.
It is common to apply the principle of structural induction in a form that takes account of
the interpretation of variables as place-holders for ast’s of the appropriate sort. Informally, it
is often useful to prove a property of an ast involving variables in a form that is conditional
on the property holding for the variables. Doing so anticipates that the variables will be
replaced with ast’s that ought to have the property assumed for them, so that the result of
the replacement will have the property as well. This amounts to applying the principle of
structural induction to properties P(a) of the form “if a involves variables x1 , . . . , xk , and
Q holds of each xi , then Q holds of a,” so that a proof of P(a) for all ast’s a by structural
induction is just a proof that Q(a) holds for all ast’s a under the assumption that Q holds
for its variables. When there are no variables, there are no assumptions, and the proof of P
is a proof that Q holds for all closed ast’s. On the other hand, if x is a variable in a, and we
replace it by an ast b for which Q holds, then Q will hold for the result of replacing x by b
in a.
For the sake of precision, we now give precise definitions of these concepts. Let S be
a finite set of sorts. For a given set S of sorts, an arity has the form (s1 , . . . , sn )s, which
specifies the sort s ∈ S of an operator taking n ≥ 0 arguments, each of sort si ∈ S. Let
O = { Oα } be an arity-indexed family of disjoint sets of operators Oα of arity α. If o is
an operator of arity (s1 , . . . , sn )s, we say that o has sort s and has n arguments of sorts
s 1 , . . . , sn .
Fix a set S of sorts and an arity-indexed family O of sets of operators of each arity. Let
X = { Xs }s∈S be a sort-indexed family of disjoint finite sets Xs of variables x of sort s.
When X is clear from context, we say that a variable x is of sort s if x ∈ Xs , and we say
that x is fresh for X , or just fresh when X is understood, if x ∈ / Xs for any sort s. If x is
fresh for X and s is a sort, then X , x is the family of sets of variables obtained by adding
x to Xs . The notation is ambiguous in that the sort s is not explicitly stated but determined
from context.
The family A[X ] = { A[X ]s }s∈S of abstract syntax trees, or ast’s, of sort s is the smallest
family satisfying the following conditions:
It follows from this definition that the principle of structural induction can be used to prove
that some property P holds of every ast. To show P(a) holds for every a ∈ A[X ], it is
enough to show:
1. If x ∈ Xs , then Ps (x).
2. If o has arity (s1 , . . . , sn )s and Ps1 (a1 ) and . . . and Psn (an ), then Ps (o(a1 ; . . . ;an )).
Random documents with unrelated
content Scribd suggests to you:
CHAPTER III.
John Brown’s Body and the Bones of
John Paul Jones.
T HAT Paul Jones was not alone soon became evident. With his
coming, other ghostly forms had taken shape in the semi-
gloom and the admiral became the centre of a throng which
included the greatest men of all time—the only great men, in fact,
for one must die before he can be accorded any measure of
greatness. Only in the perspective of the past does a man loom large
in the vision of the present.
“It were better to be a live politician than a dead hero,” observed
Paul Jones, reading my thoughts. Then he sighed.
“But you are honored on earth and even here,” I said, with a
glance around the circle at the illustrious members of the Asbestos
Society of Sinners.
“Earthly honor is but hysteria,” Jones replied wearily. “Yet, ‘twas
ever thus. One is usually crushed by the honors showered upon him,
as were the Romans in attending the banquet of Emperor
Elagabalus, who rained roses upon his guests until all were buried
and smothered by the flowers. Like them ‘bouquets’ are thrown at
me when I am dead, of which I would have been more appreciative
while living. Yet ‘bouquets’ are preferable to ‘brickbats,’ even though
they do not make so lasting an impression. Hades, as you will soon
learn, is more of a news centre than London, and so I have heard
that in recent years the city hall of New York was draped in
mourning for Hiram Cronk, last survivor of the War of 1812, whose
only claim to fame was that he did not die sooner. If earthly honors
died on earth I wouldn’t complain, but they are all reproduced in
Hades, which is a burlesque of the upper world. Ever since
Ambassador Porter found a body which he thought might have
looked like me had I looked like that body, I have been given
homage by every man in Hades. The joke of the matter—if a
Scotchman may take an Irish bull by the horns and joke at his own
funeral—is that there is no certainty about the body being mine.”
“Do you doubt it in the face of—”
“When face to face with a dead doubt, don’t look a gift corpse in
the mouth,” interrupted the admiral dryly. “Had Porter done so, he
would have discovered two gold teeth, and I really must insist that if
that body is mine, those teeth were filled after I died. In the old
days, before the doctors invented appendicitis, I did not mind
swallowing all the grape sent with the enemy’s compliments, but I
always did draw the line at the dentist’s chair, and any manipulator
of the forceps would have struck a snag had he investigated my
corpse too closely. Perhaps I ought not to complain, for it may be
that if I keep my mouth shut I shall get a decent funeral, and
unfortunately this is supposed to be my funeral.”
“But the proofs,” I remonstrated.
“My dear fellow, it is easy to pile up proofs on a dead man, for he
cannot rise up to refute them. Here is a dead body; Paul Jones is
dead: therefore, this must be Paul Jones. That may be logic but it is
not common-sense. Yet this text-book reasoning is no more absurd
than the ‘proofs.’ First of all, there was the absence of a coffin plate;
had the body been missing instead of the name it would have been
more worthy of notice. An autopsy has revealed traces of the
disease of which I died, and this after a hundred years! If they were
as expert in diagnosing the living as they are in cutting up the dead,
fewer of the mistakes of the doctors would have to be buried from
sight and mind. Then these learned savants triumphantly point to
the height as a sure proof that this is the body of Jones and not of
Smith, though both families are so numerous that the bones of one
more or less doesn’t matter save as a museum exhibit—from which
fate may the Stars and Stripes protect me! It seems from this
deduction that I was the only person ever born into the world who
ever attained to a stature of five feet and seven inches. That’s what
a man gets for measuring up to the standard! The most remarkable
coincidence of all is that neither uniform nor sword was found.
Evidently Paris makes it a custom to bury its dead, civilian and
officer alike, in a shroud of mystery, epaulets and gold stripes.
“Really, the only proof distilled is that the body was found floating
in alcohol. I was so fond of that preservative in life, according to the
historical novelists, that if a dead body can move of its own volition,
I know mine would have sought out the alcohol. It may be the body
of John Jones or John Smith, or it may be the remains of some
Johnny Craupaud of a century ago; who knows? A slip of genealogy
has lost thrones and made more than one man get off the earth.”
“At least you must concede it is not often that many cities
squabble over the honor of giving sepulture to a man’s remains.”
“After a century of neglect,” retorted Jones, “‘history repeats itself,’
as my friend Tom Heyward will tell you.”
“It’s a wonder some of those cities did not foresee the coming
events of which Homer was the shadow and make a play for Jones.
Now, Seward, it’s your turn. Come, Tom, speak your little piece.”
observed Shakespeare.
“I ought to give you a pension for making my sayings so well
known; I notice you never quote your own sentiments because mine
answer all purposes so much better.”
It was Lord Bacon who spoke.
“I was talking of you, I grant that,” retorted Shakespeare. “Shall I
repeat it? My wife says that it’s only by a hair—”
“You two men are always quarreling,” interrupted Anon. “Please
keep the age of Anne from his lordship’s notice, for she hath a way
to fry his Bacon. My lord, you should never judge a poet by his hair.”
“Nor yet by his feet,” interrupted Longfellow; “although if a poet
looks well to his feet there are no heights to which he cannot climb.”
“I accept the measure of your judgment,” went on Anon calmly.
“As for the lady, Delilah’s barber stunt convinced Samson it isn’t wise
to tell the truth to a woman.”
“Yet I must insist,” continued Lord Bacon, “that Shakespeare is
rather shy of hair to be a real poet. Of course, I have heard the
story that Anne Hathaway, after a conference with Delilah, sought to
reduce the strength of the Samson of letters by cutting his name
from Shakespeare to Shakspeare and trimming his hair to make
assurance doubly sure, but Lot’s wife, in looking backward, has
recommended that the pig-tale be swallowed with a grain of salt. My
dear Willie, your poetry has pains in its feet, your rhyme has
received the absent treatment, and your rythm, like your hair, is
lacking.”
“Oh, well, hair doesn’t grow on brains,” retorted the claimant to
“Hamlet.”
But Anon was not to be out-argued, and continued:
“A hirsute chrysanthemum growing on a man’s head is more likely
to indicate a quarterback Freshman on the gridiron than a
hunchback poet on the Mount of Parnassus. As for the poet’s other
extreme, metrical feet are not always symmetrical.”
hummed Longfellow.
“That is a prehistoric relic which leaked from the Ark when we
grounded on Mt. Ararat,” volunteered Noah. “I sprung that ‘raising
Cain’ joke on Mrs. Noah, but you know a woman has no sense of
humor and she said she had her hands full without working the
adoption degree.”
“‘O, that mine adversary had written a book!’” reiterated
Methuselah.
“He has; your wish is fulfilled.”
It was a newcomer who spoke. All eyes were turned upon him as
Methuselah asked:
“Who are you?”
“A. Hasbeen, M.D., late secretary of the Os-slurs Chloroforming
Institute of Baltimore. To-day I became a back number—60—which
entitled me to a painless passing, the anæsthetic being administered
by Dr. Senile. But there was no need of the old men getting angry at
what Dr. Osler said about them. He intended it only for advertising
purposes. Having got himself talked into notoriety, his publishers
have announced that a book by the doctor is in press.”
“Then am I revenged indeed! Æsthetic as he is, Dr. Osler will wish
that he had taken an anæsthetic before the book reviewers get
through with him. Oh, for the fatally facile pen of the bright and
bitter Corelli!”
“Anthony Trollope says he said it first.”
“Oh, the idea is itself old enough to be chloroformed,” explained
Dr. Hasbeen. “Osler has been trying to explain that it was all a jest,
but the public refuses to take him in earnest: a comedian never can
become a tragedian. It only goes to show that, although Barnum
may be right in his opinion that the American people like to be
fooled, they won’t swallow a joke that is thrust down their throats
and smile over it, and they do not want their sense of the ludicrous
drugged by an overdose of chloroform.”
“I may be a member of the silent majority,” went on Methuselah,
“but this insult to age would put speech in the most chapfallen
mummy, however it might be pressed for time. Notified to quit
thinking at forty and to stop living at sixty! Why, in my day, a man
hadn’t cut his wisdom tooth then! I’m inclined to think that Dr. Osler
still has some teeth to cut. Man, like wine, improves with age. Before
making that speech the doctor should have put on his old slippers;
then nobody would have known where the shoe pinched him.”
“I wonder how long it took Osler to sober up after that
intemperate speech? Nobody ever heard of him until he approached
the danger line of encroaching years. What has he been doing in the
past? Doubtless he is no different from the ordinary man, who
remains a dormant factor until he comes to years of discretion,
which is more likely to be sixty than sixteen. Before that time, he
courts women and wine more assiduously than wisdom and common
sense.”
“A man’s early life is too much taken up with breach-of-promise
cases, divorces and the stock exchange to care whether or not the
world owes him a living or to take the trouble to collect it. Though
the financial acumen of Humpty Dumpty does not make Wall Street
tremble, it tumbles to a good thing long before he takes a fall to
himself. The bears come out of their pits and the bulls leave their
greenbacks to seek other and greener goods to devour.”
“You know ‘there is no fool like an old fool,’” I ventured to quote.
“‘Young men think old men are fools; but old men know young
men are fools’; they’ve been there themselves,” retorted Methuselah.
“It is easy to mould even stubborn facts by applying the sparks
from the thought anvils of dead men’s minds, which the world
accepts because the men are dead and not because the sparks burn
with living truth.
“Proverbs, not men, should be sacrificed on the altar of antiquity.