After a long conversation on the stdlib-sig list, I&#39;d like to bring this before you. For those of you not on the peps mailing list, Guido has expressed lukewarmness (well -0.5) to the idea. However, I&#39;d still like your comments on my first PEP.<br>
<br>PEP: XXX<br>Title: Cleaning out sys and the &quot;interpreter&quot; module<br>Version: $Revision$<br>Last-Modified: $Date$<br>Author: Benjamin Peterson<br>Status: Draft<br>Type: Standards Track<br>Content-Type: text/x-rst<br>
Created: 4-April-2008<br>Python-Version: 3.0<br><br><br>Abstract<br>========<br><br>This PEP proposes a new low-level module for CPython-specific interpreter<br>functions in order to clean out the sys module and separate general Python<br>
functionality from implementation details.<br><br><br>Rationale<br>=========<br><br>The sys module currently contains functions and data that can be put into two<br>major groups:<br><br>1. Data and functions that are available in all Python implementations and deal<br>
&nbsp;&nbsp; with the general running of a Python virtual machine.<br><br>&nbsp;&nbsp; - argv<br>&nbsp;&nbsp; - byteorder<br>&nbsp;&nbsp; - path, path_hooks, meta_path, path_importer_cache, and modules<br>&nbsp;&nbsp; - copyright, hexversion, version, and version_info<br>
&nbsp;&nbsp; - displayhook, __displayhook__<br>&nbsp;&nbsp; - excepthook, __excepthook__, exc_info, and exc_clear<br>&nbsp;&nbsp; - exec_prefix and prefix<br>&nbsp;&nbsp; - executable<br>&nbsp;&nbsp; - exit<br>&nbsp;&nbsp; - flags, py3kwarning, dont_write_bytecode, and warn_options<br>
&nbsp;&nbsp; - getfilesystemencoding<br>&nbsp;&nbsp; - get/setprofile<br>&nbsp;&nbsp; - get/settrace, call_tracing<br>&nbsp;&nbsp; - getwindowsversion<br>&nbsp;&nbsp; - maxint and maxunicode<br>&nbsp;&nbsp; - platform<br>&nbsp;&nbsp; - ps1 and ps2<br>&nbsp;&nbsp; - stdin, stderr, stdout, __stdin__, __stderr__, __stdout__<br>
&nbsp;&nbsp; - tracebacklimit<br>&nbsp;&nbsp; <br><br>2. Data and functions that affect the CPython interpreter.<br>&nbsp;&nbsp; <br>&nbsp;&nbsp; - get/setrecursionlimit<br>&nbsp;&nbsp; - get/setcheckinterval<br>&nbsp;&nbsp; - _getframe and _current_frame<br>&nbsp;&nbsp; - getrefcount<br>&nbsp;&nbsp; - get/setdlopenflags<br>
&nbsp;&nbsp; - settscdumps<br>&nbsp;&nbsp; - api_version<br>&nbsp;&nbsp; - winver<br>&nbsp;&nbsp; - dllhandle<br>&nbsp;&nbsp; - float_info<br>&nbsp;&nbsp; - _compact_freelists<br>&nbsp;&nbsp; - _clear_type_cache<br>&nbsp;&nbsp; - subversion<br>&nbsp;&nbsp; - builtin_module_names<br>&nbsp;&nbsp; - callstats<br>&nbsp;&nbsp; - intern<br>
<br>The second collections of items has been steadily increasing over the years<br>causing clutter in sys.&nbsp; Guido has even said he doesn&#39;t recognize some of things<br>in it [#bug-1522]_!<br><br>Other implementations have clearly struggled with what to do about the contents<br>
of sys they can&#39;t implement but must to retain compatibility.&nbsp; For example,<br>Jython&#39;s sys module has dud set/getrecursionlimit functions.&nbsp; Moving these items<br>items off to another module would send a clear message about what functions need<br>
and need not be implemented.<br><br>It has also been proposed that the contents of types module be distributed<br>across the standard library [#types-removal]_; the interpreter module would<br>provide an excellent resting place for internal types like frames and code<br>
objects.<br><br>Specification<br>=============<br><br>A new builtin module named &quot;interpreter&quot; (see `Naming`_) will be added.<br><br>The second list of items above will be split into the stdlib as follows:<br><br>
The interpreter module<br>&nbsp;&nbsp;&nbsp; - get/setrecursionlimit<br>&nbsp;&nbsp;&nbsp; - get/setcheckinterval<br>&nbsp;&nbsp;&nbsp; - _getframe and _current_frame<br>&nbsp;&nbsp;&nbsp; - get/setdlopenflags<br>&nbsp;&nbsp;&nbsp; - settscdumps<br>&nbsp;&nbsp;&nbsp; - api_version<br>&nbsp;&nbsp;&nbsp; - winver<br>&nbsp;&nbsp;&nbsp; - dllhandle<br>
&nbsp;&nbsp;&nbsp; - float_info<br>&nbsp;&nbsp;&nbsp; - _clear_type_cache<br>&nbsp;&nbsp;&nbsp; - subversion<br>&nbsp;&nbsp;&nbsp; - builtin_module_names<br>&nbsp;&nbsp;&nbsp; - callstats<br>&nbsp;&nbsp;&nbsp; - intern<br><br>The gc module:<br>&nbsp;&nbsp;&nbsp; - getrefcount<br>&nbsp;&nbsp;&nbsp; - _compact_freelists<br><br><br>Transition Plan<br>
===============<br><br>Once implemented in 3.x, the interpreter module will be back-ported to 2.6.<br>Py3k warnings will be added the the sys functions it replaces.<br><br><br>Open Issues<br>===========<br><br>What should move?<br>
-----------------<br><br>dont_write_bytecode<br>^^^^^^^^^^^^^^^^^^^^<br><br>Some believe that the writing of bytecode is an implementation detail and should<br>be moved [#bytecode-issue]_.&nbsp; The counterargument is that all current, complete<br>
Python implementations do write some sort of bytecode, so it is valuable to be<br>able to disable it.&nbsp; Also, if it is moved, some wish to put it in the imp<br>module.<br><br><br>Move to some to imp?<br>--------------------<br>
<br>It was noted that dont_write_bytecode or maybe builtin_module_names might fit<br>nicely in the imp module.<br><br><br>Naming<br>------<br><br>The author proposes the name &quot;interpreter&quot; for the new module.&nbsp; &quot;pyvm&quot; has also<br>
been suggested [#pyvm-name]_.&nbsp; The name &quot;cpython&quot; was well liked<br>[#cpython-name]_.<br><br><br>References<br>==========<br><br>.. [#bug-1522]<br><br>&nbsp;&nbsp; <a href="http://bugs.python.org/issue1522">http://bugs.python.org/issue1522</a><br>
<br>.. [#types-removal]<br><br>&nbsp;&nbsp; <a href="http://mail.python.org/pipermail/stdlib-sig/2008-April/000172.html">http://mail.python.org/pipermail/stdlib-sig/2008-April/000172.html</a><br><br>.. [#bytecode-issue]<br><br>&nbsp;&nbsp; <a href="http://mail.python.org/pipermail/stdlib-sig/2008-April/000217.html">http://mail.python.org/pipermail/stdlib-sig/2008-April/000217.html</a><br>
<br>.. [#pyvm-name]<br><br>&nbsp;&nbsp; <a href="http://mail.python.org/pipermail/python-3000/2007-November/011351.html">http://mail.python.org/pipermail/python-3000/2007-November/011351.html</a><br><br>.. [#cpython-name]<br><br>&nbsp;&nbsp; <a href="http://mail.python.org/pipermail/stdlib-sig/2008-April/000223.html">http://mail.python.org/pipermail/stdlib-sig/2008-April/000223.html</a><br>
<br>Copyright<br>=========<br><br>&nbsp;&nbsp;&nbsp; This document has been placed in the public domain.<br><br><br> <br>Local Variables:<br>mode: indented-text<br>indent-tabs-mode: nil<br>sentence-end-double-space: t<br>fill-column: 70<br>
coding: utf-8<br>End:<br><br clear="all"><br>-- <br>Cheers,<br>Benjamin Peterson