Version 1.11 -- added several new answers on design questions
diff --git a/Misc/FAQ b/Misc/FAQ
index e54359e..c64969f 100644
--- a/Misc/FAQ
+++ b/Misc/FAQ
@@ -6,8 +6,8 @@
 Approved: news-answers-request@MIT.Edu
 
 Archive-name: python-faq/part1
-Version: 1.10
-Last-modified: 14 July 1994
+Version: 1.11
+Last-modified: 25 July 1994
 
 This article contains answers to Frequently Asked Questions about
 Python (an object-oriented interpreted programming language -- see
@@ -76,6 +76,7 @@
   2.3. Q. Are there any commercial projects going on using Python?
   2.4. Q. How stable is Python?
   2.5. Q. What new developments are expected for Python in the future?
+  2.6. Q. Is it reasonable to propose incompatible changes to Python?
 
  3. Building Python
   3.1. Q. Is there a test set?
@@ -88,7 +89,8 @@
        script (after the script name).
   3.6. Q. When building on the SGI, make tries to run python to create
        glmodule.c, but python hasn't been built or installed yet.
-  3.7. Q. Other trouble building Python 1.0.2 on platform X.
+  3.7. Q. Python built with gcc for the DEC Alpha doesn't work.
+  3.8. Q. Other trouble building Python on platform X.
 
  4. Programming in Python
   4.1. Q. Is there a source code level debugger with breakpoints, step,
@@ -131,6 +133,15 @@
        disk.)
   6.3. Q. Why isn't there a switch or case statement in Python?
   6.4. Q. Why does Python use indentation for grouping of statements?
+  6.5. Q. Why are Python strings immutable?
+  6.6. Q. Why don't strings have methods like index() or sort(), like
+       lists?
+  6.7. Q. Why does Python use methods for some functionality
+       (e.g. list.index()) but functions for other (e.g. len(list))?
+  6.8. Q. Why can't I derive a class from built-in types (e.g. lists or
+       files)?
+  6.9. Q. Why must 'self' be declared and used explicitly in method
+       definitions and calls?
 
  7. Using Python on non-UNIX platforms
   7.1. Q. Is there a Mac version of Python?
@@ -190,8 +201,8 @@
 It is a gzip'ed tar file containing the complete C source, LaTeX
 documentation, Python library modules, example programs, and several
 useful pieces of freely distributable software.  This will compile and
-run out of the box on most UNIX platforms.  At the time of writing,
-<version> is 1.0.2.  (See section 7 for non-UNIX information.)
+run out of the box on most UNIX platforms.  (See section 7 for
+non-UNIX information.)
 
 1.4. Q. How do I get documentation on Python?
 
@@ -199,12 +210,11 @@
 anonymous ftp from ftp.cwi.nl [192.16.191.128] in the directory
 /pub/python, with filename pythondoc-ps<version>.tar.gz.  It is a
 gzip'ed tar file containing PostScript files of the reference manual,
-the library manual, and the tutorial.  At the time of writing
-<version> is 1.0.2.  Note that the library manual is the most
-important one of the set, as much of Python's power stems from the
-standard or built-in types, functions and modules, all of which are
-described here.  PostScript for a high-level description of Python is
-in the file nluug-paper.ps.
+the library manual, and the tutorial.  Note that the library manual is
+the most important one of the set, as much of Python's power stems
+from the standard or built-in types, functions and modules, all of
+which are described here.  PostScript for a high-level description of
+Python is in the file nluug-paper.ps.
 
 1.5. Q. Are there other ftp sites that mirror the Python distribution?
 
@@ -335,9 +345,9 @@
 
 2.4. Q. How stable is Python?
 
-A. Very stable.  While the current version number (1.0.2) would
-suggest it is in the early stages of development, in fact new, stable
-releases (numbered 0.9.x) have been coming out roughly every 3 to 6
+A. Very stable.  While the current version number would suggest it is
+in the early stages of development, in fact new, stable releases
+(numbered 0.9.x and 1.0.x) have been coming out roughly every 3 to 6
 months for the past four years.
 
 2.5. Q. What new developments are expected for Python in the future?
@@ -361,6 +371,15 @@
 applications, e.g. by renaming most global symbols to have a "Py"
 prefix and providing more documentation and threading support.
 
+2.6. Q. Is it reasonable to propose incompatible changes to Python?
+
+A. In general, no.  There are already millions of lines of Python code
+around the world, so any changes in the language that invalidates more
+than a very small fraction of existing programs has to be frowned
+upon.  Even if you can provide a conversion program, there still is
+the problem of updating all documentation.  Providing a gradual
+upgrade path is the only way if a feature has to be changed.
+
 
 3. Building Python
 ==================
@@ -409,7 +428,15 @@
 Makefile" in the Modules subdirectory (or just run "make" at the
 toplevel).
 
