blob: a7ff5a31fc2fe9972c4587d45821612238c1fe55 [file] [log] [blame]
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00001****************************
Raymond Hettingerf558ddd2009-06-28 21:37:08 +00002 What's New In Python 3.2
Raymond Hettinger6e6565b2009-06-28 20:56:11 +00003****************************
4
5:Author: Raymond Hettinger
6:Release: |release|
7:Date: |today|
8
9.. $Id$
10 Rules for maintenance:
11
12 * Anyone can add text to this document. Do not spend very much time
13 on the wording of your changes, because your text will probably
14 get rewritten to some degree.
15
16 * The maintainer will go through Misc/NEWS periodically and add
17 changes; it's therefore more important to add your changes to
18 Misc/NEWS than to this file.
19
20 * This is not a complete list of every single change; completeness
21 is the purpose of Misc/NEWS. Some changes I consider too small
22 or esoteric to include. If such a change is added to the text,
23 I'll just remove it. (This is another reason you shouldn't spend
24 too much time on writing your addition.)
25
26 * If you want to draw your new text to the attention of the
27 maintainer, add 'XXX' to the beginning of the paragraph or
28 section.
29
30 * It's OK to just add a fragmentary note about a change. For
31 example: "XXX Describe the transmogrify() function added to the
32 socket module." The maintainer will research the change and
33 write the necessary text.
34
35 * You can comment out your additions if you like, but it's not
36 necessary (especially when a final release is some months away).
37
38 * Credit the author of a patch or bugfix. Just the name is
Georg Brandlda0a2112010-09-05 11:28:33 +000039 sufficient; the e-mail address isn't necessary. It's helpful to
40 add the issue number:
Raymond Hettinger6e6565b2009-06-28 20:56:11 +000041
Éric Araujo4234ad42010-09-05 17:32:25 +000042 XXX Describe the transmogrify() function added to the socket
43 module.
44
45 (Contributed by P.Y. Developer; :issue:`12345`.)
Raymond Hettinger6e6565b2009-06-28 20:56:11 +000046
47 This saves the maintainer the effort of going through the SVN log
48 when researching a change.
49
50This article explains the new features in Python 3.2, compared to 3.1.
51
52
Éric Araujo4234ad42010-09-05 17:32:25 +000053PEP 391: Dictionary Based Configuration for Logging
54====================================================
Raymond Hettingeref2335c2010-09-05 08:35:38 +000055
Éric Araujo4234ad42010-09-05 17:32:25 +000056The :mod:`logging` module had two ways of configuring the module, either by calling
57functions for each option or by reading an external file saved in a :mod:`ConfigParser`
Georg Brandlda0a2112010-09-05 11:28:33 +000058format. Those options did not provide the flexibility to create configurations
Éric Araujo4234ad42010-09-05 17:32:25 +000059from JSON or YAML files and they did not support incremental configuration, which
Georg Brandlda0a2112010-09-05 11:28:33 +000060is needed for specifying logger options from a command line.
Raymond Hettingeref2335c2010-09-05 08:35:38 +000061
62To support a more flexible style, the module now offers
63:func:`logging.config.dictConfig` to use dictionaries to specify logger
Éric Araujo4234ad42010-09-05 17:32:25 +000064configuration (including formatters, handlers, filters, and loggers). For
Georg Brandlda0a2112010-09-05 11:28:33 +000065example:
Raymond Hettingeref2335c2010-09-05 08:35:38 +000066
Georg Brandlda0a2112010-09-05 11:28:33 +000067>>> import logging.config
68>>> logging.config.dictConfig(json.load(open('log.cfg', 'rb')))
Raymond Hettingeref2335c2010-09-05 08:35:38 +000069
Éric Araujo4234ad42010-09-05 17:32:25 +000070The above fragment configures logging from a JSON-encoded dictionary stored in a
Raymond Hettingeref2335c2010-09-05 08:35:38 +000071file called "log.cfg". Here's a working example of a configuration dictionary::
72
Georg Brandlda0a2112010-09-05 11:28:33 +000073 {"version": 1,
74 "formatters": {"brief": {"format": "%(levelname)-8s: %(name)-15s: %(message)s"},
75 "full": {"format": "%(asctime)s %(name)-15s %(levelname)-8s %(message)s"},
76 },
77 "handlers": {"console": {
78 "class": "logging.StreamHandler",
79 "formatter": "brief",
80 "level": "INFO",
81 "stream": "ext://sys.stdout"},
82 "console_priority": {
83 "class": "logging.StreamHandler",
84 "formatter": "full",
85 "level": "ERROR",
86 "stream": "ext://sys.stderr"},
87 },
88 "root": {"level": "DEBUG", "handlers": ["console", "console_priority"]}}
Raymond Hettingeref2335c2010-09-05 08:35:38 +000089
90.. seealso::
91
92 :pep:`391` - Dictionary Based Configuration for Logging
93 PEP written by Vinay Sajip.
94
Georg Brandlda0a2112010-09-05 11:28:33 +000095
Raymond Hettingerf95b1992010-09-04 23:53:24 +000096PEP 3147: PYC Repository Directories
97=====================================
98
99Python's scheme for caching bytecode in *.pyc* files did not work well in
100environments with multiple python interpreters. If one interpreter encountered
101a cached file created by another interpreter, it would recompile the source and
102overwrite the cached file, thus losing the benefits of caching.
103
104The issue of "pyc fights" has become more pronounced as it has become
Éric Araujo4234ad42010-09-05 17:32:25 +0000105commonplace for Linux distributions to ship with multiple versions of Python.
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000106These conflicts also arise with CPython alternatives such as Unladen Swallow.
107
108To solve this problem, Python's import machinery has been extended to use
Éric Araujo4234ad42010-09-05 17:32:25 +0000109distinct filenames for each interpreter. Instead of Python 3.2 and Python 3.3 and
110Unladen Swallow each competing for a file called "mymodule.pyc", they will now
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000111look for "mymodule.cpython-32.pyc", "mymodule.cpython-33.pyc", and
Éric Araujo4234ad42010-09-05 17:32:25 +0000112"mymodule.unladen10.pyc". And to prevent all of these new files from
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000113cluttering source directories, the *pyc* files are now collected in a
114"__pycache__" directory stored under the package directory.
115
116Aside from the filenames and target directories, the new scheme has a few
117aspects that are visible to the programmer:
118
Georg Brandlda0a2112010-09-05 11:28:33 +0000119* Imported modules now have a :attr:`__cached__` attribute which stores the name
120 of the actual file that was imported:
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000121
Georg Brandlda0a2112010-09-05 11:28:33 +0000122 >>> import collections
123 >>> collections.__cached__
124 'c:/py32/lib/__pycache__/collections.cpython-32.pyc'
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000125
126* The tag that is unique to each interpreter is accessible from the :mod:`imp`
Georg Brandlda0a2112010-09-05 11:28:33 +0000127 module:
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000128
Georg Brandlda0a2112010-09-05 11:28:33 +0000129 >>> import imp
130 >>> imp.get_tag()
131 'cpython-32'
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000132
133* Scripts that try to deduce source filename from the imported file now need to
134 be smarter. It is no longer sufficient to simply strip the "c" from a ".pyc"
135 filename. Instead, use the new functions in the :mod:`imp` module:
136
Georg Brandlda0a2112010-09-05 11:28:33 +0000137 >>> imp.source_from_cache('c:/py32/lib/__pycache__/collections.cpython-32.pyc')
138 'c:/py32/lib/collections.py'
139 >>> imp.cache_from_source('c:/py32/lib/collections.py')
140 'c:/py32/lib/__pycache__/collections.cpython-32.pyc'
Raymond Hettingerf95b1992010-09-04 23:53:24 +0000141
142* The :mod:`py_compile` and :mod:`compileall` modules have been updated to
143 reflect the new naming convention and target directory.
144
145.. seealso::
146
147 :pep:`3147` - PYC Repository Directories
148 PEP written by Barry Warsaw.
149
Georg Brandlda0a2112010-09-05 11:28:33 +0000150
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000151PEP 3149 ABI Version Tagged .so Files
152=====================================
Georg Brandlf11c6c42010-09-03 22:20:58 +0000153
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000154The PYC repository directory allows multiple bytecode cache files to be
155co-located. This PEP implements a similar mechanism for shared object files by
156giving them a common directory and distinct names for each version.
Georg Brandlf11c6c42010-09-03 22:20:58 +0000157
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000158The common directory is "pyshared" and the file names are made distinct by
159identifying the Python implementation (such as CPython, PyPy, Jython, etc.), the
160major and minor version numbers, and optional build flags (such as "d" for
Éric Araujo4234ad42010-09-05 17:32:25 +0000161debug, "m" for pymalloc, "u" for wide-unicode). For an arbitrary package "foo",
Raymond Hettingerebea6fa2010-09-05 00:27:25 +0000162you may see these files when the distribution package is installed::
163
164 /usr/share/pyshared/foo.cpython-32m.so
165 /usr/share/pyshared/foo.cpython-33md.so
166
167In Python itself, the tags are accessible from functions in the :mod:`sysconfig`
168module::
169
170 >>> import sysconfig
171 >>> sysconfig.get_config_var('SOABI') # find the version tag
172 'cpython-32mu'
173 >>> sysconfig.get_config_var('SO') # find the full filename extension
174 'cpython-32mu.so'
175
176.. seealso::
177
178 :pep:`3149` - ABI Version Tagged .so Files
179 PEP written by Barry Warsaw.
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000180
181
182Other Language Changes
183======================
184
185Some smaller changes made to the core Python language are:
186
Georg Brandlda0a2112010-09-05 11:28:33 +0000187* The :func:`hasattr` function used to catch and suppress any Exception. Now,
188 it only catches :exc:`AttributeError`. Under the hood, :func:`hasattr` works
189 by calling :func:`getattr` and throwing away the results. This is necessary
190 because dynamic attribute creation is possible using :meth:`__getattribute__`
Éric Araujo4234ad42010-09-05 17:32:25 +0000191 or :meth:`__getattr__`. If :func:`hasattr` were to just scan instance and class
Georg Brandlda0a2112010-09-05 11:28:33 +0000192 dictionaries it would miss the dynmaic methods and make it difficult to
193 implement proxy objects.
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000194
195 (Discovered by Yury Selivanov and fixed by Benjamin Peterson; :issue:`9666`.)
196
Éric Araujo4234ad42010-09-05 17:32:25 +0000197* The :func:`str` of a float or complex number is now the same as its
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000198 :func:`repr`. Previously, the :func:`str` form was shorter but that just
Éric Araujo4234ad42010-09-05 17:32:25 +0000199 caused confusion and is no longer needed now that the shortest possible
Georg Brandlda0a2112010-09-05 11:28:33 +0000200 :func:`repr` is displayed by default:
Raymond Hettingerbb734c62010-09-05 05:56:44 +0000201
Georg Brandlda0a2112010-09-05 11:28:33 +0000202 >>> repr(math.pi)
203 '3.141592653589793'
204 >>> str(math.pi)
205 '3.141592653589793'
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000206
Georg Brandlda0a2112010-09-05 11:28:33 +0000207 (Proposed and implemented by Mark Dickinson; :issue:`9337`.)
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000208
Raymond Hettinger6e8fe972010-09-05 06:13:47 +0000209* The :func:`functools.wraps` decorator now adds a :attr:`__wrapped__` attribute
210 pointing to the original callable function. This allows wrapped functions to
211 be introspected. It also copies :attr:`__annotations__` if defined. And now
212 it also gracefully skips over missing attributes such as :attr:`__doc__` which
213 might not be defined for the wrapped callable.
214
215 (By Nick Coghlan and Terrence Cole; :issue:`9567`, :issue:`3445`, and
216 :issue:`8814`.)
217
218* The :mod:`abc` module now supports :func:`abstractclassmethod` and
Raymond Hettingerbcbd6962010-09-05 08:46:36 +0000219 :func:`abstractstaticmethod`.
Raymond Hettinger6e8fe972010-09-05 06:13:47 +0000220
Georg Brandlda0a2112010-09-05 11:28:33 +0000221 (:issue:`5867`.)
222
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000223
224New, Improved, and Deprecated Modules
225=====================================
226
Éric Araujo4234ad42010-09-05 17:32:25 +0000227* The :mod:`functools` module includes a new decorator for caching function
Georg Brandlda0a2112010-09-05 11:28:33 +0000228 calls. :func:`functools.lru_cache` can save repeated queries to an external
229 resource whenever the results are expected to be the same.
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000230
Raymond Hettinger86f96132010-08-06 23:23:49 +0000231 For example, adding a caching decorator to a database query function can save
232 database accesses for popular searches::
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000233
Georg Brandlda0a2112010-09-05 11:28:33 +0000234 @functools.lru_cache(maxsize=300)
235 def get_phone_number(name):
236 c = conn.cursor()
237 c.execute('SELECT phonenumber FROM phonelist WHERE name=?', (name,))
238 return c.fetchone()[0]
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000239
Raymond Hettingerf3098282010-08-15 03:30:45 +0000240 To help with choosing an effective cache size, the wrapped function is
Georg Brandlda0a2112010-09-05 11:28:33 +0000241 instrumented with two attributes *cache_hits* and *cache_misses*:
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000242
Georg Brandlda0a2112010-09-05 11:28:33 +0000243 >>> for name in user_requests:
244 ... get_phone_number(name)
245 >>> print(get_phone_number.cache_hits, get_phone_number.cache_misses)
246 4805 980
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000247
Raymond Hettingerf3098282010-08-15 03:30:45 +0000248 If the phonelist table gets updated, the outdated contents of the cache can be
Georg Brandlda0a2112010-09-05 11:28:33 +0000249 cleared with:
Raymond Hettingerf3098282010-08-15 03:30:45 +0000250
Georg Brandlda0a2112010-09-05 11:28:33 +0000251 >>> get_phone_number.cache_clear()
Raymond Hettingerf3098282010-08-15 03:30:45 +0000252
Georg Brandlda0a2112010-09-05 11:28:33 +0000253 (Contributed by Raymond Hettinger.)
Raymond Hettingeraed05eb2010-08-02 01:43:41 +0000254
Georg Brandlda0a2112010-09-05 11:28:33 +0000255* The previously deprecated :func:`contextlib.nested` function has been removed
256 in favor of a plain :keyword:`with` statement which can accept multiple
257 context managers. The latter technique is faster (because it is built-in),
258 and it does a better job finalizing multiple context managers when one of them
259 raises an exception.
Antoine Pitroud67075e2010-07-31 22:48:02 +0000260
261 (Contributed by Georg Brandl and Mattias Brändström;
262 `appspot issue 53094 <http://codereview.appspot.com/53094>`_.)
263
Georg Brandlda0a2112010-09-05 11:28:33 +0000264* The :class:`ftplib.FTP` class now supports the context manager protocol to
Éric Araujo4234ad42010-09-05 17:32:25 +0000265 unconditionally consume :exc:`socket.error` exceptions and to close the FTP
Georg Brandlda0a2112010-09-05 11:28:33 +0000266 connection when done:
Raymond Hettingerbcbd6962010-09-05 08:46:36 +0000267
Georg Brandlda0a2112010-09-05 11:28:33 +0000268 >>> from ftplib import FTP
269 >>> with FTP("ftp1.at.proftpd.org") as ftp:
270 ... ftp.login()
271 ... ftp.dir()
272 ...
273 '230 Anonymous login ok, restrictions apply.'
274 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 .
275 dr-xr-xr-x 9 ftp ftp 154 May 6 10:43 ..
276 dr-xr-xr-x 5 ftp ftp 4096 May 6 10:43 CentOS
277 dr-xr-xr-x 3 ftp ftp 18 Jul 10 2008 Fedora
Raymond Hettingerbcbd6962010-09-05 08:46:36 +0000278
Giampaolo Rodolàbd576b72010-05-10 14:53:29 +0000279 (Contributed by Tarek Ziadé and Giampaolo Rodolà; :issue:`4972`.)
280
Georg Brandlda0a2112010-09-05 11:28:33 +0000281* A warning message will now get printed at interpreter shutdown if the
282 :data:`gc.garbage` list isn't empty. This is meant to make the programmer
Éric Araujo4234ad42010-09-05 17:32:25 +0000283 aware that their code contains object finalization issues.
Georg Brandlda0a2112010-09-05 11:28:33 +0000284
Antoine Pitrou696e0352010-08-08 22:18:46 +0000285 (Added by Antoine Pitrou; :issue:`477863`.)
286
Andrew M. Kuchling4ea04a32010-08-18 22:30:34 +0000287* The :mod:`os` module now has the :const:`ST_RDONLY` and :const:`ST_NOSUID`
288 constants, for use with the :func:`~os.statvfs` function.
Raymond Hettingerbcbd6962010-09-05 08:46:36 +0000289
Andrew M. Kuchling4ea04a32010-08-18 22:30:34 +0000290 (Patch by Adam Jackson; :issue:`7647`.)
291
Antoine Pitroud67075e2010-07-31 22:48:02 +0000292* The :func:`shutil.copytree` function has two new options:
293
Éric Araujo4234ad42010-09-05 17:32:25 +0000294 * *ignore_dangling_symlinks*: when ``symlinks=False`` (meaning that the function
295 copies the file pointed to by the symlink, not the symlink itself), this
Georg Brandlda0a2112010-09-05 11:28:33 +0000296 option will silence the error raised if the file doesn't exist.
Antoine Pitroud67075e2010-07-31 22:48:02 +0000297
Éric Araujo4234ad42010-09-05 17:32:25 +0000298 * *copy_function*: a callable that will be used to copy files.
Antoine Pitroud67075e2010-07-31 22:48:02 +0000299 :func:`shutil.copy2` is used by default.
300
301 (Contributed by Tarek Ziadé.)
302
Georg Brandlda0a2112010-09-05 11:28:33 +0000303* Socket objects now have a :meth:`~socket.socket.detach()` method which puts
304 the socket into closed state without actually closing the underlying file
305 descriptor. The latter can then be reused for other purposes.
Antoine Pitroue43f9d02010-08-08 23:24:50 +0000306
307 (Added by Antoine Pitrou; :issue:`8524`.)
308
Raymond Hettingerd881f312010-09-05 08:54:32 +0000309* The :mod:`sqlite3` module has two new capabilities.
Antoine Pitroud67075e2010-07-31 22:48:02 +0000310
Georg Brandlda0a2112010-09-05 11:28:33 +0000311 The :attr:`Connection.in_transit` attribute is true if there is an active
312 transaction for uncommitted changes.
Antoine Pitroud67075e2010-07-31 22:48:02 +0000313
Raymond Hettingerd881f312010-09-05 08:54:32 +0000314 The :meth:`Connection.enable_load_extension` and
315 :meth:`Connection.load_extension` methods allows you to load SQLite extensions
316 from ".so" files. One well-known extension is the fulltext-search extension
317 distributed with SQLite.
Antoine Pitroud67075e2010-07-31 22:48:02 +0000318
Georg Brandlda0a2112010-09-05 11:28:33 +0000319 (Contributed by R. David Murray and Shashwat Anand; :issue:`8845`.)
Antoine Pitroud67075e2010-07-31 22:48:02 +0000320
Georg Brandlda0a2112010-09-05 11:28:33 +0000321* The :mod:`ssl` module has a new class, :class:`~ssl.SSLContext` which serves
322 as a container for various persistent SSL data, such as protocol settings,
323 certificates, private keys, and various other options. The
324 :meth:`~ssl.SSLContext.wrap_socket` method allows to create an SSL socket from
325 such an SSL context. (Added by Antoine Pitrou; :issue:`8550`.)
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +0000326
Georg Brandlda0a2112010-09-05 11:28:33 +0000327 The :func:`ssl.wrap_socket` constructor function now takes a *ciphers*
328 argument that's a string listing the encryption algorithms to be allowed; the
329 format of the string is described `in the OpenSSL documentation
330 <http://www.openssl.org/docs/apps/ciphers.html#CIPHER_LIST_FORMAT>`__. (Added
331 by Antoine Pitrou; :issue:`8322`.)
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +0000332
333 Various options have been added to the :mod:`ssl` module, such as
Georg Brandlda0a2112010-09-05 11:28:33 +0000334 :data:`~ssl.OP_NO_SSLv2` which allows to force disabling of the insecure and
335 obsolete SSLv2 protocol. (Added by Antoine Pitrou; :issue:`4870`.)
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +0000336
Georg Brandlda0a2112010-09-05 11:28:33 +0000337 Another change makes the extension load all of OpenSSL's ciphers and digest
338 algorithms so that they're all available. Some SSL certificates couldn't be
339 verified, reporting an "unknown algorithm" error. (Reported by Beda Kosata,
340 and fixed by Antoine Pitrou; :issue:`8484`.)
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +0000341
Georg Brandlda0a2112010-09-05 11:28:33 +0000342 The version of OpenSSL being used is now available as the module attributes
343 :data:`ssl.OPENSSL_VERSION` (a string), :data:`ssl.OPENSSL_VERSION_INFO` (a
344 5-tuple), and :data:`ssl.OPENSSL_VERSION_NUMBER` (an integer). (Added by
345 Antoine Pitrou; :issue:`8321`.)
Antoine Pitrou4f2a0a82010-07-31 18:08:33 +0000346
Georg Brandlda0a2112010-09-05 11:28:33 +0000347* The previously deprecated :func:`string.maketrans` function has been removed
348 in favor of the static methods, :meth:`bytes.maketrans` and
Raymond Hettingerf558ddd2009-06-28 21:37:08 +0000349 :meth:`bytearray.maketrans`. This change solves the confusion around which
Georg Brandlda0a2112010-09-05 11:28:33 +0000350 types were supported by the :mod:`string` module. Now, :class:`str`,
Raymond Hettingerf558ddd2009-06-28 21:37:08 +0000351 :class:`bytes`, and :class:`bytearray` each have their own **maketrans** and
Georg Brandlda0a2112010-09-05 11:28:33 +0000352 **translate** methods with intermediate translation tables of the appropriate
353 type.
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000354
Raymond Hettingerf558ddd2009-06-28 21:37:08 +0000355 (Contributed by Georg Brandl; :issue:`5675`.)
356
Giampaolo Rodolà42382fe2010-08-17 16:09:53 +0000357* :class:`~poplib.POP3_SSL` class now accepts a *context* parameter, which is a
358 :class:`ssl.SSLContext` object allowing bundling SSL configuration options,
359 certificates and private keys into a single (potentially long-lived)
360 structure.
361
362 (Contributed by Giampaolo Rodolà; :issue:`8807`.)
363
Georg Brandlda0a2112010-09-05 11:28:33 +0000364
Antoine Pitroud42bc512009-11-10 23:18:31 +0000365Multi-threading
366===============
367
Georg Brandlda0a2112010-09-05 11:28:33 +0000368* The mechanism for serializing execution of concurrently running Python threads
369 (generally known as the GIL or Global Interpreter Lock) has been rewritten.
370 Among the objectives were more predictable switching intervals and reduced
371 overhead due to lock contention and the number of ensuing system calls. The
372 notion of a "check interval" to allow thread switches has been abandoned and
373 replaced by an absolute duration expressed in seconds. This parameter is
374 tunable through :func:`sys.setswitchinterval()`. It currently defaults to 5
375 milliseconds.
Antoine Pitroud42bc512009-11-10 23:18:31 +0000376
377 Additional details about the implementation can be read from a `python-dev
378 mailing-list message
379 <http://mail.python.org/pipermail/python-dev/2009-October/093321.html>`_
Georg Brandlda0a2112010-09-05 11:28:33 +0000380 (however, "priority requests" as exposed in this message have not been kept
381 for inclusion).
Antoine Pitroud42bc512009-11-10 23:18:31 +0000382
Georg Brandl5e73a812010-04-22 07:02:51 +0000383 (Contributed by Antoine Pitrou.)
Antoine Pitroud42bc512009-11-10 23:18:31 +0000384
Antoine Pitrou5bab5082009-11-13 22:58:45 +0000385* Recursive locks (created with the :func:`threading.RLock` API) now benefit
Georg Brandlda0a2112010-09-05 11:28:33 +0000386 from a C implementation which makes them as fast as regular locks, and between
387 10x and 15x faster than their previous pure Python implementation.
Antoine Pitrou5bab5082009-11-13 22:58:45 +0000388
389 (Contributed by Antoine Pitrou; :issue:`3001`.)
390
Georg Brandlda0a2112010-09-05 11:28:33 +0000391* Regular and recursive locks now accept an optional *timeout* argument to their
392 ``acquire`` method. (Contributed by Antoine Pitrou; :issue:`7316`.)
393
Antoine Pitroue95a9ff2010-05-04 23:31:41 +0000394 Similarly, :meth:`threading.Semaphore.acquire` also gains a *timeout*
Georg Brandlda0a2112010-09-05 11:28:33 +0000395 argument. (Contributed by Torsten Landschoff; :issue:`850728`.)
Antoine Pitroue95a9ff2010-05-04 23:31:41 +0000396
Antoine Pitroud42bc512009-11-10 23:18:31 +0000397
Georg Brandlda0a2112010-09-05 11:28:33 +0000398.. Optimizations
399 =============
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000400
Georg Brandlda0a2112010-09-05 11:28:33 +0000401 Major performance enhancements have been added:
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000402
Georg Brandlda0a2112010-09-05 11:28:33 +0000403 * Stub
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000404
Victor Stinner94908bb2010-08-18 21:23:25 +0000405
Victor Stinnere8d51452010-08-19 01:05:19 +0000406Filenames and unicode
407=====================
Victor Stinner94908bb2010-08-18 21:23:25 +0000408
409The filesystem encoding can be specified by setting the
Éric Araujo358b63a2010-08-18 22:35:23 +0000410:envvar:`PYTHONFSENCODING` environment variable before running the interpreter.
Victor Stinner9802b392010-08-19 11:36:43 +0000411The value is an encoding name, e.g. ``iso-8859-1``. This variable is not
412available (ignored) on Windows and Mac OS X: the filesystem encoding is pinned
413to ``'mbcs'`` on Windows and ``'utf-8'`` on Mac OS X.
Victor Stinner94908bb2010-08-18 21:23:25 +0000414
Éric Araujo4234ad42010-09-05 17:32:25 +0000415The :mod:`os` module has two new functions: :func:`~os.fsencode` and
416:func:`~os.fsdecode`.
Victor Stinnere8d51452010-08-19 01:05:19 +0000417
Victor Stinner94908bb2010-08-18 21:23:25 +0000418
Georg Brandlda0a2112010-09-05 11:28:33 +0000419.. IDLE
420 ====
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000421
Georg Brandlda0a2112010-09-05 11:28:33 +0000422 * Stub
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000423
424
425Build and C API Changes
426=======================
427
428Changes to Python's build process and to the C API include:
429
Georg Brandlda0a2112010-09-05 11:28:33 +0000430* The C functions that access the Unicode Database now accept and return
431 characters from the full Unicode range, even on narrow unicode builds
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000432 (Py_UNICODE_TOLOWER, Py_UNICODE_ISDECIMAL, and others). A visible difference
Georg Brandlda0a2112010-09-05 11:28:33 +0000433 in Python is that :func:`unicodedata.numeric` now returns the correct value
434 for large code points, and :func:`repr` may consider more characters as
435 printable.
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000436
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000437 (Reported by Bupjoe Lee and fixed by Amaury Forgeot D'Arc; :issue:`5127`.)
438
Georg Brandlda0a2112010-09-05 11:28:33 +0000439* Computed gotos are now enabled by default on supported compilers (which are
440 detected by the configure script). They can still be disable selectively by
441 specifying ``--without-computed-gotos``.
Raymond Hettinger1784ff02010-09-05 01:00:19 +0000442
Georg Brandlda0a2112010-09-05 11:28:33 +0000443 (Contributed by Antoine Pitrou; :issue:`9203`.)
444
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000445
Raymond Hettingerf558ddd2009-06-28 21:37:08 +0000446Porting to Python 3.2
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000447=====================
448
Georg Brandlda0a2112010-09-05 11:28:33 +0000449This section lists previously described changes and other bugfixes that may
450require changes to your code:
Raymond Hettinger6e6565b2009-06-28 20:56:11 +0000451
Georg Brandlda0a2112010-09-05 11:28:33 +0000452* :class:`bytearray` objects cannot be used anymore as filenames: convert them
453 to :class:`bytes`.
Victor Stinnerdcb24032010-04-22 12:08:36 +0000454
Victor Stinner25e8ec42010-06-25 00:02:38 +0000455* PyArg_Parse*() functions:
Victor Stinner3dcb5ac2010-06-08 22:54:19 +0000456
Victor Stinner25e8ec42010-06-25 00:02:38 +0000457 * "t#" format has been removed: use "s#" or "s*" instead
458 * "w" and "w#" formats has been removed: use "w*" instead
459
Amaury Forgeot d'Arc661730e2010-09-03 22:43:08 +0000460* The :ctype:`PyCObject` type, deprecated in 3.1, has been removed. To wrap
Georg Brandlda0a2112010-09-05 11:28:33 +0000461 opaque C pointers in Python objects, the :ctype:`PyCapsule` API should be used
Éric Araujo4234ad42010-09-05 17:32:25 +0000462 instead; the new type has a well-defined interface for passing typing safety
Georg Brandlda0a2112010-09-05 11:28:33 +0000463 information and a less complicated signature for calling a destructor.