PEP 42 – 功能请求
- 作者:
- Jeremy Hylton <jeremy at alum.mit.edu>
- 状态:
- 已撤回
- 类型:
- 流程
- 创建:
- 2000年9月12日
- 更新历史:
引言
此 PEP 包含一个功能请求列表,这些请求可能被考虑用于 Python 的未来版本。大型功能请求不应包含在此处,而应在单独的 PEP 中描述;但是,如果没有自己的 PEP 的大型功能请求可以在这里列出,直到创建其自己的 PEP 为止。有关详细信息,请参阅PEP 0。
创建此 PEP 的目的是为了让我们能够关闭实际上是功能请求的 bug 报告。标记为“打开”时,它们会分散对真实 bug 列表的注意力(理想情况下,真实 bug 数量应该少于一页)。标记为“关闭”时,它们往往会被遗忘。现在的流程是:如果 bug 报告实际上是一个功能请求,请将该功能请求添加到此 PEP 中;将 bug 标记为“功能请求”、“稍后”和“关闭”;并在 bug 中添加一条评论说明情况(明确提及 PEP)。将大型功能请求直接从 bug 数据库移动到单独的 PEP 中也是可以接受的。
此 PEP 应该真正分为四个不同的类别(类别来自 Laura Creighton)
- BDFL 拒绝,认为这是一个坏主意。不要再提了。
- 如果有人编写代码,BDFL 将会添加。(或者至少,如果你带着代码出现,BDFL 会说“修改一下,我就会添加”)。
可能分为
- BDFL 非常希望看到一些代码!
- BDFL 永远不会对这件事感到兴奋,但会在方便的时候将其加入。
- 如果你带着代码出现,BDFL 将会做出宣判。它可能是“糟糕”。
- 这太模糊了。这被拒绝了,但仅仅是因为模糊。如果你喜欢此增强功能,请创建一个新的 PEP。
核心语言/内置函数
- 解析器应该处理更深层次的嵌套解析树。
以下内容将失败 –
eval("["*50
+"]"*50)
– 因为解析器对堆栈大小有硬编码限制。此限制应提高或删除。删除会很困难,因为如果嵌套过深,当前编译器可能会使 C 堆栈溢出。 - 非偶然的 IEEE-754 支持(Infs、NaNs、可设置的陷阱等)。大型项目。
- Windows:尝试创建(甚至访问)具有某些特殊名称的文件可能会挂起或崩溃 Windows 系统。这确实是操作系统中的一个 bug,但一些应用程序试图保护用户免受其影响。发生这种情况时,症状非常令人困惑。
使用名为 prn.txt 等的文件挂起 https://bugs.python.org/issue481171
- eval 和自由变量:如果有一种方法可以在传递具有自由变量的代码对象时将自由变量的绑定传递给 eval,那将很有用。https://bugs.python.org/issue443866
标准库
- urllib 模块应该支持需要身份验证的代理。有关信息,请参阅 SourceForge bug #210619
- 应修改 os.rename() 以处理那些不允许 rename() 跨文件系统边界操作的平台上的 EXDEV 错误,方法是复制文件并删除原始文件。Linux 是一个需要这种处理的系统。
- 信号处理并不总是按预期工作。例如,如果 sys.stdin.readline() 被(返回)信号处理程序中断,它将返回“”。最好让它引发异常(对应于 EINTR)或重新启动。但是这些更改必须应用于所有可以执行阻塞可中断 I/O 的地方。所以这是一个大项目。
- 将 Windows utime 扩展到接受目录路径。
- 将 copy.py 扩展到模块和函数类型。
- 更好地检查
marshal.load*().
的错误输入。 - rfc822.py 在其解析的地址字段类型方面应该比规范更宽松。具体来说,应正确解析格式为“From: Amazon.com <delivers-news2@amazon.com>” 的无效地址。
- cgi.py 的 FieldStorage 类在面对大型二进制文件上传时应该更节省内存。
https://bugs.python.org/issue210674
这里有两个问题:首先,由于 read_lines_to_outerboundary() 使用 readline(),因此可能会有大量数据被读取到二进制文件上传的内存中。它可能应该查看该部分的 Content-Type 标头,并在它是二进制类型时执行分块读取。
第二个问题与 self.lines 属性有关,该属性已在 cgi.py 的修订版 1.56 中删除(另请参阅)
- urllib 应该支持仅包含主机和端口的代理定义
- urlparse 应更新为符合RFC 2396,该规范定义了路径每个段的可选参数。
- pickle 和 cPickle 引发的异常当前不同;这些应该统一(可能异常应该在一个由两者导入的辅助模块中定义)。[没有 bug 报告;我只是想到了这一点。]
- 更多标准库例程应该支持 Unicode。例如,urllib.quote() 可以将 Unicode 字符串转换为 UTF-8,然后执行通常的 %HH 转换。但这并不是唯一的一个!
- 应该有一种方法可以说明你并不介意
str()
或__str__()
返回 Unicode 字符串对象。或者是一个不同的函数 – 已提出ustr()
。或者其他什么……http://sf.net/patch/?func=detailpatch&patch_id=101527&group_id=5470
- 从另一个线程中杀死一个线程。或者也许发送一个信号。或者也许引发一个异步异常。
- 调试器 (pdb) 应该理解包。
- Jim Fulton 建议如下
I wonder if it would be a good idea to have a new kind of temporary file that stored data in memory unless: - The data exceeds some size, or - Somebody asks for a fileno. Then the cgi module (and other apps) could use this thing in a uniform way.
- Jim Fulton 指出 binascii 的 b2a_base64() 函数在某些情况下,没有追加换行符或追加换行符以外的其他内容是有意义的。
提案
- 添加一个可选参数,给出要追加的分隔符字符串,默认为“\n”
- 可能将 None 作为分隔符字符串特殊情况处理,以避免也添加填充字节???
- pydoc 应该与 HTML 文档集成,或者至少能够链接到它们。
- Distutils 应该推断 .c 和 .h 文件的依赖项。
- asynchat 在面对多线程时存在 bug。
- 如果高级模块(httplib、smtplib、nntplib 等)有设置套接字超时的选项就好了。
- curses 库缺少两个重要的调用:newterm() 和 delscreen()
https://bugs.python.org/issue665572,http://bugs.debian.org/175590
- 如果内置的 SSL 套接字类型可用于非阻塞 SSL I/O 那就太好了。目前,使用 SSL 实现异步服务器的 Twisted 等软件包必须需要 pyopenssl 等第三方软件包。
- 将 reST 作为标准库模块
- 导入锁可能需要一些重新设计。
- 一个更友好的 API 来打开文本文件,替换丑陋的(在某些人眼中)“U”模式标志。有一个提议是使用新的内置类型 textfile(filename, mode, encoding)。(它不应该也有一个 bufsize 参数吗?)
- 支持 Tkinter 的新部件和/或参数
- 对于在另一个类中定义的类,__name__ 应该为“outer.inner”,并且 pickling 应该可以工作。(GvR 现在不再确定这是否容易或正确)。
- 确定更清晰的弃用策略(尤其是对于模块)并采取行动。
https://mail.python.org/pipermail/python-dev/2002-April/023165.html
- 为 types 模块的常见用法提供替代方案;Skip Montanaro 已为此想法发布了一个原型 PEP
https://mail.python.org/pipermail/python-dev/2002-May/024346.html
- 对 types 和 string 模块使用待弃用。这需要为尚未涵盖的部分提供替代方案(例如 string.whitespace 和 types.TracebackType)。看来我们无法就此事达成共识。
- 延迟跟踪元组?
https://mail.python.org/pipermail/python-dev/2002-May/023926.html https://bugs.python.org/issue558745
- 将“as”设为关键字。它已经是一个伪关键字足够久了。(它在 2.5 中已弃用,并且将在 2.6 中成为关键字)。
C API 愿望
- 添加 C API 函数来帮助 Windows 用户构建嵌入式应用程序,其中 FILE * 结构与解释器编译的 FILE * 不匹配。
https://bugs.python.org/issue210821
请参阅此 bug 报告,了解一个特定建议,该建议将允许 Borland C++ builder 应用程序与使用 MSVC 构建的 python.dll 交互。
工具
- Python 可以使用 GUI 构建器。
构建和安装
- Modules/makesetup 应该确保它从各种 Setup 文件生成的“config.c”文件是有效的 C。它目前接受 Python 或 C 标识符中不允许的字符作为模块名称。
- 从源代码构建不应尝试覆盖 Include/graminit.h 和 Parser/graminit.c 文件,至少对于下载源代码发行版而不是从 Subversion 或快照工作的人来说是这样。某些人在不寻常的构建环境中发现这是一个问题。
- configure 脚本可能随着时间的推移变得有点陈旧,并且可能无法很好地跟踪 autoconf 的更新功能。它应该被查看并可能被清理。
https://mail.python.org/pipermail/python-dev/2004-January/041790.html
- 使 Python 符合 FHS(文件系统层次结构标准)
来源:https://github.com/python/peps/blob/main/peps/pep-0042.rst
上次修改时间:2024-04-14 20:08:31 GMT