Concepts in Programming Languages 1st Edition John C. Mitchell Download
Concepts in Programming Languages 1st Edition John C. Mitchell Download
https://ebookultra.com/download/concepts-in-programming-
languages-1st-edition-john-c-mitchell/
https://ebookultra.com/download/theories-of-programming-languages-1st-
edition-john-c-reynolds/
https://ebookultra.com/download/programming-concepts-in-c-2nd-edition-
robert-burns/
https://ebookultra.com/download/programming-with-visual-c-concepts-
and-projects-1st-edition-james-allert/
https://ebookultra.com/download/beginning-c-game-programming-2nd-ed-
edition-john-horton/
Masterminds of Programming Conversations with the Creators
of Major Programming Languages 1st Edition Federico
Biancuzzi
https://ebookultra.com/download/masterminds-of-programming-
conversations-with-the-creators-of-major-programming-languages-1st-
edition-federico-biancuzzi/
https://ebookultra.com/download/essentials-of-programming-languages-
third-edition-daniel-p-friedman/
https://ebookultra.com/download/concepts-in-toxicology-1st-edition-
john-h-duffus/
https://ebookultra.com/download/programming-languages-principles-and-
paradigms-2nd-edition-allen-b-tucker/
https://ebookultra.com/download/c-programming-in-linux-1st-edition-
edition-haskins-d/
Concepts in programming languages 1st Edition John C.
Mitchell Digital Instant Download
Author(s): John C. Mitchell, Krzysztof Apt
ISBN(s): 9780521780988, 0521780985
Edition: 1st
File Details: PDF, 7.59 MB
Year: 2001
Language: english
Team-Fly
This book provides a better understanding of the issues and trade-offs that arise in
programming language design and a better appreciation of the advantages and pitfalls of the
programming languages used.
Table of Contents
Chapter 1 - Introduction
Chapter 2 - Computability
Chapter 3 - Lisp—Functions, Recursion, and Lists
Chapter 4 - Fundamentals
Part 2 - Procedures, Types, Memory Mangement, and Control
Team-Fly
Team-Fly
Back Cover
This textbook for undergraduate and beginning graduate students explains and examines the central concepts used in
modern programming languages, such as functions, types, memory management, and control. This book is unique in its
comprehensive presentation and comparison of major object-oriented programming languages. Separate chapters examine
the history of objects, Simula and Smalltalk, and the prominent languages C++ and Java.
The author presents foundational topics, such as lambda calculus and denotational semantics, in an easy-to-read, informal
style, focusing on the main insights provided by these theories. Advanced topics include concurrency and concurrent
object-oriented programming. A chapter on logic programming illustrates the importance of specialized programming
methods for certain kinds of problems.
This book will give the reader a better understanding of the issues and trade-offs that arise in programming language design
and a better appreciation of the advantages and pitfalls of the programming languages they use.
John C. Mitchell is Professor of Computer Science at Stanford University, where he has been a popular teacher for more
than a decade. Many of his former students are successful in research and private industry. He received his Ph.D. from MIT
in 1984 and was a Member of Technical Staff at AT&T Bell Laboratories before joining the faculty at Stanford. Over the past
twenty years, Mitchell has been a featured speaker at international conferences, has led research projects on a variety of
topics, including programming language design and analysis, computer security, and applications of mathematical logic to
computer science, and has written more than 100 research articles. His graduate textbook, Foundation for Programming
Languages covers lambda calculus, type systems, logic for program verification, and mathematical semantics of
programming languages. Professor Mitchell was a member of the standardization effort and the 2002 Program Chair of the
ACM Principles of Programming Languages conference.
Team-Fly
Team-Fly
Stanford University
http://www.cambridge.org
This book is in copyright. Subject to statutory exception and to the provisions of relevant collective licensing
agreements, no reproduction of any part may take place without the written permission of Cambridge University Press.
A
Typefaces Times Ten 10/12.5 pt., ITC Franklin Gothic, and Officina Serif System L TEX2ε [TB]
A catalog record for this book is available from the British Library.
This textbook for undergraduate and beginning graduate students explains and examines the central concepts used in
modern programming languages, such as functions, types, memory management, and control. The book is unique in
its comprehensive presentation and comparison of major object-oriented programming languages. Separate chapters
examine the history of objects, Simula and Smalltalk, and the prominent languages C++ and Java.
The author presents foundational topics, such as lambda calculus and denotational semantics, in an easy-to-read,
informal style, focusing on the main insights provided by these theories. Advanced topics include concurrency and
concurrent object-oriented programming. A chapter on logic programming illustrates the importance of specialized
programming methods for certain kinds of problems.
This book will give the reader a better understanding of the issues and trade-offs that arise in programming language
design and a better appreciation of the advantages and pitfalls of the programming languages they use.
John C. Mitchell is Professor of Computer Science at Stanford University, where he has been a popular teacher for
more than a decade. Many of his former students are successful in research and private industry. He received his
Ph.D. from MIT in 1984 and was a Member of Technical Staff at AT&T Bell Laboratories before joining the faculty at
Stanford. Over the past twenty years, Mitchell has been a featured speaker at international conferences; has led
research projects on a variety of topics, including programming language design and analysis, computer security, and
applications of mathematical logic to computer science; and has written more than 100 research articles. His previous
textbook, Foundations for Programming Languages (MIT Press, 1996), covers lambda calculus, type systems, logic for
program verification, and mathematical semantics of programming languages. Professor Mitchell was a member of the
programming language subcommittee of the ACM/IEEE Curriculum 2001 standardization effort and the 2002 Program
Chair of the ACM Principles of Programming Languages conference.
Team-Fly
Team-Fly
Preface
A good programming language is a conceptual universe for thinking about programming.
Programming languages provide the abstractions, organizing principles, and control structures that programmers use
to write good programs. This book is about the concepts that appear in programming languages, issues that arise in
their implementation, and the way that language design affects program development. The text is divided into four
parts:
Part 1 contains a short study of Lisp as a worked example of programming language analysis and covers compiler
structure, parsing, lambda calculus, and denotational semantics. A short Computability chapter provides information
about the limits of compile-time program analysis and optimization.
Part 2 uses procedural Algol family languages and ML to study types, memory management, and control structures.
In Part 3 we look at program organization using abstract data types, modules, and objects. Because object-oriented
programming is the most prominent paradigm in current practice, several different object-oriented languages are
compared. Separate chapters explore and compare Simula, Smalltalk, C++, and Java.
Part 4 contains chapters on language mechanisms for concurrency and on logic programming.
The book is intended for upper-level undergraduate students and beginning graduate students with some knowledge
of basic programming. Students are expected to have some knowledge of C or some other procedural language and
some acquaintance with C++ or some form of object-oriented language. Some experience with Lisp, Scheme, or ML
is helpful in Parts 1 and 2, although many students have successfully completed the course based on this book without
this background. It is also helpful if students have some experience with simple analysis of algorithms and data
structures. For example, in comparing implementations of certain constructs, it will be useful to distinguish between
algorithms of constant-, polynomial-, and exponential-time complexity.
After reading this book, students will have a better understanding of the range of programming languages that have
been used over the past 40 years, a better understanding of the issues and trade-offs that arise in programming
language design, and a better appreciation of the advantages and pitfalls of the programming languages they use.
Because different languages present different programming concepts, students will be able to improve their
programming by importing ideas from other languages into the programs they write.
Acknowledgments
This book developed as a set of notes for Stanford CS 242, a course in programming languages that I have taught
since 1993. Each year, energetic teaching assistants have helped debug example programs for lectures, formulate
homework problems, and prepare model solutions. The organization and content of the course have been improved
greatly by their suggestions. Special thanks go to Kathleen Fisher, who was a teaching assistant in 1993 and 1994
and taught the course in my absence in 1995. Kathleen helped me organize the material in the early years and, in
1995, transcribed my handwritten notes into online form. Thanks to Amit Patel for his initiative in organizing homework
assignments and solutions and to Vitaly Shmatikov for persevering with the glossary of programming language terms.
Anne Bracy, Dan Bentley, and Stephen Freund thoughtfully proofread many chapters.
Lauren Cowles, Alan Harvey, and David Tranah of Cambridge University Press were encouraging and helpful. I
particularly appreciate Lauren's careful reading and detailed comments of twelve full chapters in draft form. Thanks
also are due to the reviewers they enlisted, who made a number of helpful suggestions on early versions of the book.
Zena Ariola taught from book drafts at the University of Oregon several years in a row and sent many helpful
suggestions; other test instructors also provided helpful feedback.
Finally, special thanks to Krzystof Apt for contributing a chapter on logic programming.
John Mitchell
Team-Fly
Team-Fly
Chapter 2: Computability
Chapter 4: Fundamentals
Team-Fly
Team-Fly
Chapter 1: Introduction
"The Medium Is the Message"
--Marshall McLuhan
There are many difficult trade-offs in programming language design. Some language features make it easy for us to
write programs quickly, but may make it harder for us to design testing tools or methods. Some language constructs
make it easier for a compiler to optimize programs, but may make programming cumbersome. Because different
computing environments and applications require different program characteristics, different programming language
designers have chosen different trade-offs. In fact, virtually all successful programming languages were originally
designed for one specific use. This is not to say that each language is good for only one purpose. However, focusing
on a single application helps language designers make consistent, purposeful decisions. A single application also
helps with one of the most difficult parts of language design: leaving good ideas out.
I hope you enjoy using this book. At the beginning of each chapter, I have included pictures of people involved
in the development or analysis of programming languages. Some of these people are famous, with major
awards and published biographies. Others are less widely recognized. When possible, I have tried to include
some personal information based on my encounters with these people. This is to emphasize that programming
languages are developed by real human beings. Like most human artifacts, a programming language inevitably
reflects some of the personality of its designers.
As a disclaimer, let me point out that I have not made an attempt to be comprehensive in my brief biographical
comments. I have tried to liven up the text with a bit of humor when possible, leaving serious biography to more
serious biographers. There simply is not space to mention all of the people who have played important roles in
the history of programming languages.
Historical and biographical texts on computer science and computer scientists have become increasingly
available in recent years. If you like reading about computer pioneers, you might enjoy paging through Out of
Their Minds: The Lives and Discoveries of 15 Great Computer Scientists by Dennis Shasha and Cathy Lazere
or other books on the history of computer science.
John Mitchell
Even if you do not use many of the programming languages in this book, you may still be able to put the conceptual
framework presented in these languages to good use. When I was a student in the mid-1970s, all "serious"
programmers (at my university, anyway) used Fortran. Fortran did not allow recursion, and recursion was generally
regarded as too inefficient to be practical for "real programming." However, the instructor of one course I took argued
that recursion was still an important idea and explained how recursive techniques could be used in Fortran by
managing data in an array. I am glad I took that course and not one that dismissed recursion as an impractical idea. In
the 1980s, many people considered object-oriented programming too inefficient and clumsy for real programming.
However, students who learned about object-oriented programming in the 1980s were certainly happy to know about
these "futuristic" languages in the 1990s, as object-oriented programming became more widely accepted and used.
Although this is not a book about the history of programming languages, there is some attention to history throughout
the book. One reason for discussing historical languages is that this gives us a realistic way to understand
programming language trade-offs. For example, programs were different when machines were slow and memory was
scarce. The concerns of programming language designers were therefore different in the 1960s from the current
concerns. By imaging the state of the art in some bygone era, we can give more serious thought to why language
designers made certain decisions. This way of thinking about languages and computing may help us in the future,
when computing conditions may change to resemble some past situation. For example, the recent rise in popularity of
handheld computing devices and embedded processors has led to renewed interest in programming for devices with
limited memory and limited computing power.
When we discuss specific languages in this book, we generally refer to the original or historically important form of a
language. For example, "Fortran" means the Fortran of the 1960s and early 1970s. These early languages were called
Fortran I, Fortran II, Fortran III, and so on. In recent years, Fortran has evolved to include more modern features, and
the distinction between Fortran and other languages has blurred to some extent. Similarly, Lisp generally refers to the
Lisps of the 1960s, Smalltalk to the language of the late 1970s and 1980s, and so on.
Team-Fly
Team-Fly
1.2 GOALS
In this book we are concerned with the basic concepts that appear in modern programming languages, their
interaction, and the relationship between programming languages and methods for program development. A recurring
theme is the trade-off between language expressiveness and simplicity of implementation. For each programming
language feature we consider, we examine the ways that it can be used in programming and the kinds of
implementation techniques that may be used to compile and execute it efficiently.
To understand the design space of programming languages. This includes concepts and constructs
from past programming languages as well as those that may be used more widely in the future. We
also try to understand some of the major conflicts and trade-offs between language features, including
implementation costs.
To develop a better understanding of the languages we currently use by comparing them with other
languages.
To understand the programming techniques associated with various language features. The study of
programming languages is, in part, the study of conceptual frameworks for problem solving, software
construction, and development.
Many of the ideas in this book are common knowledge among professional programmers. The material and ways of
thinking presented in this book should be useful to you in future programming and in talking to experienced
programmers if you work for a software company or have an interview for a job. By the end of the course, you will be
able to evaluate language features, their costs, and how they fit together.
Here are some specific themes that are addressed repeatedly in the text:
Computability: Some problems cannot be solved by computer. The undecidability of the halting
problem implies that programming language compilers and interpreters cannot do everything that we
might wish they could do.
Static analysis: There is a difference between compile time and run time. At compile time, the
program is known but the input is not. At run time, the program and the input are both available to the
run-time system. Although a program designer or implementer would like to find errors at compile
time, many will not surface until run time. Methods that detect program errors at compile time are
usually conservative, which means that when they say a program does not have a certain kind of
error this statement is correct. However, compile-time error-detection methods will usually say that
some programs contain errors even if errors may not actually occur when the program is run.
Expressiveness versus efficiency: There are many situations in which it would be convenient to have
a programming language implementation do something automatically. An example discussed in
Chapter 3 is memory management: The Lisp run-time system uses garbage collection to detect
memory locations no longer needed by the program. When something is done automatically, there is
a cost. Although an automatic method may save the programmer from thinking about something, the
implementation of the language may run more slowly. In some cases, the automatic method may
make it easier to write programs and make programming less prone to error. In other cases, the
resulting slowdown in program execution may make the automatic method infeasible.
Team-Fly
Team-Fly
The history of modern programming languages begins around 1958-1960 with the development of Algol, Cobol,
Fortran, and Lisp. The main body of this book covers Lisp, with a shorter discussion of Algol and subsequent related
languages. A brief account of some earlier languages is given here for those who may be curious about programming
language prehistory.
In the 1950s, a number of languages were developed to simplify the process of writing sequences of computer
instructions. In this decade, computers were very primitive by modern standards. Most programming was done with
the native machine language of the underlying hardware. This was acceptable because programs were small and
efficiency was extremely important. The two most important programming language developments of the 1950s were
Fortan and Cobol.
Fortran was developed at IBM around 1954-1956 by a team led by John Backus. The main innovation of Fortran (a
contraction of formula translator) was that it became possible to use ordinary mathematical notation in expressions.
For example, the Fortran expression for adding the value of i to twice the value of j is i + 2*j. Before the development
of Fortran, it might have been necessary to place i in a register, place j in a register, multiply j times 2 and then add the
result to i. Fortran allowed programmers to think more naturally about numerical calculation by using symbolic names
for variables and leaving some details of evaluation order to the compiler. Fortran also had subroutines (a form of
procedure or function), arrays, formatted input and output, and declarations that gave programmers explicit control
over the placement of variables and arrays in memory. However, that was about it. To give you some idea of the
limitations of Fortran, many early Fortran compilers stored numbers 1, 2, 3 … in memory locations, and programmers
could change the values of numbers if they were not careful! In addition, it was not possible for a Fortran subroutine to
call itself, as this required memory management techniques that had not been invented yet (see Chapter 7).
Cobol is a programming language designed for business applications. Like Fortran programs, many Cobol programs
are still in use today, although current versions of Fortran and Cobol differ substantially from forms of these languages
of the 1950s. The primary designer of Cobol was Grace Murray Hopper, an important computer pioneer. The syntax of
Cobol was intended to resemble that of common English. It has been suggested in jest that if object-oriented Cobol
were a standard today, we would use "add 1 to Cobol giving Cobol" instead of "C++".
The earliest languages covered in any detail in this book are Lisp and Algol, which both came out around 1960. These
languages have stack memory management and recursive functions or procedures. Lisp provides higher-order
functions (still not available in many current languages) and garbage collection, whereas the Algol family of languages
provides better type systems and data structuring. The main innovations of the 1970s were methods for organizing
data, such as records (or structs), abstract data types, and early forms of objects. Objects became mainstream in the
1980s, and the 1990s brought increasing interest in network-centric computing, interoperability, and security and
st
correctness issues associated with active content on the Internet. The 21 century promises greater diversity of
computing devices, cheaper and more powerful hardware, and increasing interest in correctness, security, and
interoperability.
Team-Fly
Team-Fly
Lisp x x x
C x x x
Algol 60 x x
Algol 68 x x x x
Pascal x x x
Modula-2 x x x x
Modula-3 x x x x x x
ML x x x x x
Simula x x x x x
Smalltalk x x x x x x
C++ x x x x x x
Objective C x x x x
Java x x x x x x x
Although this matrix lists only a fraction of the languages and concepts that might be covered in a basic text or course
on the programming languages, one general characteristic should be clear. There are some basic language concepts,
such as expressions, functions, local variables, and stack storage allocation that are present in many languages. For
these concepts, it makes more sense to discuss the concept in general than to go through a long list of similar
languages. On the other hand, for concepts such as objects and threads, there are relatively few languages that
exhibit these concepts in interesting ways. Therefore, we can study most of the interesting aspects of objects by
comparing a few languages. Another factor that is not clear from the matrix is that, for some concepts, there is
considerable variation from language to language. For example, it is more interesting to compare the way objects have
been integrated into languages than it is to compare integer expressions. This is another reason why competing
object-oriented languages are compared, but basic concepts related to expressions, statements, functions, and so on,
are covered only once, in a concept-oriented way.
Most courses and texts on programming languages use some combination of language-based and concept-based
presentation. In this book a concept-oriented organization is followed for most concepts, with a language-based
organization used to compare object-oriented features.
In Part 1 a short study of Lisp is presented, followed by a discussion of compiler structure, parsing, lambda calculus,
and denotational semantics. A short chapter provides a brief discussion of computability and the limits of compile-time
program analysis and optimization. For C programmers, the discussion of Lisp should provide a good chance to think
differently about programming and programming languages.
In Part 2, we progress through the main concepts associated with the conventional languages that are descended in
some way from the Algol family. These concepts include type systems and type checking, functions and stack storage
allocation, and control mechanisms such as exceptions and continuations. After some of the history of the Algol family
of languages is summarized, the ML programming language is used as the main example, with some discussion and
comparisons using C syntax.
Part 3 is an investigation of program-structuring mechanisms. The important language advances of the 1970s were
abstract data types and program modules. In the late 1980s, object-oriented concepts attained widespread
acceptance. Because object-oriented programming is currently the most prominent programming paradigm, in most of
Part 3 we focus on object-oriented concepts and languages, comparing Smalltalk, C++, and Java.
Part 4 contains chapters on language mechanisms for concurrent and distributed programs and on logic programming.
Because of space limitations, a number of interesting topics are not covered. Although scripting languages and other
"special-purpose" languages are not covered explicitly in detail, an attempt has been made to integrate some relevant
language concepts into the exercises.
Team-Fly
Team-Fly
Chapter 2: Computability
Some mathematical functions are computable and some are not. In all general-purpose programming languages, it is
possible to write a program for each function that is computable in principle. However, the limits of computability also
limit the kinds of things that programming language implementations can do. This chapter contains a brief overview of
computability so that we can discuss limitations that involve computability in other chapters of the book.
The fact that not all functions are computable has important ramifications for programming language tools and
implementations. Some kinds of programming constructs, however useful they might be, cannot be added to real
programming languages because they cannot be implemented on real computers.
In mathematics, an expression may have a defined value or it may not. For example, the expression 3 + 2 has a
defined value, but the expression 3/0 does not. The reason that 3/0 does not have a value is that division by zero is
not defined: division is defined to be the inverse of multiplication, but multiplication by zero cannot be inverted. There is
nothing to try to do when we see the expression 3/0; a mathematician would just say that this operation is undefined,
and that would be the end of the discussion.
In computation, there are two different reasons why an expression might not have a value:
Random documents with unrelated
content Scribd suggests to you:
one by one, were eagerly seized on by the public, who felt that this
new talent was revealing deep-welling springs of individuality in the
Russian nature, hitherto unrecorded.
[12] “The teaching of philosophy was proscribed in all the
schools, and in all the universities of the Empire; admission to
which had now been reduced in numbers. The classics were
similarly ostracised. Historical publications were put under a
censor’s control, which was tantamount to a prohibition. No
history of modern times, i.e. of the seventeenth or eighteenth
centuries, was allowed to be taught in any form whatsoever.”—E.
M. de Vogüé.
Though Russian society was profoundly moved by Turgenev’s picture
of serfdom, it was in truth the triumph of the pure artist, of the
writer who saw man’s fugitive life in relation to the vast, universal
drama of nature, that made A Sportsman’s Sketches acceptable to
all. One may compare the book’s atmosphere to some woodland’s
tender morning air quivering with light, which transmits the ringing
voices of men in all their meaning inflections. The voices rise, in joy
or strife or passion, then die away in silence, and we hear the gentle
stir and murmur of the leaves as the wind passes, while afar swells
the roar of the deep forest. Turgenev’s spiritual vision resembles this
silvery light and air which register equally the most exquisite
vibration of human aspiration and the dissonance of men’s folly and
misery. The sweet and tender depths of the author’s spirit served, so
to say, as a sensitive mirror which reflected impassively the struggle
between the forces of worldly craft and the appeal of all humble,
neglected and suffering creatures. “The Tryst” is an example of the
artist’s exquisite responsiveness both to the fleeting moods of nature
and the conflicts of human feeling. Thus the sufferings of the young
peasant girl, poor Akoulina, at the hands of her conceited lover, the
pampered valet, Viktor, are so blended with the woodland scene and
our last view of “the empty cart rattling over the bare hillside, the
low sinking sun in the pale clear sky, the gusty wind scudding over
the stubble fields, the bright but chill smile of fading nature,” that
one can scarcely dissociate the girl’s distress from the landscape. An
illusion! but one that great literature—for example, the Odyssey—
fosters. When we look over the face of a wide-stretching landscape
each tiny hamlet and its dwellers appear to the eye as a little point
of human activity, and each environment, again, as the outcome of
an endless chain of forces, seen and unseen in nature. Man, earth
and heaven—it is the trinity always suggested in the work of the
great poets.
But the vast background of nature need not be always before the
eyes of an audience. In “The Hamlet of the Shtchigri District,” for
instance, where—through the railings of an embittered man against
the petty boredom of provincial life, together with a characteristically
Russian confession of his own sloth and mediocrity—we breathe the
heated air of a big landowner’s house, the window on nature is, so
to say, shut down. So in “Lebedyan” the bustle and humours of a
horse-fair in the streets of a small country town, and in “The Country
House” the sordid manoeuvres of the stewards and clerks of the lazy
landed proprietor, Madame Losnyakov, against their victims, the
peasants on the estate, exclude the fresh atmosphere of forest and
steppe. But even so we are conscious that the sky and earth
encompass these people’s meetings in market-place and inns, in
posting-stations, peasants’ huts and landowners’ domains, and
always a faint undertone murmurs to us that each generation is like
a wave passing in the immensity of sea. Sometimes, as in “The
District Doctor,” a tragedy within four walls is shut in by a feeling of
sudden night and the isolation of the wintry fields. Sometimes, as in
“Biryuk,” the outbreak of a despairing peasant is reflected in the
fleeting storm-clouds and lashing rain of a storm in the forest. But
the people’s figures are always seen in just relation to their
surroundings, to their fellows and to nature.
By the relations of a man with his neighbours and their ideas, a
man’s character is focussed for us and his place in his environment
determined. Thus in “Raspberry Spring” the old steward Tuman’s
complacent panegyrics on the lavish ways of his former master, a
grand seigneur of Catherine’s time, are a meaning accompaniment
to the misery of Vlass the harassed serf. Vlass has just returned from
his sad errand to Moscow (his son has died there penniless), where
he has had his master’s door shut in his face, and he has been
ordered to return and pay the bailiff his arrears of rent. Whether
under the ancient régime of Catherine, or of Nicholas I., Vlass is the
“poor man” of Scripture whose face is ground by the rich. All the
irony of poor Vlass’s existence steals upon us while we hear the old
steward’s voice descanting on the dead count’s sumptuous
banquets, on his cooks and fiddlers and the low-born mistresses who
brought him to ruin; while the humble peasant sits still and hears,
too, of the “embroidered coats, wigs, canes, perfumes, eau de
cologne, snuff-boxes, of the huge pictures ordered from Paris!” It is
the cruelty, passive or active, innate in the web of human existence
that murmurs here in the bass.
The parts in just relation to the whole scheme of existence, that is
the secret of Turgenev’s supremacy, and what a piercing instinct for
the relative values of men’s motives and actions is revealed by his
calm, clear scrutiny! Observe in “The Agent” how the old serf Antip’s
weeping protest against his family’s ruin at the hands of the
tyrannous agent Sofron is made in the model village Shiplova, with
its tidy farm-buildings and new windmill and threshing-floors, its rich
stacks and hemp-fields “all in excellent order.” It is Sofron, the man
of “first rate administrative power,” so honey-tongued before the
gentry, who farms four hundred acres of his own, and trades in
horses and stock and corn and hemp, it is this petty despot in his
prosperity who “is harrying the peasants out of their lives.” “He is
sharp, awfully sharp, and rich, too, the beast!” says the Ryabovo
peasant. Behind the tyrannous bailiff Sofron is the owner of
Shiplova, the polished Mr. Pyenotchkin, a retired officer of the
Guards, who has mixed in the highest society. Mr. Pyenotchkin is a
man comme il faut, but when he finds that his luckless footman has
forgotten to warm the wine, he simply raises his eyebrows and
orders his major-domo to “make the necessary arrangements”—to
have Fyodor flogged! Here is progress on Western lines comfortably
cheek by jowl with serfdom! Of course the sting, here, for the
Russian conscience lay precisely in this juxtaposition of old and new,
and in the knowledge that the most progressive landowner could
exercise his legal right to sell his peasants, send a man away as a
conscript, and separate him from his family. But it is well to note that
only three or four of the Sportsman’s Sketches expose typical cases
of a landlord’s tyranny and the anachronism of this mediaeval
survival—serfdom.
One of these cases is “Yermolai and the Miller’s Wife,” a sketch
which for the calm breadth of vision in its exposure of serfdom is
flawless. In “Yermolai” note how Turgenev by a series of discreet
intermittent touches brings his people on the scene, and how the
tranquil description of the winding river, the Ista, with its stony
banks and cold clear streams and rugged precipitous banks,
prepares us for the story of poor Arina’s sorrows and of the self-
complacent master’s tyranny. Because Madame Zvyerkoff makes it a
rule never to keep married lady’s maids, poor Arina is disgraced, her
lover sent away as a soldier, and she herself is married to the miller,
who has offered a price for her. This distressing episode, though the
central theme, is introduced subtly by a side wind after we have
accompanied the narrator and the tall gaunt huntsman, Yermolai, to
the Ista’s banks, where the two sportsmen are benighted and seek
sleep in the outhouse of a mill. The bull-necked, fat-bellied miller
sends out his wife with a message to them, and this woman with her
refined, mournful eyes is none other than the unfortunate Arina,
with whom Yermolai is on old, familiar terms. The sportsman-
narrator, who has been dozing in the hay, wakes and soon gathers
from the snatches of talk between the pair the details of Arina’s
listless melancholy days after her child’s death. Her bitter situation is
flashed upon us in Yermolai’s suggestion that she shall pay a visit to
him in his hut when his own wife is away from home! She changes
the subject and soon walks away, and Yermolai’s peasant callousness
is indicated in his yawning answer to his master’s questions. Then
this story of a woman’s sorrow is brought to a close by one of those
exquisite nature touches which brings us back again to the infinite
life of the encompassing earth and sky:
In the above passage the feeling of the shadowy earth, the mist, the
great plain and the floating cries rarefies the village atmosphere of
human commonness. By such a representation of the people’s
figures, seen in just relation to their surroundings, to their fellows,
and to nature, Turgenev’s art secures for his picture poetic harmony,
and renders these finer cadences in the turmoil of life which ears
less sensitive than his fail to hear! The parts in just relation to the
whole scheme of human existence. Man, earth and heaven—it is the
secret of the perfection of the great poets.
IV
“RUDIN”
CHAPTER IV
“RUDIN”
The biographers tell us that Turgenev left Russia again in 1847, for
the sake of being near Pauline Garcia, the famous singer (afterwards
Madame Viardot), whom he adored all his life; that he left her in
Berlin, visited Salzbrunn with the critic Byelinsky, who was dying of
consumption, and then proceeded to Paris, Brussels, Lyons and
Courtavenel. In Paris he works incessantly, producing plays and
short stories and most of the series of A Sportsman’s Sketches;
makes friends with Hertzen and George Sand; studies the French
classics and avows his democratic sympathies, without any illusions
as to the good-for-nothingness of “the Reds.” In the autumn of 1858
he returns to Russia, recalled by news of the grave illness of his
mother, who, however, refused to be reconciled with her two sons,
whom she tried to disinherit on her deathbed. Turgenev was
henceforward a rich man. In 1852 A Sportsman’s Sketches appeared
in book form, and in April of the same year, for writing a sympathetic
article on Gogol’s death, Turgenev was ordered a month’s detention
in a police-station and then confined to his estate at Spasskoe.[13]
[13] “I am confined in a police-station by the Emperor’s orders for
having printed a short article on Gogol in a Moscow journal. This
was only a pretext, the article itself being perfectly insignificant.
They have looked at me askance for a long time, and they have
laid hold of this pretext at the first opportunity. I do not complain
of the Emperor; the matter has been so deceitfully represented to
him that he couldn’t have acted otherwise. They have wished to
put a stop on all that is being said on Gogol’s death, and they
have not been sorry, at the same time, to place an embargo on
my literary activity.”—Letter to M. and Mme. Viardot, May 13,
1852.
Turgenev notes that his imperious desire to escape to Europe
indicated “Possibly something lacking in my character or force of
will.” But he declares, “I should never have written A Sportsman’s
Sketches had I remained in Russia.... It was impossible for me to
remain and breathe the same air that gave life to everything I
abhorred.” The persecution of his literary forerunners and
contemporaries by the Autocracy was continuous. Pushkin’s
humiliation and subjection to official authority; Lermontov’s exile to
the Caucasus; Tchaadaev declared insane by bureaucratic order and
confined to a mad-house; Gogol’s recantation of Dead Souls and
relapse into feeble mysticism; Hertzen’s expatriation; Dostoevsky’s
and Petrashevsky’s exile to the mines of Siberia; Saltykov’s
banishment, etc., the list of the intellectual and creative minds
gagged or stifled under Nicholas I. is endless. And Turgenev’s mild
and generous spirit was designed neither for political partisanship
nor for active revolt. He has indeed been accused of timidity,[14] and
cowardice by uncompromising Radicals and Revolutionaries. But his
life-work is the answer to these ill-considered allegations. Spiritual
enfranchisement was impossible in “the swamp of Petersburg with
its Winter Palace, eight Ministries, three Polices, the most Holy
Synod, and all the exalted family with their German relatives,” as
Hertzen wittily put it later; and by faring abroad and by inhaling
deep draughts of free European air Turgenev was enabled, in his
own phrase, “to strike the enemy from a distance.”
[14] In an access of self-reproach he once declared to a friend
that his character was comprised in one word—“poltroon.”
His exile for a year and a half to his own estate was, however, by no
means a bad thing for his own self-development. Years afterwards
he wrote: “All was for the best.... My being under arrest and in the
country proved to my undeniable advantage; it brought me close to
those sides of Russian life which, in the ordinary course of things,
would probably have escaped my observation.” He consoled himself
with shooting, with music, with reading, with literary composition,
and it is to this enforced detention in Russia that, no doubt, we owe
the masterpiece Rudin (1855), which he rewrote many times,
declaring to Aksakov that none of his other stories had ever given
him so much trouble. In fact this novel, in grace, ease and strength,
has the quality of finished statuary.
Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.
ebookultra.com