-
-
Notifications
You must be signed in to change notification settings - Fork 34.5k
Expand file tree
/
Copy pathNEWS
More file actions
2039 lines (1457 loc) · 80.2 KB
/
NEWS
File metadata and controls
2039 lines (1457 loc) · 80.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
What's New in Python 2.2a1?
===========================
Core
- Generators were added; this is a new way to create an iterator (see
below) using what looks like a simple function containing one or
more 'yield' statements. See PEP 255. Since this adds a new
keyword to the language, this feature must be enabled by including a
future statement: "from __future__ import generators" (see PEP 236).
Generators will become a standard feature in a future release
(probably 2.3). Without this future statement, 'yield' remains an
ordinary identifier, but a warning is issued each time it is used.
(These warnings currently don't conform to the warnings framework of
PEP 230; we intend to fix this in 2.2a2.)
- The UTF-16 codec was modified to be more RFC compliant. It will now
only remove BOM characters at the start of the string and then
only if running in native mode (UTF-16-LE and -BE won't remove a
leading BMO character).
- Strings now have a new method .decode() to complement the already
existing .encode() method. These two methods provide direct access
to the corresponding decoders and encoders of the registered codecs.
To enhance the usability of the .encode() method, the special
casing of Unicode object return values was dropped (Unicode objects
were auto-magically converted to string using the default encoding).
Both methods will now return whatever the codec in charge of the
requested encoding returns as object, e.g. Unicode codecs will
return Unicode objects when decoding is requested ("äöü".decode("latin-1")
will return u"äöü"). This enables codec writer to create codecs
for various simple to use conversions.
New codecs were added to demonstrate these new features (the .encode()
and .decode() columns indicate the type of the returned objects):
Name | .encode() | .decode() | Description
----------------------------------------------------------------------
uu | string | string | UU codec (e.g. for email)
base64 | string | string | base64 codec
quopri | string | string | quoted-printable codec
zlib | string | string | zlib compression
hex | string | string | 2-byte hex codec
rot-13 | string | Unicode | ROT-13 Unicode charmap codec
- Some operating systems now support the concept of a default Unicode
encoding for file system operations. Notably, Windows supports 'mbcs'
as the default. The Macintosh will also adopt this concept in the medium
term, although the default encoding for that platform will be other than
'mbcs'.
On operating system that support non-ASCII filenames, it is common for
functions that return filenames (such as os.listdir()) to return Python
string objects pre-encoded using the default file system encoding for
the platform. As this encoding is likely to be different from Python's
default encoding, converting this name to a Unicode object before passing
it back to the Operating System would result in a Unicode error, as Python
would attempt to use its default encoding (generally ASCII) rather than
the default encoding for the file system.
In general, this change simply removes surprises when working with
Unicode and the file system, making these operations work as you expect,
increasing the transparency of Unicode objects in this context.
See [????] for more details, including examples.
- Float (and complex) literals in source code were evaluated to full
precision only when running from a .py file; the same code loaded from a
.pyc (or .pyo) file could suffer numeric differences starting at about the
12th significant decimal digit. For example, on a machine with IEEE-754
floating arithmetic,
x = 9007199254740992.0
print long(x)
printed 9007199254740992 if run directly from .py, but 9007199254740000
if from a compiled (.pyc or .pyo) file. This was due to marshal using
str(float) instead of repr(float) when building code objects. marshal
now uses repr(float) instead, which should reproduce floats to full
machine precision (assuming the platform C float<->string I/O conversion
functions are of good quality).
This may cause floating-point results to change in some cases, and
usually for the better, but may also cause numerically unstable
algorithms to break.
- The implementation of dicts suffers fewer collisions, which has speed
benefits. However, the order in which dict entries appear in dict.keys(),
dict.values() and dict.items() may differ from previous releases for a
given dict. Nothing is defined about this order, so no program should
rely on it. Nevertheless, it's easy to write test cases that rely on the
order by accident, typically because of printing the str() or repr() of a
dict to an "expected results" file. See Lib/test/test_support.py's new
sortdict(dict) function for a simple way to display a dict in sorted
order.
- Many other small changes to dicts were made, resulting in faster
operation along the most common code paths.
- Dictionary objects now support the "in" operator: "x in dict" means
the same as dict.has_key(x).
- The update() method of dictionaries now accepts generic mapping
objects. Specifically the argument object must support the .keys()
and __getitem__() methods. This allows you to say, for example,
{}.update(UserDict())
- Iterators were added; this is a generalized way of providing values
to a for loop. See PEP 234. There's a new built-in function iter()
to return an iterator. There's a new protocol to get the next value
from an iterator using the next() method (in Python) or the
tp_iternext slot (in C). There's a new protocol to get iterators
using the __iter__() method (in Python) or the tp_iter slot (in C).
Iterating (i.e. a for loop) over a dictionary generates its keys.
Iterating over a file generates its lines.
- The following functions were generalized to work nicely with iterator
arguments:
map(), filter(), reduce(), zip()
list(), tuple() (PySequence_Tuple() and PySequence_Fast() in C API)
max(), min()
join() method of strings
extend() method of lists
'x in y' and 'x not in y' (PySequence_Contains() in C API)
operator.countOf() (PySequence_Count() in C API)
right-hand side of assignment statements with multiple targets, such as
x, y, z = some_iterable_object_returning_exactly_3_values
- Accessing module attributes is significantly faster (for example,
random.random or os.path or yourPythonModule.yourAttribute).
- Comparing dictionary objects via == and != is faster, and now works even
if the keys and values don't support comparisons other than ==.
- Comparing dictionaries in ways other than == and != is slower: there were
insecurities in the dict comparison implementation that could cause Python
to crash if the element comparison routines for the dict keys and/or
values mutated the dicts. Making the code bulletproof slowed it down.
- Collisions in dicts are resolved via a new approach, which can help
dramatically in bad cases. For example, looking up every key in a dict
d with d.keys() == [i << 16 for i in range(20000)] is approximately 500x
faster now. Thanks to Christian Tismer for pointing out the cause and
the nature of an effective cure (last December! better late than never).
- repr() is much faster for large containers (dict, list, tuple).
Library
- The flags used in dlopen calls can now be configured using
sys.setdlopenflags and queried using sys.getdlopenflags.
- Fredrik Lundh's xmlrpclib is now a standard library module. This
provides full client-side XML-RPC support. In addition,
Demo/xmlrpc/ contains two server frameworks (one SocketServer-based,
one asyncore-based). Thanks to Eric Raymond for the documentation.
- The xrange() object is simplified: it no longer supports slicing,
repetition, comparisons, efficient 'in' checking, the tolist()
method, or the start, stop and step attributes. See PEP 260.
- A new function fnmatch.filter to filter lists of file names was added.
- calendar.py uses month and day names based on the current locale.
- strop is now *really* obsolete (this was announced before with 1.6),
and issues DeprecationWarning when used (except for the four items
that are still imported into string.py).
- Cookie.py now sorts key+value pairs by key in output strings.
- pprint.isrecursive(object) didn't correctly identify recursive objects.
Now it does.
- pprint functions now much faster for large containers (tuple, list, dict).
- New 'q' and 'Q' format codes in the struct module, corresponding to C
types "long long" and "unsigned long long" (on Windows, __int64). In
native mode, these can be used only when the platform C compiler supports
these types (when HAVE_LONG_LONG is #define'd by the Python config
process), and then they inherit the sizes and alignments of the C types.
In standard mode, 'q' and 'Q' are supported on all platforms, and are
8-byte integral types.
- The site module installs a new built-in function 'help' that invokes
pydoc.help. It must be invoked as 'help()'; when invoked as 'help',
it displays a message reminding the user to use 'help()' or
'help(object)'.
Tests
- New test_mutants.py runs dict comparisons where the key and value
comparison operators mutute the dicts randomly during comparison. This
rapidly causes Python to crash under earlier releases (not for the faint
of heart: it can also cause Win9x to freeze or reboot!).
- New test_pprint.py verfies that pprint.isrecursive() and
pprint.isreadable() return sensible results. Also verifies that simple
cases produce correct output.
New platforms
- Python should compile and run out of the box using the Borland C
compiler (under Windows), thanks to Stephen Hansen.
C API
- Removed the unused last_is_sticky argument from the internal
_PyTuple_Resize(). If this affects you, you were cheating.
======================================================================
What's New in Python 2.1 (final)?
=================================
We only changed a few things since the last release candidate, all in
Python library code:
- A bug in the locale module was fixed that affected locales which
define no grouping for numeric formatting.
- A few bugs in the weakref module's implementations of weak
dictionaries (WeakValueDictionary and WeakKeyDictionary) were fixed,
and the test suite was updated to check for these bugs.
- An old bug in the os.path.walk() function (introduced in Python
2.0!) was fixed: a non-existent file would cause an exception
instead of being ignored.
- Fixed a few bugs in the new symtable module found by Neil Norwitz's
PyChecker.
What's New in Python 2.1c2?
===========================
A flurry of small changes, and one showstopper fixed in the nick of
time made it necessary to release another release candidate. The list
here is the *complete* list of patches (except version updates):
Core
- Tim discovered a nasty bug in the dictionary code, caused by
PyDict_Next() calling dict_resize(), and the GC code's use of
PyDict_Next() violating an assumption in dict_items(). This was
fixed with considerable amounts of band-aid, but the net effect is a
saner and more robust implementation.
- Made a bunch of symbols static that were accidentally global.
Build and Ports
- The setup.py script didn't check for a new enough version of zlib
(1.1.3 is needed). Now it does.
- Changed "make clean" target to also remove shared libraries.
- Added a more general warning about the SGI Irix optimizer to README.
Library
- Fix a bug in urllib.basejoin("http://host", "../file.html") which
omitted the slash between host and file.html.
- The mailbox module's _Mailbox class contained a completely broken
and undocumented seek() method. Ripped it out.
- Fixed a bunch of typos in various library modules (urllib2, smtpd,
sgmllib, netrc, chunk) found by Neil Norwitz's PyChecker.
- Fixed a few last-minute bugs in unittest.
Extensions
- Reverted the patch to the OpenSSL code in socketmodule.c to support
RAND_status() and the EGD, and the subsequent patch that tried to
fix it for pre-0.9.5 versions; the problem with the patch is that on
some systems it issues a warning whenever socket is imported, and
that's unacceptable.
Tests
- Fixed the pickle tests to work with "import test.test_pickle".
- Tweaked test_locale.py to actually run the test Windows.
- In distutils/archive_util.py, call zipfile.ZipFile() with mode "w",
not "wb" (which is not a valid mode at all).
- Fix pstats browser crashes. Import readline if it exists to make
the user interface nicer.
- Add "import thread" to the top of test modules that import the
threading module (test_asynchat and test_threadedtempfile). This
prevents test failures caused by a broken threading module resulting
from a previously caught failed import.
- Changed test_asynchat.py to set the SO_REUSEADDR option; this was
needed on some platforms (e.g. Solaris 8) when the tests are run
twice in succession.
- Skip rather than fail test_sunaudiodev if no audio device is found.
What's New in Python 2.1c1?
===========================
This list was significantly updated when 2.1c2 was released; the 2.1c1
release didn't mention most changes that were actually part of 2.1c1:
Legal
- Copyright was assigned to the Python Software Foundation (PSF) and a
PSF license (very similar to the CNRI license) was added.
- The CNRI copyright notice was updated to include 2001.
Core
- After a public outcry, assignment to __debug__ is no longer illegal;
instead, a warning is issued. It will become illegal in 2.2.
- Fixed a core dump with "%#x" % 0, and changed the semantics so that
"%#x" now always prepends "0x", even if the value is zero.
- Fixed some nits in the bytecode compiler.
- Fixed core dumps when calling certain kinds of non-functions.
- Fixed various core dumps caused by reference count bugs.
Build and Ports
- Use INSTALL_SCRIPT to install script files.
- New port: SCO Unixware 7, by Billy G. Allie.
- Updated RISCOS port.
- Updated BeOS port and notes.
- Various other porting problems resolved.
Library
- The TERMIOS and SOCKET modules are now truly obsolete and
unnecessary. Their symbols are incorporated in the termios and
socket modules.
- Fixed some 64-bit bugs in pickle, cPickle, and struct, and added
better tests for pickling.
- threading: make Condition.wait() robust against KeyboardInterrupt.
- zipfile: add support to zipfile to support opening an archive
represented by an open file rather than a file name. Fix bug where
the archive was not properly closed. Fixed a bug in this bugfix
where flush() was called for a read-only file.
- imputil: added an uninstall() method to the ImportManager.
- Canvas: fixed bugs in lower() and tkraise() methods.
- SocketServer: API change (added overridable close_request() method)
so that the TCP server can explicitly close the request.
- pstats: Eric Raymond added a simple interactive statistics browser,
invoked when the module is run as a script.
- locale: fixed a problem in format().
- webbrowser: made it work when the BROWSER environment variable has a
value like "/usr/bin/netscape". Made it auto-detect Konqueror for
KDE 2. Fixed some other nits.
- unittest: changes to allow using a different exception than
AssertionError, and added a few more function aliases. Some other
small changes.
- urllib, urllib2: fixed redirect problems and a coupleof other nits.
- asynchat: fixed a critical bug in asynchat that slipped through the
2.1b2 release. Fixed another rare bug.
- Fix some unqualified except: clauses (always a bad code example).
XML
- pyexpat: new API get_version_string().
- Fixed some minidom bugs.
Extensions
- Fixed a core dump in _weakref. Removed the weakref.mapping()
function (it adds nothing to the API).
- Rationalized the use of header files in the readline module, to make
it compile (albeit with some warnings) with the very recent readline
4.2, without breaking for earlier versions.
- Hopefully fixed a buffering problem in linuxaudiodev.
- Attempted a fix to make the OpenSSL support in the socket module
work again with pre-0.9.5 versions of OpenSSL.
Tests
- Added a test case for asynchat and asyncore.
- Removed coupling between tests where one test failing could break
another.
Tools
- Ping added an interactive help browser to pydoc, fixed some nits
in the rest of the pydoc code, and added some features to his
inspect module.
- An updated python-mode.el version 4.1 which integrates Ken
Manheimer's pdbtrack.el. This makes debugging Python code via pdb
much nicer in XEmacs and Emacs. When stepping through your program
with pdb, in either the shell window or the *Python* window, the
source file and line will be tracked by an arrow. Very cool!
- IDLE: syntax warnings in interactive mode are changed into errors.
- Some improvements to Tools/webchecker (ignore some more URL types,
follow some more links).
- Brought the Tools/compiler package up to date.
What's New in Python 2.1 beta 2?
================================
(Unlisted are many fixed bugs, more documentation, etc.)
Core language, builtins, and interpreter
- The nested scopes work (enabled by "from __future__ import
nested_scopes") is completed; in particular, the future now extends
into code executed through exec, eval() and execfile(), and into the
interactive interpreter.
- When calling a base class method (e.g. BaseClass.__init__(self)),
this is now allowed even if self is not strictly spoken a class
instance (e.g. when using metaclasses or the Don Beaudry hook).
- Slice objects are now comparable but not hashable; this prevents
dict[:] from being accepted but meaningless.
- Complex division is now calculated using less braindead algorithms.
This doesn't change semantics except it's more likely to give useful
results in extreme cases. Complex repr() now uses full precision
like float repr().
- sgmllib.py now calls handle_decl() for simple <!...> declarations.
- It is illegal to assign to the name __debug__, which is set when the
interpreter starts. It is effectively a compile-time constant.
- A warning will be issued if a global statement for a variable
follows a use or assignment of that variable.
Standard library
- unittest.py, a unit testing framework by Steve Purcell (PyUNIT,
inspired by JUnit), is now part of the standard library. You now
have a choice of two testing frameworks: unittest requires you to
write testcases as separate code, doctest gathers them from
docstrings. Both approaches have their advantages and
disadvantages.
- A new module Tix was added, which wraps the Tix extension library
for Tk. With that module, it is not necessary to statically link
Tix with _tkinter, since Tix will be loaded with Tcl's "package
require" command. See Demo/tix/.
- tzparse.py is now obsolete.
- In gzip.py, the seek() and tell() methods are removed -- they were
non-functional anyway, and it's better if callers can test for their
existence with hasattr().
Python/C API
- PyDict_Next(): it is now safe to call PyDict_SetItem() with a key
that's already in the dictionary during a PyDict_Next() iteration.
This used to fail occasionally when a dictionary resize operation
could be triggered that would rehash all the keys. All other
modifications to the dictionary are still off-limits during a
PyDict_Next() iteration!
- New extended APIs related to passing compiler variables around.
- New abstract APIs PyObject_IsInstance(), PyObject_IsSubclass()
implement isinstance() and issubclass().
- Py_BuildValue() now has a "D" conversion to create a Python complex
number from a Py_complex C value.
- Extensions types which support weak references must now set the
field allocated for the weak reference machinery to NULL themselves;
this is done to avoid the cost of checking each object for having a
weakly referencable type in PyObject_INIT(), since most types are
not weakly referencable.
- PyFrame_FastToLocals() and PyFrame_LocalsToFast() copy bindings for
free variables and cell variables to and from the frame's f_locals.
- Variants of several functions defined in pythonrun.h have been added
to support the nested_scopes future statement. The variants all end
in Flags and take an extra argument, a PyCompilerFlags *; examples:
PyRun_AnyFileExFlags(), PyRun_InteractiveLoopFlags(). These
variants may be removed in Python 2.2, when nested scopes are
mandatory.
Distutils
- the sdist command now writes a PKG-INFO file, as described in PEP 241,
into the release tree.
- several enhancements to the bdist_wininst command from Thomas Heller
(an uninstaller, more customization of the installer's display)
- from Jack Jansen: added Mac-specific code to generate a dialog for
users to specify the command-line (because providing a command-line with
MacPython is awkward). Jack also made various fixes for the Mac
and the Metrowerks compiler.
- added 'platforms' and 'keywords' to the set of metadata that can be
specified for a distribution.
- applied patches from Jason Tishler to make the compiler class work with
Cygwin.
What's New in Python 2.1 beta 1?
================================
Core language, builtins, and interpreter
- Following an outcry from the community about the amount of code
broken by the nested scopes feature introduced in 2.1a2, we decided
to make this feature optional, and to wait until Python 2.2 (or at
least 6 months) to make it standard. The option can be enabled on a
per-module basis by adding "from __future__ import nested_scopes" at
the beginning of a module (before any other statements, but after
comments and an optional docstring). See PEP 236 (Back to the
__future__) for a description of the __future__ statement. PEP 227
(Statically Nested Scopes) has been updated to reflect this change,
and to clarify the semantics in a number of endcases.
- The nested scopes code, when enabled, has been hardened, and most
bugs and memory leaks in it have been fixed.
- Compile-time warnings are now generated for a number of conditions
that will break or change in meaning when nested scopes are enabled:
- Using "from...import *" or "exec" without in-clause in a function
scope that also defines a lambda or nested function with one or
more free (non-local) variables. The presence of the import* or
bare exec makes it impossible for the compiler to determine the
exact set of local variables in the outer scope, which makes it
impossible to determine the bindings for free variables in the
inner scope. To avoid the warning about import *, change it into
an import of explicitly name object, or move the import* statement
to the global scope; to avoid the warning about bare exec, use
exec...in... (a good idea anyway -- there's a possibility that
bare exec will be deprecated in the future).
- Use of a global variable in a nested scope with the same name as a
local variable in a surrounding scope. This will change in
meaning with nested scopes: the name in the inner scope will
reference the variable in the outer scope rather than the global
of the same name. To avoid the warning, either rename the outer
variable, or use a global statement in the inner function.
- An optional object allocator has been included. This allocator is
optimized for Python objects and should be faster and use less memory
than the standard system allocator. It is not enabled by default
because of possible thread safety problems. The allocator is only
protected by the Python interpreter lock and it is possible that some
extension modules require a thread safe allocator. The object
allocator can be enabled by providing the "--with-pymalloc" option to
configure.
Standard library
- pyexpat now detects the expat version if expat.h defines it. A
number of additional handlers are provided, which are only available
since expat 1.95. In addition, the methods SetParamEntityParsing and
GetInputContext of Parser objects are available with 1.95.x
only. Parser objects now provide the ordered_attributes and
specified_attributes attributes. A new module expat.model was added,
which offers a number of additional constants if 1.95.x is used.
- xml.dom offers the new functions registerDOMImplementation and
getDOMImplementation.
- xml.dom.minidom offers a toprettyxml method. A number of DOM
conformance issues have been resolved. In particular, Element now
has an hasAttributes method, and the handling of namespaces was
improved.
- Ka-Ping Yee contributed two new modules: inspect.py, a module for
getting information about live Python code, and pydoc.py, a module
for interactively converting docstrings to HTML or text.
Tools/scripts/pydoc, which is now automatically installed into
<prefix>/bin, uses pydoc.py to display documentation; try running
"pydoc -h" for instructions. "pydoc -g" pops up a small GUI that
lets you browse the module docstrings using a web browser.
- New library module difflib.py, primarily packaging the SequenceMatcher
class at the heart of the popular ndiff.py file-comparison tool.
- doctest.py (a framework for verifying Python code examples in docstrings)
is now part of the std library.
Windows changes
- A new entry in the Start menu, "Module Docs", runs "pydoc -g" -- a
small GUI that lets you browse the module docstrings using your
default web browser.
- Import is now case-sensitive. PEP 235 (Import on Case-Insensitive
Platforms) is implemented. See
http://python.sourceforge.net/peps/pep-0235.html
for full details, especially the "Current Lower-Left Semantics" section.
The new Windows import rules are simpler than before:
A. If the PYTHONCASEOK environment variable exists, same as
before: silently accept the first case-insensitive match of any
kind; raise ImportError if none found.
B. Else search sys.path for the first case-sensitive match; raise
ImportError if none found.
The same rules have been implented on other platforms with case-
insensitive but case-preserving filesystems too (including Cygwin, and
several flavors of Macintosh operating systems).
- winsound module: Under Win9x, winsound.Beep() now attempts to simulate
what it's supposed to do (and does do under NT and 2000) via direct
port manipulation. It's unknown whether this will work on all systems,
but it does work on my Win98SE systems now and was known to be useless on
all Win9x systems before.
- Build: Subproject _test (effectively) renamed to _testcapi.
New platforms
- 2.1 should compile and run out of the box under MacOS X, even using HFS+.
Thanks to Steven Majewski!
- 2.1 should compile and run out of the box on Cygwin. Thanks to Jason
Tishler!
- 2.1 contains new files and patches for RISCOS, thanks to Dietmar
Schwertberger! See RISCOS/README for more information -- it seems
that because of the bizarre filename conventions on RISCOS, no port
to that platform is easy. Note that the new variable os.endsep is
silently supported in order to make life easier on this platform,
but we don't advertise it because it's not worth for most folks to
care about RISCOS portability.
What's New in Python 2.1 alpha 2?
=================================
Core language, builtins, and interpreter
- Scopes nest. If a name is used in a function or class, but is not
local, the definition in the nearest enclosing function scope will
be used. One consequence of this change is that lambda statements
could reference variables in the namespaces where the lambda is
defined. In some unusual cases, this change will break code.
In all previous version of Python, names were resolved in exactly
three namespaces -- the local namespace, the global namespace, and
the builtin namespace. According to this old definition, if a
function A is defined within a function B, the names bound in B are
not visible in A. The new rules make names bound in B visible in A,
unless A contains a name binding that hides the binding in B.
Section 4.1 of the reference manual describes the new scoping rules
in detail. The test script in Lib/test/test_scope.py demonstrates
some of the effects of the change.
The new rules will cause existing code to break if it defines nested
functions where an outer function has local variables with the same
name as globals or builtins used by the inner function. Example:
def munge(str):
def helper(x):
return str(x)
if type(str) != type(''):
str = helper(str)
return str.strip()
Under the old rules, the name str in helper() is bound to the
builtin function str(). Under the new rules, it will be bound to
the argument named str and an error will occur when helper() is
called.
- The compiler will report a SyntaxError if "from ... import *" occurs
in a function or class scope. The language reference has documented
that this case is illegal, but the compiler never checked for it.
The recent introduction of nested scope makes the meaning of this
form of name binding ambiguous. In a future release, the compiler
may allow this form when there is no possibility of ambiguity.
- repr(string) is easier to read, now using hex escapes instead of octal,
and using \t, \n and \r instead of \011, \012 and \015 (respectively):
>>> "\texample \r\n" + chr(0) + chr(255)
'\texample \r\n\x00\xff' # in 2.1
'\011example \015\012\000\377' # in 2.0
- Functions are now compared and hashed by identity, not by value, since
the func_code attribute is writable.
- Weak references (PEP 205) have been added. This involves a few
changes in the core, an extension module (_weakref), and a Python
module (weakref). The weakref module is the public interface. It
includes support for "explicit" weak references, proxy objects, and
mappings with weakly held values.
- A 'continue' statement can now appear in a try block within the body
of a loop. It is still not possible to use continue in a finally
clause.
Standard library
- mailbox.py now has a new class, PortableUnixMailbox which is
identical to UnixMailbox but uses a more portable scheme for
determining From_ separators. Also, the constructors for all the
classes in this module have a new optional `factory' argument, which
is a callable used when new message classes must be instantiated by
the next() method.
- random.py is now self-contained, and offers all the functionality of
the now-deprecated whrandom.py. See the docs for details. random.py
also supports new functions getstate() and setstate(), for saving
and restoring the internal state of the generator; and jumpahead(n),
for quickly forcing the internal state to be the same as if n calls to
random() had been made. The latter is particularly useful for multi-
threaded programs, creating one instance of the random.Random() class for
each thread, then using .jumpahead() to force each instance to use a
non-overlapping segment of the full period.
- random.py's seed() function is new. For bit-for-bit compatibility with
prior releases, use the whseed function instead. The new seed function
addresses two problems: (1) The old function couldn't produce more than
about 2**24 distinct internal states; the new one about 2**45 (the best
that can be done in the Wichmann-Hill generator). (2) The old function
sometimes produced identical internal states when passed distinct
integers, and there was no simple way to predict when that would happen;
the new one guarantees to produce distinct internal states for all
arguments in [0, 27814431486576L).
- The socket module now supports raw packets on Linux. The socket
family is AF_PACKET.
- test_capi.py is a start at running tests of the Python C API. The tests
are implemented by the new Modules/_testmodule.c.
- A new extension module, _symtable, provides provisional access to the
internal symbol table used by the Python compiler. A higher-level
interface will be added on top of _symtable in a future release.
- Removed the obsolete soundex module.
- xml.dom.minidom now uses the standard DOM exceptions. Node supports
the isSameNode method; NamedNodeMap the get method.
- xml.sax.expatreader supports the lexical handler property; it
generates comment, startCDATA, and endCDATA events.
Windows changes
- Build procedure: the zlib project is built in a different way that
ensures the zlib header files used can no longer get out of synch with
the zlib binary used. See PCbuild\readme.txt for details. Your old
zlib-related directories can be deleted; you'll need to download fresh
source for zlib and unpack it into a new directory.
- Build: New subproject _test for the benefit of test_capi.py (see above).
- Build: New subproject _symtable, for new DLL _symtable.pyd (a nascent
interface to some Python compiler internals).
- Build: Subproject ucnhash is gone, since the code was folded into the
unicodedata subproject.
What's New in Python 2.1 alpha 1?
=================================
Core language, builtins, and interpreter
- There is a new Unicode companion to the PyObject_Str() API
called PyObject_Unicode(). It behaves in the same way as the
former, but assures that the returned value is an Unicode object
(applying the usual coercion if necessary).
- The comparison operators support "rich comparison overloading" (PEP
207). C extension types can provide a rich comparison function in
the new tp_richcompare slot in the type object. The cmp() function
and the C function PyObject_Compare() first try the new rich
comparison operators before trying the old 3-way comparison. There
is also a new C API PyObject_RichCompare() (which also falls back on
the old 3-way comparison, but does not constrain the outcome of the
rich comparison to a Boolean result).
The rich comparison function takes two objects (at least one of
which is guaranteed to have the type that provided the function) and
an integer indicating the opcode, which can be Py_LT, Py_LE, Py_EQ,
Py_NE, Py_GT, Py_GE (for <, <=, ==, !=, >, >=), and returns a Python
object, which may be NotImplemented (in which case the tp_compare
slot function is used as a fallback, if defined).
Classes can overload individual comparison operators by defining one
or more of the methods__lt__, __le__, __eq__, __ne__, __gt__,
__ge__. There are no explicit "reflected argument" versions of
these; instead, __lt__ and __gt__ are each other's reflection,
likewise for__le__ and __ge__; __eq__ and __ne__ are their own
reflection (similar at the C level). No other implications are
made; in particular, Python does not assume that == is the Boolean
inverse of !=, or that < is the Boolean inverse of >=. This makes
it possible to define types with partial orderings.
Classes or types that want to implement (in)equality tests but not
the ordering operators (i.e. unordered types) should implement ==
and !=, and raise an error for the ordering operators.
It is possible to define types whose rich comparison results are not
Boolean; e.g. a matrix type might want to return a matrix of bits
for A < B, giving elementwise comparisons. Such types should ensure
that any interpretation of their value in a Boolean context raises
an exception, e.g. by defining __nonzero__ (or the tp_nonzero slot
at the C level) to always raise an exception.
- Complex numbers use rich comparisons to define == and != but raise
an exception for <, <=, > and >=. Unfortunately, this also means
that cmp() of two complex numbers raises an exception when the two
numbers differ. Since it is not mathematically meaningful to compare
complex numbers except for equality, I hope that this doesn't break
too much code.
- The outcome of comparing non-numeric objects of different types is
not defined by the language, other than that it's arbitrary but
consistent (see the Reference Manual). An implementation detail changed
in 2.1a1 such that None now compares less than any other object. Code
relying on this new behavior (like code that relied on the previous
behavior) does so at its own risk.
- Functions and methods now support getting and setting arbitrarily
named attributes (PEP 232). Functions have a new __dict__
(a.k.a. func_dict) which hold the function attributes. Methods get
and set attributes on their underlying im_func. It is a TypeError
to set an attribute on a bound method.
- The xrange() object implementation has been improved so that
xrange(sys.maxint) can be used on 64-bit platforms. There's still a
limitation that in this case len(xrange(sys.maxint)) can't be
calculated, but the common idiom "for i in xrange(sys.maxint)" will
work fine as long as the index i doesn't actually reach 2**31.
(Python uses regular ints for sequence and string indices; fixing
that is much more work.)
- Two changes to from...import:
1) "from M import X" now works even if (after loading module M)
sys.modules['M'] is not a real module; it's basically a getattr()
operation with AttributeError exceptions changed into ImportError.
2) "from M import *" now looks for M.__all__ to decide which names to
import; if M.__all__ doesn't exist, it uses M.__dict__.keys() but
filters out names starting with '_' as before. Whether or not
__all__ exists, there's no restriction on the type of M.
- File objects have a new method, xreadlines(). This is the fastest
way to iterate over all lines in a file:
for line in file.xreadlines():
...do something to line...
See the xreadlines module (mentioned below) for how to do this for
other file-like objects.
- Even if you don't use file.xreadlines(), you may expect a speedup on
line-by-line input. The file.readline() method has been optimized
quite a bit in platform-specific ways: on systems (like Linux) that
support flockfile(), getc_unlocked(), and funlockfile(), those are
used by default. On systems (like Windows) without getc_unlocked(),
a complicated (but still thread-safe) method using fgets() is used by
default.
You can force use of the fgets() method by #define'ing
USE_FGETS_IN_GETLINE at build time (it may be faster than
getc_unlocked()).
You can force fgets() not to be used by #define'ing
DONT_USE_FGETS_IN_GETLINE (this is the first thing to try if std test
test_bufio.py fails -- and let us know if it does!).
- In addition, the fileinput module, while still slower than the other
methods on most platforms, has been sped up too, by using
file.readlines(sizehint).
- Support for run-time warnings has been added, including a new
command line option (-W) to specify the disposition of warnings.
See the description of the warnings module below.
- Extensive changes have been made to the coercion code. This mostly
affects extension modules (which can now implement mixed-type
numerical operators without having to use coercion), but
occasionally, in boundary cases the coercion semantics have changed
subtly. Since this was a terrible gray area of the language, this
is considered an improvement. Also note that __rcmp__ is no longer
supported -- instead of calling __rcmp__, __cmp__ is called with
reflected arguments.
- In connection with the coercion changes, a new built-in singleton
object, NotImplemented is defined. This can be returned for
operations that wish to indicate they are not implemented for a
particular combination of arguments. From C, this is
Py_NotImplemented.
- The interpreter accepts now bytecode files on the command line even
if they do not have a .pyc or .pyo extension. On Linux, after executing
import imp,sys,string
magic = string.join(["\\x%.2x" % ord(c) for c in imp.get_magic()],"")
reg = ':pyc:M::%s::%s:' % (magic, sys.executable)
open("/proc/sys/fs/binfmt_misc/register","wb").write(reg)
any byte code file can be used as an executable (i.e. as an argument
to execve(2)).
- %[xXo] formats of negative Python longs now produce a sign
character. In 1.6 and earlier, they never produced a sign,
and raised an error if the value of the long was too large
to fit in a Python int. In 2.0, they produced a sign if and
only if too large to fit in an int. This was inconsistent
across platforms (because the size of an int varies across
platforms), and inconsistent with hex() and oct(). Example:
>>> "%x" % -0x42L
'-42' # in 2.1
'ffffffbe' # in 2.0 and before, on 32-bit machines
>>> hex(-0x42L)
'-0x42L' # in all versions of Python
The behavior of %d formats for negative Python longs remains
the same as in 2.0 (although in 1.6 and before, they raised
an error if the long didn't fit in a Python int).
%u formats don't make sense for Python longs, but are allowed
and treated the same as %d in 2.1. In 2.0, a negative long
formatted via %u produced a sign if and only if too large to
fit in an int. In 1.6 and earlier, a negative long formatted
via %u raised an error if it was too big to fit in an int.
- Dictionary objects have an odd new method, popitem(). This removes
an arbitrary item from the dictionary and returns it (in the form of
a (key, value) pair). This can be useful for algorithms that use a
dictionary as a bag of "to do" items and repeatedly need to pick one
item. Such algorithms normally end up running in quadratic time;
using popitem() they can usually be made to run in linear time.
Standard library
- In the time module, the time argument to the functions strftime,
localtime, gmtime, asctime and ctime is now optional, defaulting to
the current time (in the local timezone).
- The ftplib module now defaults to passive mode, which is deemed a
more useful default given that clients are often inside firewalls
these days. Note that this could break if ftplib is used to connect
to a *server* that is inside a firewall, from outside; this is
expected to be a very rare situation. To fix that, you can call
ftp.set_pasv(0).
- The module site now treats .pth files not only for path configuration,
but also supports extensions to the initialization code: Lines starting
with import are executed.
- There's a new module, warnings, which implements a mechanism for
issuing and filtering warnings. There are some new built-in
exceptions that serve as warning categories, and a new command line
option, -W, to control warnings (e.g. -Wi ignores all warnings, -We
turns warnings into errors). warnings.warn(message[, category])