-
-
Notifications
You must be signed in to change notification settings - Fork 34.5k
Expand file tree
/
Copy pathNEWS
More file actions
1584 lines (1139 loc) · 62.6 KB
/
NEWS
File metadata and controls
1584 lines (1139 loc) · 62.6 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.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.
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.
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. Supplying a version number has been made
compulsory.
- 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])
issues a warning message; this can also be called from C as
PyErr_Warn(category, message).
- A new module xreadlines was added. This exports a single factory
function, xreadlines(). The intention is that this code is the
absolutely fastest way to iterate over all lines in an open
file(-like) object:
import xreadlines
for line in xreadlines.xreadlines(file):
...do something to line...
This is equivalent to the previous the speed record holder using
file.readlines(sizehint). Note that if file is a real file object
(as opposed to a file-like object), this is equivalent:
for line in file.xreadlines():
...do something to line...
- The bisect module has new functions bisect_left, insort_left,
bisect_right and insort_right. The old names bisect and insort
are now aliases for bisect_right and insort_right. XXX_right
and XXX_left methods differ in what happens when the new element
compares equal to one or more elements already in the list: the
XXX_left methods insert to the left, the XXX_right methods to the
right. Code that doesn't care where equal elements end up should
continue to use the old, short names ("bisect" and "insort").
- The new curses.panel module wraps the panel library that forms part
of SYSV curses and ncurses. Contributed by Thomas Gellekum.
- The SocketServer module now sets the allow_reuse_address flag by
default in the TCPServer class.
- A new function, sys._getframe(), returns the stack frame pointer of
the caller. This is intended only as a building block for
higher-level mechanisms such as string interpolation.
- The pyexpat module supports a number of new handlers, which are
available only in expat 1.2. If invocation of a callback fails, it
will report an additional frame in the traceback. Parser objects
participate now in garbage collection. If expat reports an unknown
encoding, pyexpat will try to use a Python codec; that works only
for single-byte charsets. The parser type objects is exposed as
XMLParserObject.
- xml.dom now offers standard definitions for symbolic node type and
exception code constants, and a hierarchy of DOM exceptions. minidom
was adjusted to use them.
- The conformance of xml.dom.minidom to the DOM specification was
improved. It detects a number of additional error cases; the
previous/next relationship works even when the tree is modified;
Node supports the normalize() method; NamedNodeMap, DocumentType and
DOMImplementation classes were added; Element supports the
hasAttribute and hasAttributeNS methods; and Text supports the splitText
method.
Build issues
- For Unix (and Unix-compatible) builds, configuration and building of
extension modules is now greatly automated. Rather than having to
edit the Modules/Setup file to indicate which modules should be
built and where their include files and libraries are, a
distutils-based setup.py script now takes care of building most
extension modules. All extension modules built this way are built
as shared libraries. Only a few modules that must be linked
statically are still listed in the Setup file; you won't need to
edit their configuration.
- Python should now build out of the box on Cygwin. If it doesn't,
mail to Jason Tishler (jlt63 at users.sourceforge.net).
- Python now always uses its own (renamed) implementation of getopt()
-- there's too much variation among C library getopt()
implementations.
- C++ compilers are better supported; the CXX macro is always set to a
C++ compiler if one is found.
Windows changes
- select module: By default under Windows, a select() call
can specify no more than 64 sockets. Python now boosts
this Microsoft default to 512. If you need even more than
that, see the MS docs (you'll need to #define FD_SETSIZE
and recompile Python from source).
- Support for Windows 3.1, DOS and OS/2 is gone. The Lib/dos-8x3
subdirectory is no more!
What's New in Python 2.0?
=========================
Below is a list of all relevant changes since release 1.6. Older
changes are in the file HISTORY. If you are making the jump directly
from Python 1.5.2 to 2.0, make sure to read the section for 1.6 in the
HISTORY file! Many important changes listed there.
Alternatively, a good overview of the changes between 1.5.2 and 2.0 is
the document "What's New in Python 2.0" by Kuchling and Moshe Zadka:
http://starship.python.net/crew/amk/python/writing/new-python/.
--Guido van Rossum (home page: http://www.pythonlabs.com/~guido/)
======================================================================
What's new in 2.0 (since release candidate 1)?
==============================================
Standard library
- The copy_reg module was modified to clarify its intended use: to
register pickle support for extension types, not for classes.
pickle() will raise a TypeError if it is passed a class.
- Fixed a bug in gettext's "normalize and expand" code that prevented
it from finding an existing .mo file.
- Restored support for HTTP/0.9 servers in httplib.
- The math module was changed to stop raising OverflowError in case of
underflow, and return 0 instead in underflow cases. Whether Python
used to raise OverflowError in case of underflow was platform-
dependent (it did when the platform math library set errno to ERANGE
on underflow).
- Fixed a bug in StringIO that occurred when the file position was not
at the end of the file and write() was called with enough data to
extend past the end of the file.
- Fixed a bug that caused Tkinter error messages to get lost on
Windows. The bug was fixed by replacing direct use of
interp->result with Tcl_GetStringResult(interp).
- Fixed bug in urllib2 that caused it to fail when it received an HTTP
redirect response.
- Several changes were made to distutils: Some debugging code was
removed from util. Fixed the installer used when an external zip
program (like WinZip) is not found; the source code for this
installer is in Misc/distutils. check_lib() was modified to behave
more like AC_CHECK_LIB by add other_libraries() as a parameter. The
test for whether installed modules are on sys.path was changed to
use both normcase() and normpath().
- Several minor bugs were fixed in the xml package (the minidom,
pulldom, expatreader, and saxutils modules).
- The regression test driver (regrtest.py) behavior when invoked with
-l changed: It now reports a count of objects that are recognized as
garbage but not freed by the garbage collector.
- The regression test for the math module was changed to test
exceptional behavior when the test is run in verbose mode. Python
cannot yet guarantee consistent exception behavior across platforms,
so the exception part of test_math is run only in verbose mode, and
may fail on your platform.
Internals
- PyOS_CheckStack() has been disabled on Win64, where it caused
test_sre to fail.
Build issues
- Changed compiler flags, so that gcc is always invoked with -Wall and
-Wstrict-prototypes. Users compiling Python with GCC should see
exactly one warning, except if they have passed configure the
--with-pydebug flag. The expected warning is for getopt() in
Modules/main.c. This warning will be fixed for Python 2.1.
- Fixed configure to add -threads argument during linking on OSF1.
Tools and other miscellany
- The compiler in Tools/compiler was updated to support the new
language features introduced in 2.0: extended print statement, list
comprehensions, and augmented assignments. The new compiler should
also be backwards compatible with Python 1.5.2; the compiler will
always generate code for the version of the interpreter it runs
under.
What's new in 2.0 release candidate 1 (since beta 2)?
=====================================================
What is release candidate 1?
We believe that release candidate 1 will fix all known bugs that we
intend to fix for the 2.0 final release. This release should be a bit
more stable than the previous betas. We would like to see even more
widespread testing before the final release, so we are producing this
release candidate. The final release will be exactly the same unless
any show-stopping (or brown bag) bugs are found by testers of the
release candidate.
All the changes since the last beta release are bug fixes or changes
to support building Python for specific platforms.
Core language, builtins, and interpreter
- A bug that caused crashes when __coerce__ was used with augmented
assignment, e.g. +=, was fixed.
- Raise ZeroDivisionError when raising zero to a negative number,
e.g. 0.0 ** -2.0. Note that math.pow is unrelated to the builtin
power operator and the result of math.pow(0.0, -2.0) will vary by
platform. On Linux, it raises a ValueError.
- A bug in Unicode string interpolation was fixed that occasionally
caused errors with formats including "%%". For example, the
following expression "%% %s" % u"abc" no longer raises a TypeError.
- Compilation of deeply nested expressions raises MemoryError instead
of SyntaxError, e.g. eval("[" * 50 + "]" * 50).
- In 2.0b2 on Windows, the interpreter wrote .pyc files in text mode,
rendering them useless. They are now written in binary mode again.
Standard library
- Keyword arguments are now accepted for most pattern and match object
methods in SRE, the standard regular expression engine.
- In SRE, fixed error with negative lookahead and lookbehind that
manifested itself as a runtime error in patterns like "(?<!abc)(def)".
- Several bugs in the Unicode handling and error handling in _tkinter
were fixed.
- Fix memory management errors in Merge() and Tkapp_Call() routines.
- Several changes were made to cStringIO to make it compatible with
the file-like object interface and with StringIO. If operations are
performed on a closed object, an exception is raised. The truncate
method now accepts a position argument and readline accepts a size
argument.
- There were many changes made to the linuxaudiodev module and its
test suite; as a result, a short, unexpected audio sample should now
play when the regression test is run.
Note that this module is named poorly, because it should work
correctly on any platform that supports the Open Sound System
(OSS).
The module now raises exceptions when errors occur instead of
crashing. It also defines the AFMT_A_LAW format (logarithmic A-law
audio) and defines a getptr() method that calls the
SNDCTL_DSP_GETxPTR ioctl defined in the OSS Programmer's Guide.
- The library_version attribute, introduced in an earlier beta, was
removed because it can not be supported with early versions of the C
readline library, which provides no way to determine the version at
compile-time.
- The binascii module is now enabled on Win64.
- tokenize.py no longer suffers "recursion depth" errors when parsing
programs with very long string literals.
Internals
- Fixed several buffer overflow vulnerabilities in calculate_path(),
which is called when the interpreter starts up to determine where
the standard library is installed. These vulnerabilities affect all
previous versions of Python and can be exploited by setting very
long values for PYTHONHOME or argv[0]. The risk is greatest for a
setuid Python script, although use of the wrapper in
Misc/setuid-prog.c will eliminate the vulnerability.
- Fixed garbage collection bugs in instance creation that were
triggered when errors occurred during initialization. The solution,
applied in cPickle and in PyInstance_New(), is to call
PyObject_GC_Init() after the initialization of the object's
container attributes is complete.
- pyexpat adds definitions of PyModule_AddStringConstant and
PyModule_AddObject if the Python version is less than 2.0, which
provides compatibility with PyXML on Python 1.5.2.
- If the platform has a bogus definition for LONG_BIT (the number of
bits in a long), an error will be reported at compile time.
- Fix bugs in _PyTuple_Resize() which caused hard-to-interpret garbage
collection crashes and possibly other, unreported crashes.
- Fixed a memory leak in _PyUnicode_Fini().
Build issues
- configure now accepts a --with-suffix option that specifies the
executable suffix. This is useful for builds on Cygwin and Mac OS
X, for example.
- The mmap.PAGESIZE constant is now initialized using sysconf when
possible, which eliminates a dependency on -lucb for Reliant UNIX.
- The md5 file should now compile on all platforms.
- The select module now compiles on platforms that do not define
POLLRDNORM and related constants.
- Darwin (Mac OS X): Initial support for static builds on this
platform.
- BeOS: A number of changes were made to the build and installation
process. ar-fake now operates on a directory of object files.
dl_export.h is gone, and its macros now appear on the mwcc command
line during build on PPC BeOS.
- Platform directory in lib/python2.0 is "plat-beos5" (or
"plat-beos4", if building on BeOS 4.5), rather than "plat-beos".
- Cygwin: Support for shared libraries, Tkinter, and sockets.
- SunOS 4.1.4_JL: Fix test for directory existence in configure.
Tools and other miscellany
- Removed debugging prints from main used with freeze.
- IDLE auto-indent no longer crashes when it encounters Unicode
characters.
What's new in 2.0 beta 2 (since beta 1)?
========================================
Core language, builtins, and interpreter
- Add support for unbounded ints in %d,i,u,x,X,o formats; for example
"%d" % 2L**64 == "18446744073709551616".
- Add -h and -V command line options to print the usage message and
Python version number and exit immediately.
- eval() and exec accept Unicode objects as code parameters.
- getattr() and setattr() now also accept Unicode objects for the
attribute name, which are converted to strings using the default
encoding before lookup.
- Multiplication on string and Unicode now does proper bounds
checking; e.g. 'a' * 65536 * 65536 will raise ValueError, "repeated
string is too long."
- Better error message when continue is found in try statement in a
loop.
Standard library and extensions
- array: reverse() method of array now works. buffer_info() now does
argument checking; it still takes no arguments.
- asyncore/asynchat: Included most recent version from Sam Rushing.
- cgi: Accept '&' or ';' as separator characters when parsing form data.
- CGIHTTPServer: Now works on Windows (and perhaps even Mac).
- ConfigParser: When reading the file, options spelled in upper case
letters are now correctly converted to lowercase.
- copy: Copy Unicode objects atomically.
- cPickle: Fail gracefully when copy_reg can't be imported.
- cStringIO: Implemented readlines() method.
- dbm: Add get() and setdefault() methods to dbm object. Add constant
`library' to module that names the library used. Added doc strings
and method names to error messages. Uses configure to determine
which ndbm.h file to include; Berkeley DB's nbdm and GDBM's ndbm is
now available options.
- distutils: Update to version 0.9.3.
- dl: Add several dl.RTLD_ constants.
- fpectl: Now supported on FreeBSD.
- gc: Add DEBUG_SAVEALL option. When enabled all garbage objects
found by the collector will be saved in gc.garbage. This is useful
for debugging a program that creates reference cycles.
- httplib: Three changes: Restore support for set_debuglevel feature
of HTTP class. Do not close socket on zero-length response. Do not
crash when server sends invalid content-length header.
- mailbox: Mailbox class conforms better to qmail specifications.
- marshal: When reading a short, sign-extend on platforms where shorts
are bigger than 16 bits. When reading a long, repair the unportable
sign extension that was being done for 64-bit machines. (It assumed
that signed right shift sign-extends.)
- operator: Add contains(), invert(), __invert__() as aliases for
__contains__(), inv(), and __inv__() respectively.
- os: Add support for popen2() and popen3() on all platforms where
fork() exists. (popen4() is still in the works.)
- os: (Windows only:) Add startfile() function that acts like double-
clicking on a file in Explorer (or passing the file name to the
DOS "start" command).
- os.path: (Windows, DOS:) Treat trailing colon correctly in
os.path.join. os.path.join("a:", "b") yields "a:b".
- pickle: Now raises ValueError when an invalid pickle that contains
a non-string repr where a string repr was expected. This behavior
matches cPickle.
- posixfile: Remove broken __del__() method.
- py_compile: support CR+LF line terminators in source file.
- readline: Does not immediately exit when ^C is hit when readline and
threads are configured. Adds definition of rl_library_version. (The
latter addition requires GNU readline 2.2 or later.)
- rfc822: Domain literals returned by AddrlistClass method
getdomainliteral() are now properly wrapped in brackets.
- site: sys.setdefaultencoding() should only be called in case the
standard default encoding ("ascii") is changed. This saves quite a
few cycles during startup since the first call to
setdefaultencoding() will initialize the codec registry and the
encodings package.
- socket: Support for size hint in readlines() method of object returned
by makefile().
- sre: Added experimental expand() method to match objects. Does not
use buffer interface on Unicode strings. Does not hang if group id
is followed by whitespace.
- StringIO: Size hint in readlines() is now supported as documented.
- struct: Check ranges for bytes and shorts.
- urllib: Improved handling of win32 proxy settings. Fixed quote and
quote_plus functions so that the always encode a comma.
- Tkinter: Image objects are now guaranteed to have unique ids. Set
event.delta to zero if Tk version doesn't support mousewheel.
Removed some debugging prints.
- UserList: now implements __contains__().