rest25/whatsnew/2.4.rst => rest262/whatsnew/2.4.rst
f1****************************
n2-  What's New in Python 2.4  
n2+  What's New in Python 2.4
3****************************
4
5:Author: A.M. Kuchling
6
7.. |release| replace:: 1.02
8
n9-.. % $Id: whatsnew24.tex 50936 2006-07-29 15:42:46Z andrew.kuchling $
n9+.. $Id: whatsnew24.tex 54632 2007-03-31 11:59:54Z georg.brandl $
10-.. % Don't write extensive text for new sections; I'll do that.
10+.. Don't write extensive text for new sections; I'll do that.
11-.. % Feel free to add commented-out reminders of things that need
11+.. Feel free to add commented-out reminders of things that need
12-.. to be covered.  --amk
12+.. to be covered.  --amk
13
14This article explains the new features in Python 2.4.1, released on March 30,
152005.
16
17Python 2.4 is a medium-sized release.  It doesn't introduce as many changes as
18the radical Python 2.2, but introduces more features than the conservative 2.3
19release.  The most significant new language features are function decorators and
20generator expressions; most other changes are to the standard library.
21
22According to the CVS change logs, there were 481 patches applied and 502 bugs
23fixed between Python 2.3 and 2.4.  Both figures are likely to be underestimates.
24
25This article doesn't attempt to provide a complete specification of every single
26new feature, but instead provides a brief introduction to each feature.  For
27full details, you should refer to the documentation for Python 2.4, such as the
n28-Python Library Reference (XXX reference: ../lib/lib.html) and the Python
n28+Python Library Reference and the Python Reference Manual.  Often you will be
29-Reference Manual (XXX reference: ../ref/ref.html).  Often you will be referred
30-to the PEP for a particular new feature for explanations of the implementation
29+referred to the PEP for a particular new feature for explanations of the
31-and design rationale.
30+implementation and design rationale.
32
n33-.. % ======================================================================
n32+.. ======================================================================
34
35
36PEP 218: Built-In Set Objects
37=============================
38
39Python 2.3 introduced the :mod:`sets` module.  C implementations of set data
40types have now been added to the Python core as two new built-in types,
41:func:`set(iterable)` and :func:`frozenset(iterable)`.  They provide high speed
59   >>> a & b                               # letters in both a and b
60   set(['a', 'c'])
61   >>> a ^ b                               # letters in a or b but not both
62   set(['r', 'd', 'b', 'm', 'z', 'l'])
63
64   >>> a.add('z')                          # add a new element
65   >>> a.update('wxy')                     # add multiple new elements
66   >>> a
n67-   set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'x', 'z'])       
n66+   set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'x', 'z'])
68   >>> a.remove('x')                       # take one element out
69   >>> a
n70-   set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'z'])       
n69+   set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'z'])
71
72The :func:`frozenset` type is an immutable version of :func:`set`. Since it is
73immutable and hashable, it may be used as a dictionary key or as a member of
74another set.
75
76The :mod:`sets` module remains in the standard library, and may be useful if you
77wish to subclass the :class:`Set` or :class:`ImmutableSet` classes.  There are
78currently no plans to deprecate the module.
79
80
81.. seealso::
82
83   :pep:`218` - Adding a Built-In Set Object Type
84      Originally proposed by Greg Wilson and ultimately implemented by Raymond
85      Hettinger.
86
n87-.. % ======================================================================
n86+.. ======================================================================
88
89
90PEP 237: Unifying Long Integers and Integers
91============================================
92
93The lengthy transition process for this PEP, begun in Python 2.2, takes another
94step forward in Python 2.4.  In 2.3, certain integer operations that would
95behave differently after int/long unification triggered :exc:`FutureWarning`
104
105
106.. seealso::
107
108   :pep:`237` - Unifying Long Integers and Integers
109      Original PEP written by Moshe Zadka and GvR.  The changes for 2.4 were
110      implemented by  Kalle Svensson.
111
n112-.. % ======================================================================
n111+.. ======================================================================
113
114
115PEP 289: Generator Expressions
116==============================
117
118The iterator feature introduced in Python 2.2 and the :mod:`itertools` module
119make it easier to write programs that loop through large data sets without
120having the entire data set in memory at one time.  List comprehensions don't fit
161
162
163.. seealso::
164
165   :pep:`289` - Generator Expressions
166      Proposed by Raymond Hettinger and implemented by Jiwon Seo with early efforts
167      steered by Hye-Shik Chang.
168
n169-.. % ======================================================================
n168+.. ======================================================================
170
171
172PEP 292: Simpler String Substitutions
173=====================================
174
175Some new classes in the standard library provide an alternative mechanism for
176substituting variables into strings; this style of substitution may be better
177for applications where untrained users need to edit templates.
195
196   >>> import string
197   >>> t = string.Template('$page: $title')
198   >>> t.substitute({'page':2, 'title': 'The Best of Times'})
199   '2: The Best of Times'
200
201If a key is missing from the dictionary, the :meth:`substitute` method will
202raise a :exc:`KeyError`.  There's also a :meth:`safe_substitute` method that
n203-ignores missing keys:
n202+ignores missing keys::
204- 
205-.. % $ Terminate $-mode for Emacs
206- 
207-::
208
209   >>> t = string.Template('$page: $title')
210   >>> t.safe_substitute({'page':3})
211   '3: $title'
212
n213-.. % $ Terminate math-mode for Emacs
214- 
215
216.. seealso::
217
218   :pep:`292` - Simpler String Substitutions
219      Written and implemented  by Barry Warsaw.
220
n221-.. % ======================================================================
n214+.. ======================================================================
222
223
224PEP 318: Decorators for Functions and Methods
225=============================================
226
227Python 2.2 extended Python's object model by adding static methods and class
228methods, but it didn't extend Python's syntax to provide any new way of defining
229static or class methods.  Instead, you had to write a :keyword:`def` statement
342   :pep:`318` - Decorators for Functions, Methods and Classes
343      Written  by Kevin D. Smith, Jim Jewett, and Skip Montanaro.  Several people
344      wrote patches implementing function decorators, but the one that was actually
345      checked in was patch #979728, written by Mark Russell.
346
347   http://www.python.org/moin/PythonDecoratorLibrary
348      This Wiki page contains several examples of decorators.
349
n350-.. % ======================================================================
n343+.. ======================================================================
351
352
353PEP 322: Reverse Iteration
354==========================
355
356A new built-in function, :func:`reversed(seq)`, takes a sequence and returns an
357iterator that loops over the elements of the sequence  in reverse order.   ::
358
359   >>> for i in reversed(xrange(1,4)):
360   ...    print i
n361-   ... 
n354+   ...
362   3
363   2
364   1
365
366Compared to extended slicing, such as ``range(1,4)[::-1]``, :func:`reversed` is
367easier to read, runs faster, and uses substantially less memory.
368
369Note that :func:`reversed` only accepts sequences, not arbitrary iterators.  If
370you want to reverse an iterator, first convert it to  a list with :func:`list`.
371::
372
373   >>> input = open('/etc/passwd', 'r')
374   >>> for line in reversed(list(input)):
375   ...   print line
n376-   ... 
n369+   ...
377   root:*:0:0:System Administrator:/var/root:/bin/tcsh
378     ...
379
380
381.. seealso::
382
383   :pep:`322` - Reverse Iteration
384      Written and implemented by Raymond Hettinger.
385
n386-.. % ======================================================================
n379+.. ======================================================================
387
388
389PEP 324: New subprocess Module
390==============================
391
392The standard library provides a number of ways to execute a subprocess, offering
393different features and different levels of complexity.
394:func:`os.system(command)` is easy to use, but slow (it runs a shell process
398is confusing.  The :mod:`subprocess` module cleans  this up, providing a unified
399interface that offers all the features you might need.
400
401Instead of :mod:`popen2`'s collection of classes, :mod:`subprocess` contains a
402single class called :class:`Popen`  whose constructor supports a number of
403different keyword arguments. ::
404
405   class Popen(args, bufsize=0, executable=None,
n406-            stdin=None, stdout=None, stderr=None,
n399+               stdin=None, stdout=None, stderr=None,
407-            preexec_fn=None, close_fds=False, shell=False,
400+               preexec_fn=None, close_fds=False, shell=False,
408-            cwd=None, env=None, universal_newlines=False,
401+               cwd=None, env=None, universal_newlines=False,
409-            startupinfo=None, creationflags=0):
402+               startupinfo=None, creationflags=0):
410
411*args* is commonly a sequence of strings that will be the arguments to the
412program executed as the subprocess.  (If the *shell* argument is true, *args*
413can be a string which will then be passed on to the shell for interpretation,
414just as :func:`os.system` does.)
415
416*stdin*, *stdout*, and *stderr* specify what the subprocess's input, output, and
417error streams will be.  You can provide a file object or a file descriptor, or
464
465
466.. seealso::
467
468   :pep:`324` - subprocess - New process module
469      Written and implemented by Peter Åstrand, with assistance from Fredrik Lundh and
470      others.
471
n472-.. % ======================================================================
n465+.. ======================================================================
473
474
475PEP 327: Decimal Data Type
476==========================
477
478Python has always supported floating-point (FP) numbers, based on the underlying
479C :ctype:`double` type, as a data type.  However, while most programming
480languages provide a floating-point type, many people (even programmers) are
652you can change the properties of this context to alter the default precision,
653rounding, or trap handling.  The following example shows the effect of changing
654the precision of the default context::
655
656   >>> decimal.getcontext().prec
657   28
658   >>> decimal.Decimal(1) / decimal.Decimal(7)
659   Decimal("0.1428571428571428571428571429")
n660-   >>> decimal.getcontext().prec = 9 
n653+   >>> decimal.getcontext().prec = 9
661   >>> decimal.Decimal(1) / decimal.Decimal(7)
662   Decimal("0.142857143")
663
664The default action for error conditions is selectable; the module can either
665return a special value such as infinity or not-a-number, or exceptions can be
666raised::
667
668   >>> decimal.Decimal(1) / decimal.Decimal(0)
669   Traceback (most recent call last):
670     ...
671   decimal.DivisionByZero: x / 0
672   >>> decimal.getcontext().traps[decimal.DivisionByZero] = False
673   >>> decimal.Decimal(1) / decimal.Decimal(0)
674   Decimal("Infinity")
n675-   >>> 
n668+   >>>
676
677The :class:`Context` instance also has various methods for formatting  numbers
678such as :meth:`to_eng_string` and :meth:`to_sci_string`.
679
680For more information, see the documentation for the :mod:`decimal` module, which
681includes a quick-start tutorial and a reference.
682
683
694      The article uses Fortran code to illustrate many of the problems that floating-
695      point inaccuracy can cause.
696
697   http://www2.hursley.ibm.com/decimal/
698      A description of a decimal-based representation.  This representation is being
699      proposed as a standard, and underlies the new Python decimal type.  Much of this
700      material was written by Mike Cowlishaw, designer of the Rexx language.
701
n702-.. % ======================================================================
n695+.. ======================================================================
703
704
705PEP 328: Multi-line Imports
706===========================
707
708One language change is a small syntactic tweak aimed at making it easier to
709import many names from a module.  In a ``from module import names`` statement,
710*names* is a sequence of names separated by commas.  If the sequence is  very
730PEP was not implemented for Python 2.4, but was completed for Python 2.5.
731
732
733.. seealso::
734
735   :pep:`328` - Imports: Multi-Line and Absolute/Relative
736      Written by Aahz.  Multi-line imports were implemented by Dima Dorfman.
737
n738-.. % ======================================================================
n731+.. ======================================================================
739
740
741PEP 331: Locale-Independent Float/String Conversions
742====================================================
743
744The :mod:`locale` modules lets Python software select various conversions and
745display conventions that are localized to a particular country or language.
746However, the module was careful to not change the numeric locale because various
758
759* :cfunc:`PyOS_ascii_strtod(str, ptr)`  and :cfunc:`PyOS_ascii_atof(str, ptr)`
760  both convert a string to a C :ctype:`double`.
761
762* :cfunc:`PyOS_ascii_formatd(buffer, buf_len, format, d)` converts a
763  :ctype:`double` to an ASCII string.
764
765The code for these functions came from the GLib library
n766-(`<http://developer.gnome.org/arch/gtk/glib.html>`_), whose developers kindly
n759+(http://developer.gnome.org/arch/gtk/glib.html), whose developers kindly
767relicensed the relevant functions and donated them to the Python Software
768Foundation.  The :mod:`locale` module  can now change the numeric locale,
769letting extensions such as GTK+  produce the correct results.
770
771
772.. seealso::
773
774   :pep:`331` - Locale-Independent Float/String Conversions
775      Written by Christian R. Reis, and implemented by Gustavo Carneiro.
776
n777-.. % ======================================================================
n770+.. ======================================================================
778
779
780Other Language Changes
781======================
782
783Here are all of the changes that Python 2.4 makes to the core Python language.
784
785* Decorators for functions and methods were added (:pep:`318`).
805
806* Strings also gained an :meth:`rsplit` method that works like the :meth:`split`
807  method but splits from the end of the string.   (Contributed by Sean
808  Reifschneider.) ::
809
810     >>> 'www.python.org'.split('.', 1)
811     ['www', 'python.org']
812     'www.python.org'.rsplit('.', 1)
n813-     ['www.python', 'org']        
n806+     ['www.python', 'org']
814
815* Three keyword parameters, *cmp*, *key*, and *reverse*, were added to the
816  :meth:`sort` method of lists. These parameters make some common usages of
817  :meth:`sort` simpler. All of these parameters are optional.
818
819  For the *cmp* parameter, the value should be a comparison function that takes
820  two parameters and returns -1, 0, or +1 depending on how the parameters compare.
821  This function will then be used to sort the list.  Previously this was the only
928* Encountering a failure while importing a module no longer leaves a partially-
929  initialized module object in ``sys.modules``.  The incomplete module object left
930  behind would fool further imports of the same module into succeeding, leading to
931  confusing errors.   (Fixed by Tim Peters.)
932
933* :const:`None` is now a constant; code that binds a new value to  the name
934  ``None`` is now a syntax error. (Contributed by Raymond Hettinger.)
935
n936-.. % ======================================================================
n929+.. ======================================================================
937
938
939Optimizations
940-------------
941
942* The inner loops for list and tuple slicing were optimized and now run about
943  one-third faster.  The inner loops for dictionaries were also optimized,
944  resulting in performance boosts for :meth:`keys`, :meth:`values`, :meth:`items`,
979  together. (Contributed by Armin Rigo.)
980
981The net result of the 2.4 optimizations is that Python 2.4 runs the pystone
982benchmark around 5% faster than Python 2.3 and 35% faster than Python 2.2.
983(pystone is not a particularly good benchmark, but it's the most commonly used
984measurement of Python's performance.  Your own applications may show greater or
985smaller benefits from Python 2.4.)
986
n987-.. % pystone is almost useless for comparing different versions of Python;
n980+.. pystone is almost useless for comparing different versions of Python;
988-.. % instead, it excels at predicting relative Python performance on
981+   instead, it excels at predicting relative Python performance on different
989-.. % different machines.
990-.. % So, this section would be more informative if it used other tools
982+   machines.  So, this section would be more informative if it used other tools
991-.. % such as pybench and parrotbench.  For a more application oriented
983+   such as pybench and parrotbench.  For a more application oriented benchmark,
992-.. % benchmark, try comparing the timings of test_decimal.py under 2.3
984+   try comparing the timings of test_decimal.py under 2.3 and 2.4.
993-.. % and 2.4.
994
n995-.. % ======================================================================
n986+.. ======================================================================
996
997
998New, Improved, and Deprecated Modules
999=====================================
1000
1001As usual, Python's standard library received a number of enhancements and bug
1002fixes.  Here's a partial list of the most notable changes, sorted alphabetically
1003by module name. Consult the :file:`Misc/NEWS` file in the source tree for a more
1049     deque(['f', 'g', 'h', 'i', 'j'])
1050     >>> d.pop()                 # return and remove the rightmost item
1051     'j'
1052     >>> d.popleft()             # return and remove the leftmost item
1053     'f'
1054     >>> list(d)                 # list the contents of the deque
1055     ['g', 'h', 'i']
1056     >>> 'h' in d                # search the deque
n1057-     True  
n1048+     True
1058
1059  Several modules, such as the :mod:`Queue` and :mod:`threading` modules, now take
1060  advantage of :class:`collections.deque` for improved performance.  (Contributed
1061  by Raymond Hettinger.)
1062
1063* The :mod:`ConfigParser` classes have been enhanced slightly. The :meth:`read`
1064  method now returns a list of the files that were successfully parsed, and the
1065  :meth:`set` method raises :exc:`TypeError` if passed a *value* argument that
1110  Here's an example to make this clearer.  The *key* function simply returns
1111  whether a number is even or odd, so the result of :func:`groupby` is to return
1112  consecutive runs of odd or even numbers. ::
1113
1114     >>> import itertools
1115     >>> L = [2, 4, 6, 7, 8, 9, 11, 12, 14]
1116     >>> for key_val, it in itertools.groupby(L, lambda x: x % 2):
1117     ...    print key_val, list(it)
n1118-     ... 
n1109+     ...
1119     0 [2, 4, 6]
1120     1 [7]
1121     0 [8]
1122     1 [9, 11]
1123     0 [12, 14]
n1124-     >>> 
n1115+     >>>
1125
1126  :func:`groupby` is typically used with sorted input.  The logic for
1127  :func:`groupby` is similar to the Unix ``uniq`` filter which makes it handy for
1128  eliminating, counting, or identifying duplicate elements::
1129
1130     >>> word = 'abracadabra'
1131     >>> letters = sorted(word)   # Turn string into a sorted list of letters
n1132-     >>> letters 
n1123+     >>> letters
1133     ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'r', 'r']
1134     >>> for k, g in itertools.groupby(letters):
1135     ...    print k, list(g)
n1136-     ... 
n1127+     ...
1137     a ['a', 'a', 'a', 'a', 'a']
1138     b ['b', 'b']
1139     c ['c']
1140     d ['d']
1141     r ['r', 'r']
1142     >>> # List unique letters
n1143-     >>> [k for k, g in groupby(letters)]                     
n1134+     >>> [k for k, g in groupby(letters)]
1144     ['a', 'b', 'c', 'd', 'r']
1145     >>> # Count letter occurrences
n1146-     >>> [(k, len(list(g))) for k, g in groupby(letters)]     
n1137+     >>> [(k, len(list(g))) for k, g in groupby(letters)]
1147     [('a', 5), ('b', 2), ('c', 1), ('d', 1), ('r', 2)]
1148
1149  (Contributed by Hye-Shik Chang.)
1150
1151* :mod:`itertools` also gained a function named :func:`tee(iterator, N)` that
1152  returns *N* independent iterators that replicate *iterator*.  If *N* is omitted,
1153  the default is 2. ::
1154
1155     >>> L = [1,2,3]
1156     >>> i1, i2 = itertools.tee(L)
1157     >>> i1,i2
1158     (<itertools.tee object at 0x402c2080>, <itertools.tee object at 0x402c2090>)
1159     >>> list(i1)               # Run the first iterator to exhaustion
1160     [1, 2, 3]
1161     >>> list(i2)               # Run the second iterator to exhaustion
1162     [1, 2, 3]
n1163-     >
n1154+ 
1164  Note that :func:`tee` has to keep copies of the values returned  by the
1165  iterator; in the worst case, it may need to keep all of them.   This should
1166  therefore be used carefully if the leading iterator can run far ahead of the
1167  trailing iterator in a long stream of inputs. If the separation is large, then
1168  you might as well use  :func:`list` instead.  When the iterators track closely
1169  with one another, :func:`tee` is ideal.  Possible applications include
1170  bookmarking, windowing, or lookahead iterators. (Contributed by Raymond
1171  Hettinger.)
1179  :func:`basicConfig` function to simplify log configuration.  The default
1180  behavior is to log messages to standard error, but various keyword arguments can
1181  be specified to log to a particular file, change the logging format, or set the
1182  logging level. For example::
1183
1184     import logging
1185     logging.basicConfig(filename='/var/log/application.log',
1186         level=0,  # Log all messages
n1187-         format='%(levelname):%(process):%(thread):%(message)')             
n1178+         format='%(levelname):%(process):%(thread):%(message)')
1188
1189  Other additions to the :mod:`logging` package include a :meth:`log(level, msg)`
1190  convenience method, as well as a :class:`TimedRotatingFileHandler` class that
1191  rotates its log files at a timed interval.  The module already had
1192  :class:`RotatingFileHandler`, which rotated logs once the file exceeded a
1193  certain size.  Both classes derive from a new :class:`BaseRotatingHandler` class
1194  that can be used to implement other rotating handlers.
1195
1318
1319* The :mod:`xmlrpclib` module now supports a multi-call extension for
1320  transmitting multiple XML-RPC calls in a single HTTP operation. (Contributed by
1321  Brian Quinlan.)
1322
1323* The :mod:`mpz`, :mod:`rotor`, and :mod:`xreadlines` modules have  been
1324  removed.
1325
n1326-.. % ======================================================================
n1317+.. ======================================================================
1327-.. % whole new modules get described in subsections here
1318+.. whole new modules get described in subsections here
1328-.. % =====================
1319+.. =====================
1329
1330
1331cookielib
1332---------
1333
1334The :mod:`cookielib` library supports client-side handling for HTTP cookies,
1335mirroring the :mod:`Cookie` module's server-side cookie support. Cookies are
1336stored in cookie jars; the library transparently stores cookies offered by the
1344format as the Perl libwww library.
1345
1346:mod:`urllib2` has been changed to interact with :mod:`cookielib`:
1347:class:`HTTPCookieProcessor` manages a cookie jar that is used when accessing
1348URLs.
1349
1350This module was contributed by John J. Lee.
1351
n1352-.. % ==================
n1343+.. ==================
1353
1354
1355doctest
1356-------
1357
1358The :mod:`doctest` module underwent considerable refactoring thanks to Edward
1359Loper and Tim Peters.  Testing can still be as simple as running
1360:func:`doctest.testmod`, but the refactorings allow customizing the module's
1432       L = 'here is a rather lengthy list of words'.split()
1433       for word in L[:n]:
1434           print word
1435
1436Running the above function's tests with :const:`doctest.REPORT_UDIFF` specified,
1437you get the following output::
1438
1439   **********************************************************************
n1440-   File ``t.py'', line 15, in g
n1431+   File "t.py", line 15, in g
1441   Failed example:
1442       g(4)
1443   Differences (unified diff with -expected +actual):
1444       @@ -2,3 +2,3 @@
1445        is
1446        a
1447       -lengthy
1448       +rather
1449   **********************************************************************
1450
n1451-.. % ======================================================================
n1442+.. ======================================================================
1452
1453
1454Build and C API Changes
1455=======================
1456
1457Some of the changes to Python's build process and to the C API are:
1458
1459* Three new convenience macros were added for common return values from
1496  Counter register.  Note that the :option:`----with-tsc` switch is slightly
1497  misnamed, because the profiling feature also works on the PowerPC platform,
1498  though that processor architecture doesn't call that register "the TSC
1499  register".  (Contributed by Jeremy Hylton.)
1500
1501* The :ctype:`tracebackobject` type has been renamed to
1502  :ctype:`PyTracebackObject`.
1503
n1504-.. % ======================================================================
n1495+.. ======================================================================
1505
1506
1507Port-Specific Changes
1508---------------------
1509
1510* The Windows port now builds under MSVC++ 7.1 as well as version 6.
1511  (Contributed by Martin von Löwis.)
1512
n1513-.. % ======================================================================
n1504+.. ======================================================================
1514
1515
1516Porting to Python 2.4
1517=====================
1518
1519This section lists previously described changes that may require changes to your
1520code:
1521
1552
1553* :const:`None` is now a constant; code that binds a new value to  the name
1554  ``None`` is now a syntax error.
1555
1556* The :func:`signals.signal` function now raises a :exc:`RuntimeError` exception
1557  for certain illegal values; previously these errors would pass silently.  For
1558  example, you can no longer set a handler on the :const:`SIGKILL` signal.
1559
n1560-.. % ======================================================================
n1551+.. ======================================================================
1561
1562
t1563-.. _acks:
t1554+.. _24acks:
1564
1565Acknowledgements
1566================
1567
1568The author would like to thank the following people for offering suggestions,
1569corrections and assistance with various drafts of this article: Koray Can, Hye-
1570Shik Chang, Michael Dyck, Raymond Hettinger, Brian Hurt, Hamish Lawson, Fredrik
1571Lundh, Sean Reifschneider, Sadruddin Rejeb.
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op