-3.7. Q. Other trouble building Python 1.0.2 on platform X.
+3.7. Q. Python built with gcc for the DEC Alpha doesn't work.
+
+People have reported problems with both gcc 2.5.8 and 2.6.0.  The DEC
+OSF/1 cc compiler does not have these problems so it's probably gcc's
+fault.  One person reported that the problem went away when using -g
+instead of -O so this may be an option if you insist on using gcc.  If
+someone tracks it down more completely I'd like to hear about it!
+
+3.8. Q. Other trouble building Python on platform X.
 
 A. Please email the details to <guido@cwi.nl> and I'll look into it.
 
@@ -761,6 +788,93 @@
 declarations also helps, and the powerful operations of course), but
 it certainly helps!
 
+6.5. Q. Why are Python strings immutable?
+
+A. There are two advantages.  One is performance: knowing that a
+string is immutable makes it easy to lay it out at construction time
+-- fixed and unchanging storage requirements.  (This is also one of
+the reasons for the the distinction between tuples and lists.)  The
+other is that strings in Python are considered as "elemental" as
+numbers.  No amount of activity will change the value 8 to anything
+else, and in Python, no amount of activity will change the string
+"eight" to anything else.  (Adapted from Jim Roskind)
+
+6.6. Q. Why don't strings have methods like index() or sort(), like
+lists?
+
+A. Good question.  Strings currently don't have methods at all
+(likewise tuples and numbers).  Long ago, it seemed unnecessary to
+implement any of these functions in C, so a standard library module
+"string" written in Python was created that performs string related
+operations.  Since then, the cry for performance has moved most of
+them into the built-in module strop (this is imported by module
+string, which is still the perferred interface, without loss of
+performance except during initialization).  Some of these functions
+(e.g. index()) could easily be implemented as string methods instead,
+but others (e.g. sort()) can't, since their interface prescribes that
+they modify the object, while strings are immutable (see the previous
+question).
+
+6.7. Q. Why does Python use methods for some functionality
+(e.g. list.index()) but functions for other (e.g. len(list))?
+
+A. Functions are used for those operations that are generic for a
+group of types and which should work even for objects that don't have
+methods at all (e.g. numbers, strings, tuples).  Also, implementing
+len(), max(), min() as a built-in function is actually less code than
+implementing them as methods for each type.  One can quibble about
+individual cases but it's really too late to change such things
+fundamentally now.
+
+6.8. Q. Why can't I derive a class from built-in types (e.g. lists or
+files)?
+
+A. This is caused by the relatively late addition of (user-defined)
+classes to the language -- the implementation framework doesn't easily
+allow it.  See the answer to question 4.2 for a work-around.  This
+*may* be fixed in the (distant) future.
+
+6.9. Q. Why must 'self' be declared and used explicitly in method
+definitions and calls?
+
+A. By asking this question you reveal your C++ background. :-)
+When I added classes, this was (again) the simplest way of
+implementing methods without too many changes to the interpreter.  I
+borrowed the idea from Modula-3.  It turns out to be very useful, for
+a variety of reasons.
+
+First, it makes it more obvious that you are using a method or
+instance attribute instead of a local variable.  Reading "self.x" or
+"self.meth()" makes it absolutely clear that an instance variable or
+method is used even if you don't know the class definition by heart.
+In C++, you can sort of tell by the lack of a local variable
+declaration (assuming globals are rare or reasily recognizable) -- but
+in Python, there are no local variable declarations, so you'd have to
+look up the class definition to be sure.
+
+Second, it means that no special syntax is necessary if you want to
+explicitly reference or call the method from a particular class.  In
+C++, if you want to use a method from base class that is overridden in
+a derived class, you have to use the :: operator -- in Python you can
+write baseclass.methodname(self, <argument list>).  This is
+particularly useful for __init__() methods, and in general in cases
+where a derived class method wants to extend the base class method of
+the same name and thus has to call the base class method somehow.
+
+Lastly, for instance variables, it solves a syntactic problem with
+assignment: since local variables in Python are (by definition!) those
+variables to which a value assigned in a function body (and that
+aren't explicitly declared global), there has to be some way to tell
+the interpreter that an assignment was meant to assign to an instance
+variable instead of to a local variable, and it should preferably be
+syntactic (for efficiency reasons).  C++ does this through
+declarations, but Python doesn't have declarations and it would be a
+pity having to introduce them just for this purpose.  Using the
+explicit "self.var" solves this nicely.  Similarly, for using instance
+variables, having to write "self.var" means that references to
+unqualified names inside a method don't have to search the instance's
+directories.
+
 
 7. Using Python on non-UNIX platforms
 =====================================
@@ -805,9 +919,9 @@
 
 A. You still need to copy the files from the distribution directory
 "python/Lib" to your system.  If you don't have the full distribution,
-you can get the file pythonlib1.0.2.tar.gz from most ftp sites carrying
-Python; this is a subset of the distribution containing just those
-file.
+you can get the file pythonlib<version>.tar.gz from most ftp sites
+carrying Python; this is a subset of the distribution containing just
+those file.
 
 Once you have installed the library, you need to point sys.path to it.
 Assuming the library is in C:\misc\python\lib, the following commands