-
-
Notifications
You must be signed in to change notification settings - Fork 34.5k
Expand file tree
/
Copy pathNEWS
More file actions
3583 lines (2589 loc) · 142 KB
/
NEWS
File metadata and controls
3583 lines (2589 loc) · 142 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.3 alpha 1?
XXX Release date: DD-MMM-2002 XXX
=================================
Type/class unification and new-style classes
Core and builtins
- Slices and repetitions of buffer objects now consistently return
a string. Formerly, strings would be returned most of the time,
but a buffer object would be returned when the repetition count
was one or when the slice range was all inclusive.
- The __slots__ variable can now mention "private" names, and the
right thing will happen (e.g. __slots__ = ["__foo"]).
- Unicode objects in sys.path are no longer ignored but treated
as directory names.
- The built-ins slice() and buffer() are now callable types. The
types classobj (formerly class), code, function, instance, and
instancemethod (formerly instance-method), which have no built-in
names but are accessible through the types module, are now also
callable. The type dict-proxy is renamed to dictproxy.
- Fixed string.startswith and string.endswith builtin methods
so they accept negative indices. [SF bug 493951]
- Fixed a bug with a continue inside a try block and a yield in the
finally clause. [SF bug 567538]
- Most builtin sequences now support "extended slices", i.e. slices
with a third "stride" parameter. For example, "hello world"[::-1]
gives "dlrow olleh".
- Cycles going through the __class__ link of a new-style instance are
now detected by the garbage collector.
- Classes using __slots__ are now properly garbage collected.
[SF bug 519621]
- Tightened the __slots__ rules: a slot name must be a valid Python
identifier.
- The constructor for the module type now requires a name argument and
takes an optional docstring argument. Previously, this constructor
ignored its arguments. As a consequence, deriving a class from a
module (not from the module type) is now illegal; previously this
created an unnamed module, just like invoking the module type did.
[SF bug 563060]
- A new warning PendingDeprecationWarning was added to provide
direction on features which are in the process of being deprecated.
The warning will not be printed by default. To see the pending
deprecations, use -Walways::PendingDeprecationWarning::
as a command line option or warnings.filterwarnings() in code.
- A new type object, 'basestring', is added. This is a common base type
for 'str' and 'unicode', and can be used instead of
types.StringTypes, e.g. to test whether something is "a string":
isinstance(x, basestring) is True for Unicode and 8-bit strings. This
is an abstract base class and cannot be instantiated directly.
- Deprecated features of xrange objects have been removed as
promised. The start, stop, and step attributes and the tolist()
method no longer exist. xrange repetition and slicing have been
removed.
- New builtin function enumerate(x), from PEP 279. Example:
enumerate("abc") is an iterator returning (0,"a"), (1,"b"), (2,"c").
The argument can be an arbitrary iterable object.
- The assert statement no longer tests __debug__ at runtime. This means
that assert statements cannot be disabled by assigning a false value
to __debug__.
- A method zfill() was added to str and unicode, that fills a numeric
string to the left with zeros. For example,
"+123".zfill(6) -> "+00123".
- Complex numbers supported divmod() and the // and % operators, but
these make no sense. Since this was documented, they're being
deprecated now.
- String and unicode methods lstrip(), rstrip() and strip() now take
an optional argument that specifies the characters to strip. For
example, "Foo!!!?!?!?".rstrip("?!") -> "Foo".
- Added a new dict method pop(key). This removes and returns the
value corresponding to key. [SF patch #539949]
- Changed new-style class instantiation so that when C's __new__
method returns something that's not a C instance, its __init__ is
not called. [SF bug #537450]
- Fixed super() to work correctly with class methods. [SF bug #535444]
- A new built-in type, bool, has been added, as well as built-in
names for its two values, True and False. Comparisons and sundry
other operations that return a truth value have been changed to
return a bool instead. Read PEP 285 for an explanation of why this
is backward compatible.
- Fixed two bugs reported as SF #535905: under certain conditions,
deallocating a deeply nested structure could cause a segfault in the
garbage collector, due to interaction with the "trashcan" code;
access to the current frame during destruction of a local variable
could access a pointer to freed memory.
- The optional object allocator ("pymalloc") has been enabled by
default. The recommended practice for memory allocation and
deallocation has been streamlined. A header file is included,
Misc/pymemcompat.h, which can be bundled with 3rd party extensions
and lets them use the same API with Python versions from 1.5.2
onwards.
- If you try to pickle an instance of a class that has __slots__ but
doesn't define or override __getstate__, a TypeError is now raised.
This is done by adding a bozo __getstate__ to the class that always
raises TypeError. (Before, this would appear to be pickled, but the
state of the slots would be lost.)
- PyErr_Display will provide file and line information for all exceptions
that have an attribute print_file_and_line, not just SyntaxErrors.
- The UTF-8 codec will now encode and decode Unicode surrogates
correctly and without raising exceptions for unpaired ones.
- file.xreadlines() now raises a ValueError if the file is closed:
Previously, an xreadlines object was returned which would raise
a ValueError when the xreadlines.next() method was called.
- sys.exit() inadvertently allowed more than one argument.
An exception will now be raised if more than one argument is used.
Extension modules
- The 'new' module is no longer an extension, but a Python module that
only exists for backwards compatibility. Its contents are no longer
functions but callable type objects.
- The bsddb.*open functions can now take 'None' as a filename.
This will create a temporary in-memory bsddb that won't be
written to disk.
- posix.killpg, posix.mknod, and posix.getpgid have been added where
available.
- The locale module now exposes the C library's gettext interface.
- A security hole ("double free") was found in zlib-1.1.3, a popular
third party compression library used by some Python modules. The
hole was quickly plugged in zlib-1.1.4, and the Windows build of
Python now ships with zlib-1.1.4.
- pwd, grp, and resource return enhanced tuples now, with symbolic
field names.
- array.array is now a type object. A new format character
'u' indicates Py_UNICODE arrays. For those, .tounicode and
.fromunicode methods are available. Arrays now support __iadd__
and __imul__.
- dl now builds on every system that has dlfcn.h. Failure in case
of sizeof(int)!=sizeof(long)!=sizeof(void*) is delayed until dl.open
is called.
- signal.sigpending, signal.sigprocmask and signal.sigsuspend have
been added where available.
Library
- xml.dom.minidom.toxml and toprettyxml now take an optional encoding
argument.
- Some fixes in the copy module: when an object is copied through its
__reduce__ method, there was no check for a __setstate__ method on
the result [SF patch 565085]; deepcopy should treat instances of
custom metaclasses the same way it treats instances of type 'type'
[SF patch 560794].
- Sockets now support timeout mode. After s.settimeout(T), where T is
a float expressing seconds, subsequent operations raise an exception
if they cannot be completed within T seconds. To disable timeout
mode, use s.settimeout(None).
- getopt.gnu_getopt was added. This supports GNU-style option
processing, where options can be mixed with non-option arguments.
- Stop using strings for exceptions. String objects used for
exceptions are now classes deriving from Exception. The objects
changed were: Tkinter.TclError, bdb.BdbQuit, macpath.norm_error,
tabnanny.NannyNag, and xdrlib.Error.
- Constants BOM_UTF8, BOM_UTF16, BOM_UTF16_LE, BOM_UTF16_BE,
BOM_UTF32, BOM_UTF32_LE and BOM_UTF32_BE that represent the Byte
Order Mark in UTF-8, UTF-16 and UTF-32 encodings for little and
big endian systems were added to the codecs module. The old names
BOM32_* and BOM64_* were off by a factor of 2.
- Added conversion functions math.degrees() and math.radians().
- ftplib.retrlines() now tests for callback is None rather than testing
for False. Was causing an error when given a callback object which
was callable but also returned len() as zero. The change may
create new breakage if the caller relied on the undocumented behavior
and called with callback set to [] or some other False value not
identical to None.
- random.gauss() uses a piece of hidden state used by nothing else,
and the .seed() and .whseed() methods failed to reset it. In other
words, setting the seed didn't completely determine the sequence of
results produced by random.gauss(). It does now. Programs repeatedly
mixing calls to a seed method with calls to gauss() may see different
results now.
- The pickle.Pickler class grew a clear_memo() method to mimic that
provided by cPickle.Pickler.
- difflib's SequenceMatcher class now does a dynamic analysis of
which elements are so frequent as to constitute noise. For
comparing files as sequences of lines, this generally works better
than the IS_LINE_JUNK function, and function ndiff's linejunk
argument defaults to None now as a result. A happy benefit is
that SequenceMatcher may run much faster now when applied
to large files with many duplicate lines (for example, C program
text with lots of repeated "}" and "return NULL;" lines).
- New Text.dump() method in Tkinter module.
- New distutils commands for building packagers were added to
support pkgtool on Solaris and swinstall on HP-UX.
- distutils now has a new abstract binary packager base class
command/bdist_packager, which simplifies writing packagers.
This will hopefully provide the missing bits to encourage
people to submit more packagers, e.g. for Debian, FreeBSD
and other systems.
- The UTF-16, -LE and -BE stream readers now raise a
NotImplementedError for all calls to .readline(). Previously, they
used to just produce garbage or fail with an encoding error --
UTF-16 is a 2-byte encoding and the C lib's line reading APIs don't
work well with these.
- compileall now supports quiet operation.
- The BaseHTTPServer now implements optional HTTP/1.1 persistent
connections.
- socket module: the SSL support was broken out of the main
_socket module C helper and placed into a new _ssl helper
which now gets imported by socket.py if available and working.
- encodings package: added aliases for all supported IANA character
sets
- ftplib: to safeguard the user's privacy, anonymous login will use
"anonymous@" as default password, rather than the real user and host
name.
- webbrowser: tightened up the command passed to os.system() so that
arbitrary shell code can't be executed because a bogus URL was
passed in.
- gettext.translation has an optional fallback argument, and
gettext.find an optional all argument. Translations will now fallback
on a per-message basis.
- distutils bdist commands now offer a --skip-build option.
- warnings.warn now accepts a Warning instance as first argument.
- The xml.sax.expatreader.ExpatParser class will no longer create
circular references by using itself as the locator that gets passed
to the content handler implementation. [SF bug #535474]
- The email.Parser.Parser class now properly parses strings regardless
of their line endings, which can be any of \r, \n, or \r\n (CR, LF,
or CRLF). Also, the Header class's constructor default arguments
has changed slightly so that an explicit maxlinelen value is always
honored.
Tools/Demos
- freeze.py now produces binaries which can import shared modules,
unlike before when this failed due to missing symbol exports in
the generated binary.
Build
- The configure option --without-doc-strings can be used to remove the
doc strings from the builtin functions and modules; this reduces the
size of the executable.
- XXX WITH_UNIVERSAL_NEWLINES Somebody fill this in; the PEP doesn't
say how or when to configure it, or how to turn it off.
- On Unix, a shared libpython2.3.so can be created with --enable-shared.
- All uses of the CACHE_HASH, INTERN_STRINGS, and DONT_SHARE_SHORT_STRINGS
preprocessor symbols were eliminated. The internal decisions they
controlled stopped being experimental long ago.
- The tools used to build the documentation now work under Cygwin as
well as Unix.
- The bsddb and dbm module builds have been changed to try and avoid version
skew problems and disable linkage with Berkeley DB 1.85 unless the
installer knows what s/he's doing. See the section on building these
modules in the README file for details.
C API
- Added new macro PySequence_ITEM(o, i) that directly calls
sq_item without rechecking that o is a sequence and without
adjusting for negative indices.
- PyRange_New() now raises ValueError if the fourth argument is not 1.
This is part of the removal of deprecated features of the xrange
object.
- PyNumber_Coerce() and PyNumber_CoerceEx() now also invoke the type's
coercion if both arguments have the same type but this type has the
CHECKTYPES flag set. This is to better support proxies.
- The type of tp_free has been changed from "void (*)(PyObject *)" to
"void (*)(void *)".
- PyObject_Del, PyObject_GC_Del are now functions instead of macros.
- A type can now inherit its metatype from its base type. Previously,
when PyType_Ready() was called, if ob_type was found to be NULL, it
was always set to &PyType_Type; now it is set to base->ob_type,
where base is tp_base, defaulting to &PyObject_Type.
- PyType_Ready() accidentally did not inherit tp_is_gc; now it does.
- The PyCore_* family of APIs have been removed.
- The "u#" parser marker will now pass through Unicode objects as-is
without going through the buffer API.
- The enumerators of cmp_op have been renamed to use the prefix PyCmp_.
- An old #define of ANY as void has been removed from pyport.h. This
hasn't been used since Python's pre-ANSI days, and the #define has
been marked as obsolete since then. SF bug 495548 says it created
conflicts with other packages, so keeping it around wasn't harmless.
- Because Python's magic number scheme broke on January 1st, we decided
to stop Python development. Thanks for all the fish!
- Some of us don't like fish, so we changed Python's magic number
scheme to a new one. See Python/import.c for details.
New platforms
- AtheOS is now supported.
- GNU/Hurd is now supported.
Tests
Windows
- Sometimes the uninstall executable (UNWISE.EXE) vanishes. One cause
of that has been fixed in the installer (disabled Wise's "delete in-
use files" uninstall option).
- Fixed a bug in urllib's proxy handling in Windows. [SF bug #503031]
- The installer now installs Start menu shortcuts under (the local
equivalent of) "All Users" when doing an Admin install.
- file.truncate([newsize]) now works on Windows for all newsize values.
It used to fail if newsize didn't fit in 32 bits, reflecting a
limitation of MS _chsize (which is no longer used).
- os.waitpid() is now implemented for Windows, and can be used to block
until a specified process exits. This is similar to, but not exactly
the same as, os.waitpid() on POSIX systems. If you're waiting for
a specific process whose pid was obtained from one of the spawn()
functions, the same Python os.waitpid() code works across platforms.
See the docs for details. The docs were changed to clarify that
spawn functions return, and waitpid requires, a process handle on
Windows (not the same thing as a Windows process id).
- New tempfile.TemporaryFile implementation for Windows: this doesn't
need a TemporaryFileWrapper wrapper anymore, and should be immune
to a nasty problem: before 2.3, if you got a temp file on Windows, it
got wrapped in an object whose close() method first closed the
underlying file, then deleted the file. This usually worked fine.
However, the spawn family of functions on Windows create (at a low C
level) the same set of open files in the spawned process Q as were
open in the spawning process P. If a temp file f was among them, then
doing f.close() in P first closed P's C-level file handle on f, but Q's
C-level file handle on f remained open, so the attempt in P to delete f
blew up with a "Permission denied" error (Windows doesn't allow
deleting open files). This was surprising, subtle, and difficult to
work around.
- The os module now exports all the symbolic constants usable with the
low-level os.open() on Windows: the new constants in 2.3 are
O_NOINHERIT, O_SHORT_LIVED, O_TEMPORARY, O_RANDOM and O_SEQUENTIAL.
The others were also available in 2.2: O_APPEND, O_BINARY, O_CREAT,
O_EXCL, O_RDONLY, O_RDWR, O_TEXT, O_TRUNC and O_WRONLY. Contrary
to Microsoft docs, O_SHORT_LIVED does not seem to imply O_TEMPORARY
(so specify both if you want both; note that neither is useful unless
specified with O_CREAT too).
Mac
What's New in Python 2.2 final?
Release date: 21-Dec-2001
===============================
Type/class unification and new-style classes
- pickle.py, cPickle: allow pickling instances of new-style classes
with a custom metaclass.
Core and builtins
- weakref proxy object: when comparing, unwrap both arguments if both
are proxies.
Extension modules
- binascii.b2a_base64(): fix a potential buffer overrun when encoding
very short strings.
- cPickle: the obscure "fast" mode was suspected of causing stack
overflows on the Mac. Hopefully fixed this by setting the recursion
limit much smaller. If the limit is too low (it only affects
performance), you can change it by defining PY_CPICKLE_FAST_LIMIT
when compiling cPickle.c (or in pyconfig.h).
Library
- dumbdbm.py: fixed a dumb old bug (the file didn't get synched at
close or delete time).
- rfc822.py: fixed a bug where the address '<>' was converted to None
instead of an empty string (also fixes the email.Utils module).
- xmlrpclib.py: version 1.0.0; uses precision for doubles.
- test suite: the pickle and cPickle tests were not executing any code
when run from the standard regression test.
Tools/Demos
Build
C API
New platforms
Tests
Windows
- distutils package: fixed broken Windows installers (bdist_wininst).
- tempfile.py: prevent mysterious warnings when TemporaryFileWrapper
instances are deleted at process exit time.
- socket.py: prevent mysterious warnings when socket instances are
deleted at process exit time.
- posixmodule.c: fix a Windows crash with stat() of a filename ending
in backslash.
Mac
- The Carbon toolbox modules have been upgraded to Universal Headers
3.4, and experimental CoreGraphics and CarbonEvents modules have
been added. All only for framework-enabled MacOSX.
What's New in Python 2.2c1?
Release date: 14-Dec-2001
===========================
Type/class unification and new-style classes
- Guido's tutorial introduction to the new type/class features has
been extensively updated. See
http://www.python.org/2.2/descrintro.html
That remains the primary documentation in this area.
- Fixed a leak: instance variables declared with __slots__ were never
deleted!
- The "delete attribute" method of descriptor objects is called
__delete__, not __del__. In previous releases, it was mistakenly
called __del__, which created an unfortunate overloading condition
with finalizers. (The "get attribute" and "set attribute" methods
are still called __get__ and __set__, respectively.)
- Some subtle issues with the super built-in were fixed:
(a) When super itself is subclassed, its __get__ method would still
return an instance of the base class (i.e., of super).
(b) super(C, C()).__class__ would return C rather than super. This
is confusing. To fix this, I decided to change the semantics of
super so that it only applies to code attributes, not to data
attributes. After all, overriding data attributes is not
supported anyway.
(c) The __get__ method didn't check whether the argument was an
instance of the type used in creation of the super instance.
- Previously, hash() of an instance of a subclass of a mutable type
(list or dictionary) would return some value, rather than raising
TypeError. This has been fixed. Also, directly calling
dict.__hash__ and list.__hash__ now raises the same TypeError
(previously, these were the same as object.__hash__).
- New-style objects now support deleting their __dict__. This is for
all intents and purposes equivalent to assigning a brand new empty
dictionary, but saves space if the object is not used further.
Core and builtins
- -Qnew now works as documented in PEP 238: when -Qnew is passed on
the command line, all occurrences of "/" use true division instead
of classic division. See the PEP for details. Note that "all"
means all instances in library and 3rd-party modules, as well as in
your own code. As the PEP says, -Qnew is intended for use only in
educational environments with control over the libraries in use.
Note that test_coercion.py in the standard Python test suite fails
under -Qnew; this is expected, and won't be repaired until true
division becomes the default (in the meantime, test_coercion is
testing the current rules).
- complex() now only allows the first argument to be a string
argument, and raises TypeError if either the second arg is a string
or if the second arg is specified when the first is a string.
Extension modules
- gc.get_referents was renamed to gc.get_referrers.
Library
- Functions in the os.spawn() family now release the global interpreter
lock around calling the platform spawn. They should always have done
this, but did not before 2.2c1. Multithreaded programs calling
an os.spawn function with P_WAIT will no longer block all Python threads
until the spawned program completes. It's possible that some programs
relies on blocking, although more likely by accident than by design.
- webbrowser defaults to netscape.exe on OS/2 now.
- Tix.ResizeHandle exposes detach_widget, hide, and show.
- The charset alias windows_1252 has been added.
- types.StringTypes is a tuple containing the defined string types;
usually this will be (str, unicode), but if Python was compiled
without Unicode support it will be just (str,).
- The pulldom and minidom modules were synchronized to PyXML.
Tools/Demos
- A new script called Tools/scripts/google.py was added, which fires
off a search on Google.
Build
- Note that release builds of Python should arrange to define the
preprocessor symbol NDEBUG on the command line (or equivalent).
In the 2.2 pre-release series we tried to define this by magic in
Python.h instead, but it proved to cause problems for extension
authors. The Unix, Windows and Mac builds now all define NDEBUG in
release builds via cmdline (or equivalent) instead. Ports to
other platforms should do likewise.
- It is no longer necessary to use --with-suffix when building on a
case-insensitive file system (such as Mac OS X HFS+). In the build
directory an extension is used, but not in the installed python.
C API
- New function PyDict_MergeFromSeq2() exposes the builtin dict
constructor's logic for updating a dictionary from an iterable object
producing key-value pairs.
- PyArg_ParseTupleAndKeywords() requires that the number of entries in
the keyword list equal the number of argument specifiers. This
wasn't checked correctly, and PyArg_ParseTupleAndKeywords could even
dump core in some bad cases. This has been repaired. As a result,
PyArg_ParseTupleAndKeywords may raise RuntimeError in bad cases that
previously went unchallenged.
New platforms
Tests
Windows
Mac
- In unix-Python on Mac OS X (and darwin) sys.platform is now "darwin",
without any trailing digits.
- Changed logic for finding python home in Mac OS X framework Pythons.
Now sys.executable points to the executable again, in stead of to
the shared library. The latter is used only for locating the python
home.
What's New in Python 2.2b2?
Release date: 16-Nov-2001
===========================
Type/class unification and new-style classes
- Multiple inheritance mixing new-style and classic classes in the
list of base classes is now allowed, so this works now:
class Classic: pass
class Mixed(Classic, object): pass
The MRO (method resolution order) for each base class is respected
according to its kind, but the MRO for the derived class is computed
using new-style MRO rules if any base class is a new-style class.
This needs to be documented.
- The new builtin dictionary() constructor, and dictionary type, have
been renamed to dict. This reflects a decade of common usage.
- dict() now accepts an iterable object producing 2-sequences. For
example, dict(d.items()) == d for any dictionary d. The argument,
and the elements of the argument, can be any iterable objects.
- New-style classes can now have a __del__ method, which is called
when the instance is deleted (just like for classic classes).
- Assignment to object.__dict__ is now possible, for objects that are
instances of new-style classes that have a __dict__ (unless the base
class forbids it).
- Methods of built-in types now properly check for keyword arguments
(formerly these were silently ignored). The only built-in methods
that take keyword arguments are __call__, __init__ and __new__.
- The socket function has been converted to a type; see below.
Core and builtins
- Assignment to __debug__ raises SyntaxError at compile-time. This
was promised when 2.1c1 was released as "What's New in Python 2.1c1"
(see below) says.
- Clarified the error messages for unsupported operands to an operator
(like 1 + '').
Extension modules
- mmap has a new keyword argument, "access", allowing a uniform way for
both Windows and Unix users to create read-only, write-through and
copy-on-write memory mappings. This was previously possible only on
Unix. A new keyword argument was required to support this in a
uniform way because the mmap() signatures had diverged across
platforms. Thanks to Jay T Miller for repairing this!
- By default, the gc.garbage list now contains only those instances in
unreachable cycles that have __del__ methods; in 2.1 it contained all
instances in unreachable cycles. "Instances" here has been generalized
to include instances of both new-style and old-style classes.
- The socket module defines a new method for socket objects,
sendall(). This is like send() but may make multiple calls to
send() until all data has been sent. Also, the socket function has
been converted to a subclassable type, like list and tuple (etc.)
before it; socket and SocketType are now the same thing.
- Various bugfixes to the curses module. There is now a test suite
for the curses module (you have to run it manually).
- binascii.b2a_base64 no longer places an arbitrary restriction of 57
bytes on its input.
Library
- tkFileDialog exposes a Directory class and askdirectory
convenience function.
- Symbolic group names in regular expressions must be unique. For
example, the regexp r'(?P<abc>)(?P<abc>)' is not allowed, because a
single name can't mean both "group 1" and "group 2" simultaneously.
Python 2.2 detects this error at regexp compilation time;
previously, the error went undetected, and results were
unpredictable. Also in sre, the pattern.split(), pattern.sub(), and
pattern.subn() methods have been rewritten in C. Also, an
experimental function/method finditer() has been added, which works
like findall() but returns an iterator.
- Tix exposes more commands through the classes DirSelectBox,
DirSelectDialog, ListNoteBook, Meter, CheckList, and the
methods tix_addbitmapdir, tix_cget, tix_configure, tix_filedialog,
tix_getbitmap, tix_getimage, tix_option_get, and tix_resetoptions.
- Traceback objects are now scanned by cyclic garbage collection, so
cycles created by casual use of sys.exc_info() no longer cause
permanent memory leaks (provided garbage collection is enabled).
- os.extsep -- a new variable needed by the RISCOS support. It is the
separator used by extensions, and is '.' on all platforms except
RISCOS, where it is '/'. There is no need to use this variable
unless you have a masochistic desire to port your code to RISCOS.
- mimetypes.py has optional support for non-standard, but commonly
found types. guess_type() and guess_extension() now accept an
optional `strict' flag, defaulting to true, which controls whether
recognize non-standard types or not. A few non-standard types we
know about have been added. Also, when run as a script, there are
new -l and -e options.
- statcache is now deprecated.
- email.Utils.formatdate() now produces the preferred RFC 2822 style
dates with numeric timezones (it used to produce obsolete dates
hard coded to "GMT" timezone). An optional `localtime' flag is
added to produce dates in the local timezone, with daylight savings
time properly taken into account.
- In pickle and cPickle, instead of masking errors in load() by
transforming them into SystemError, we let the original exception
propagate out. Also, implement support for __safe_for_unpickling__
in pickle, as it already was supported in cPickle.
Tools/Demos
Build
- The dbm module is built using libdb1 if available. The bsddb module
is built with libdb3 if available.
- Misc/Makefile.pre.in has been removed by BDFL pronouncement.
C API
- New function PySequence_Fast_GET_SIZE() returns the size of a non-
NULL result from PySequence_Fast(), more quickly than calling
PySequence_Size().
- New argument unpacking function PyArg_UnpackTuple() added.
- New functions PyObject_CallFunctionObjArgs() and
PyObject_CallMethodObjArgs() have been added to make it more
convenient and efficient to call functions and methods from C.
- PyArg_ParseTupleAndKeywords() no longer masks errors, so it's
possible that this will propagate errors it didn't before.
- New function PyObject_CheckReadBuffer(), which returns true if its
argument supports the single-segment readable buffer interface.
New platforms
- We've finally confirmed that this release builds on HP-UX 11.00,
*with* threads, and passes the test suite.
- Thanks to a series of patches from Michael Muller, Python may build
again under OS/2 Visual Age C++.
- Updated RISCOS port by Dietmar Schwertberger.
Tests
- Added a test script for the curses module. It isn't run automatically;
regrtest.py must be run with '-u curses' to enable it.
Windows
Mac
- PythonScript has been moved to unsupported and is slated to be
removed completely in the next release.
- It should now be possible to build applets that work on both OS9 and
OSX.
- The core is now linked with CoreServices not Carbon; as a side
result, default 8bit encoding on OSX is now ASCII.
- Python should now build on OSX 10.1.1
What's New in Python 2.2b1?
Release date: 19-Oct-2001
===========================
Type/class unification and new-style classes
- New-style classes are now always dynamic (except for built-in and
extension types). There is no longer a performance penalty, and I
no longer see another reason to keep this baggage around. One relic
remains: the __dict__ of a new-style class is a read-only proxy; you
must set the class's attribute to modify it. As a consequence, the
__defined__ attribute of new-style types no longer exists, for lack
of need: there is once again only one __dict__ (although in the
future a __cache__ may be resurrected with a similar function, if I
can prove that it actually speeds things up).
- C.__doc__ now works as expected for new-style classes (in 2.2a4 it
always returned None, even when there was a class docstring).
- doctest now finds and runs docstrings attached to new-style classes,
class methods, static methods, and properties.
Core and builtins
- A very subtle syntactical pitfall in list comprehensions was fixed.
For example: [a+b for a in 'abc', for b in 'def']. The comma in
this example is a mistake. Previously, this would silently let 'a'
iterate over the singleton tuple ('abc',), yielding ['abcd', 'abce',
'abcf'] rather than the intended ['ad', 'ae', 'af', 'bd', 'be',
'bf', 'cd', 'ce', 'cf']. Now, this is flagged as a syntax error.
Note that [a for a in <singleton>] is a convoluted way to say
[<singleton>] anyway, so it's not like any expressiveness is lost.
- getattr(obj, name, default) now only catches AttributeError, as
documented, rather than returning the default value for all
exceptions (which could mask bugs in a __getattr__ hook, for
example).
- Weak reference objects are now part of the core and offer a C API.
A bug which could allow a core dump when binary operations involved
proxy reference has been fixed. weakref.ReferenceError is now a
built-in exception.
- unicode(obj) now behaves more like str(obj), accepting arbitrary
objects, and calling a __unicode__ method if it exists.
unicode(obj, encoding) and unicode(obj, encoding, errors) still
require an 8-bit string or character buffer argument.
- isinstance() now allows any object as the first argument and a
class, a type or something with a __bases__ tuple attribute for the
second argument. The second argument may also be a tuple of a
class, type, or something with __bases__, in which case isinstance()
will return true if the first argument is an instance of any of the
things contained in the second argument tuple. E.g.
isinstance(x, (A, B))
returns true if x is an instance of A or B.
Extension modules
- thread.start_new_thread() now returns the thread ID (previously None).
- binascii has now two quopri support functions, a2b_qp and b2a_qp.
- readline now supports setting the startup_hook and the
pre_event_hook, and adds the add_history() function.
- os and posix supports chroot(), setgroups() and unsetenv() where
available. The stat(), fstat(), statvfs() and fstatvfs() functions
now return "pseudo-sequences" -- the various fields can now be
accessed as attributes (e.g. os.stat("/").st_mtime) but for
backwards compatibility they also behave as a fixed-length sequence.
Some platform-specific fields (e.g. st_rdev) are only accessible as
attributes.
- time: localtime(), gmtime() and strptime() now return a
pseudo-sequence similar to the os.stat() return value, with
attributes like tm_year etc.
- Decompression objects in the zlib module now accept an optional
second parameter to decompress() that specifies the maximum amount
of memory to use for the uncompressed data.
- optional SSL support in the socket module now exports OpenSSL
functions RAND_add(), RAND_egd(), and RAND_status(). These calls
are useful on platforms like Solaris where OpenSSL does not
automatically seed its PRNG. Also, the keyfile and certfile
arguments to socket.ssl() are now optional.
- posixmodule (and by extension, the os module on POSIX platforms) now
exports O_LARGEFILE, O_DIRECT, O_DIRECTORY, and O_NOFOLLOW.
Library
- doctest now excludes functions and classes not defined by the module
being tested, thanks to Tim Hochberg.
- HotShot, a new profiler implemented using a C-based callback, has
been added. This substantially reduces the overhead of profiling,
but it is still quite preliminary. Support modules and
documentation will be added in upcoming releases (before 2.2 final).
- profile now produces correct output in situations where an exception
raised in Python is cleared by C code (e.g. hasattr()). This used
to cause wrong output, including spurious claims of recursive
functions and attribution of time spent to the wrong function.
The code and documentation for the derived OldProfile and HotProfile
profiling classes was removed. The code hasn't worked for years (if
you tried to use them, they raised exceptions). OldProfile
intended to reproduce the behavior of the profiler Python used more
than 7 years ago, and isn't interesting anymore. HotProfile intended
to provide a faster profiler (but producing less information), and
that's a worthy goal we intend to meet via a different approach (but
without losing information).
- Profile.calibrate() has a new implementation that should deliver
a much better system-specific calibration constant. The constant can
now be specified in an instance constructor, or as a Profile class or
instance variable, instead of by editing profile.py's source code.
Calibration must still be done manually (see the docs for the profile
module).
Note that Profile.calibrate() must be overriden by subclasses.
Improving the accuracy required exploiting detailed knowledge of
profiler internals; the earlier method abstracted away the details
and measured a simplified model instead, but consequently computed
a constant too small by a factor of 2 on some modern machines.
- quopri's encode and decode methods take an optional header parameter,
which indicates whether output is intended for the header 'Q'
encoding.
- The SocketServer.ThreadingMixIn class now closes the request after
finish_request() returns. (Not when it errors out though.)
- The nntplib module's NNTP.body() method has grown a `file' argument
to allow saving the message body to a file.
- The email package has added a class email.Parser.HeaderParser which
only parses headers and does not recurse into the message's body.
Also, the module/class MIMEAudio has been added for representing
audio data (contributed by Anthony Baxter).
- ftplib should be able to handle files > 2GB.
- ConfigParser.getboolean() now also interprets TRUE, FALSE, YES, NO,
ON, and OFF.
- xml.dom.minidom NodeList objects now support the length attribute
and item() method as required by the DOM specifications.
Tools/Demos
- Demo/dns was removed. It no longer serves any purpose; a package
derived from it is now maintained by Anthony Baxter, see
http://PyDNS.SourceForge.net.
- The freeze tool has been made more robust, and two new options have
been added: -X and -E.
Build
- configure will use CXX in LINKCC if CXX is used to build main() and
the system requires to link a C++ main using the C++ compiler.
C API
- The documentation for the tp_compare slot is updated to require that
the return value must be -1, 0, 1; an arbitrary number <0 or >0 is
not correct. This is not yet enforced but will be enforced in
Python 2.3; even later, we may use -2 to indicate errors and +2 for
"NotImplemented". Right now, -1 should be used for an error return.
- PyLong_AsLongLong() now accepts int (as well as long) arguments.
Consequently, PyArg_ParseTuple's 'L' code also accepts int (as well
as long) arguments.
- PyThread_start_new_thread() now returns a long int giving the thread
ID, if one can be calculated; it returns -1 for error, 0 if no
thread ID is calculated (this is an incompatible change, but only
the thread module used this API). This code has only really been
tested on Linux and Windows; other platforms please beware (and
report any bugs or strange behavior).
- PyUnicode_FromEncodedObject() no longer accepts Unicode objects as
input.
New platforms
Tests
Windows
- Installer: If you install IDLE, and don't disable file-extension
registration, a new "Edit with IDLE" context (right-click) menu entry
is created for .py and .pyw files.
- The signal module now supports SIGBREAK on Windows, thanks to Steven
Scott. Note that SIGBREAK is unique to Windows. The default SIGBREAK
action remains to call Win32 ExitProcess(). This can be changed via