EP.010 / EVIDENCE

回到未来证据关系

逐字稿主张、关系类型与来源之间的双向公开映射。

C-010-030

支持

一行 print 是可直接复现的当下场景;Guido 约 1999 年的回顾支撑 1989 年底起点及可读性设计观点。不能据此把 Python 排名为最容易的语言,也不能把后见回顾当作 1989 年同期日志。

定位:Foreword for Programming Python: December 1989 hobby project; paragraphs on indentation, readability, reduced visual clutter, and clarity inherited from ABC

C-010-065

背景

这是从设计反差提出问题,不把提问写成已经证明的因果结论。

定位:Python origin retrospective and PEP 3000 statement of deliberate Python 2 / 3 incompatibility

C-010-031

支持

创建者后见前言支撑 hobby project、ABC 后代、扩展限制、Unix/C 受众与 Modula-3 影响;不能精确还原 1989 年逐步动机,也不能把回顾写成同期记录。

定位:Foreword for Programming Python: December 1989 hobby project; descendant of ABC for Unix/C hackers; ABC closed-system limitation; Unix infrastructure; Modula-3 influence

C-010-032

支持

同期发布邮件与 NEWS 支撑公开分发、文档和跨平台入口;只能说明采用入口已经存在,不能证明用户数量、市场份额或单一爆红时刻。

定位:Python 1.0.0 release email dated 1994-01-27: FTP mirrors and Unix, Mac, DOS access; Python 1.0.0 NEWS: source organization, documentation, portability, and Mac port

C-010-066

背景

这是从公开分发过渡到下游兼容问题的叙事连接,不声称有早期用户规模数据。

定位:Python 1.0 public distribution and PEP 3000 compatibility transition

C-010-033

支持

PEP 238 支撑除法变化的渐进迁移机制;它只是一项变化的路径,不能代表全部 Python 3 不兼容变化都采用相同策略。

定位:PEP 238 Motivation, Transitional measures, Command Line Option, and API Changes: //, __future__.division, and warning-based migration

C-010-034

支持

同期 PEP 支撑大范围清理与主动接受不兼容;关于长期收益和近期成本的分配是有边界的编辑判断,不能证明每项变化都必要或断裂是唯一方案。

定位:PEP 3100 Introduction and change list; PEP 3000 Compatibility and Transition and Implementation

C-010-035

支持

PEP 3000 支撑最初过渡方案;它是过程设计,不证明工具能自动完成迁移,也不证明下游会按原先预期的速度采用。

定位:PEP 3000 Transition Plan and Implementation: Py3k warnings, backports, 2to3, and two source distributions

C-010-036

支持

版本文档固定文本 / 字节模型变化,Brett Cannon 以后见观点解释动机并承认采用预期偏差;不能把他的解释代表全体核心开发者,也不能把 Unicode 写成全部断裂的唯一原因。

定位:Why Python 3 exists: Python 2 str as text and bytes, adoption expectation, and future incompatibility reflection; What's New In Python 3.0: Text Vs. Data Instead Of Unicode Vs. 8-bit

C-010-037

支持

版本文档支撑 print、迭代器 / 视图、整数和文本 / 字节等用户可见变化;不能推断每项变化具有同样必要性、成本或动机。

定位:What's New In Python 3.0: Print Is A Function, Views And Iterators Instead Of Lists, Integers, and Text Vs. Data; PEP 238 division model

C-010-064

支持

三份发布 / 路线文档固定 Python 3.0、Python 2.7 和不发布 Python 2.8 的顺序;它们不能把发布写成生态采用,也不能证明下游已有完整迁移路径。

定位:PEP 361 Python 2.6 and 3.0 release schedule; PEP 373 Python 2.7 release and maintenance schedule; PEP 404 Abstract and Un-release Schedule

C-010-076

支持

这是把官方迁移步骤还原为可听的工作台;来源支撑工具和语义边界,不支撑某个未登记的真实开发者个案。

定位:PEP 3000 transition plan and Python 3.0 porting guidance: Py3k warnings, 2to3, and text / bytes migration decisions

C-010-038

支持

过渡规范和版本文档支撑机械转换与文本 / 字节人工审计的边界;不能据此说工具毫无价值,也不能假定所有项目具有相同数据流。

定位:PEP 3000 Transition Plan and 2to3 limits; What's New In Python 3.0 Porting To Python 3.0 and Text Vs. Data

C-010-077

支持

两阶段的协作和发布含义由过渡计划与 Python-Future 资料共同支撑;不能声称所有项目都按同一路线迁移。

定位:PEP 3000 two-distribution transition and Python-Future Stage 1 / Stage 2 workflow

C-010-039

支持

版本固定源码、文档和元数据支撑两阶段流程随 0.8.0 形成;不能把它回填到 2008 年,也不能证明实际采用范围。

定位:Python-Future commits e8ead804 and c67154db for --stage1 / --stage2 code and docs; PyPI future 0.8.0 upload metadata dated 2013-10-28

C-010-078

支持

把工具能力与项目责任分开;来源不证明 future 自动解决数据库、第三方 API 或公共接口的语义。

定位:Python-Future v0.11 quickstart and two-stage documentation: compatibility builtins, pasteurize / futurize, and single-source Python 2 / 3 workflow

C-010-040

支持

版本固定文档与元数据支撑命令、双版本承诺和 pasteurize 分离;不能把当前 Quick-start 全部内容归入 0.11,也不能把工具写成自动解决文本 / 字节语义。

定位:Python-Future v0.11 quickstart: pip install future and Python 2/3 single-source promise; v0.11 whatsnew: pasteurize separated from futurize --from3; PyPI 0.11.0 upload metadata dated 2014-01-28

C-010-067

背景

这是从应用迁移过渡到包维护者责任的叙事连接,不把下游数量写成可核验规模。

定位:Python-Future single-source promise and Django's dependency / user-application migration layers

C-010-042

支持

同期邮件支撑三层迁移对象及维护者对分支策略的观点;讨论不等于迁移完成,也不能代表全体成员形成完全一致意见。

定位:Django Developers Python 3 and you email body: Django, third-party dependencies, and user projects; rejected Python 3-only and separate dual-release branches; combined support discussion

C-010-079

支持

Django 材料支撑维护边界和测试不足;这里不虚构具体下游应用或迁移结果。

定位:Django 2011 dependency / user-application layers and 2012 experimental support announcement with insufficient real-world testing

C-010-043

支持

同期项目公告支撑 six、共同源码、API 重命名与真实使用测试不足;不能写成所有 Django 应用已兼容,也不能外推所有框架。

定位:Django Experimental Python 3 support: six, Python 3 code made compatible with Python 2, string / unicode API renames, and insufficient real-world testing

C-010-080

支持

Jinja2 的版本交集和维护体验来自维护者复盘,只代表该项目,不外推整个包生态。

定位:Jinja2 porting retrospective: narrowed Python support intersection, python-modernize, single-source testing, and compatibility maintenance cost

C-010-041

支持

Jinja2 维护者复盘支撑安装时转换的迭代成本与统一源码路径;只代表 Jinja2,具体耗时、心理感受和工具选择不能外推整个生态。

定位:Porting to Python 3 Redux: installation-time 2to3 iteration cost, fear of breaking generated Python 3 support, python-modernize, single-source code, tox, and Python 2.6 / 2.7 / 3.3 testing

C-010-081

支持

NumPy 材料支撑版本边界和旧版可安装状态;不推出整个科学计算生态同步退出。

定位:NumPy NEP 14: Python 3-only feature releases from 2019, last Python 2-compatible line remaining installable, and finite maintenance boundary

C-010-044

支持

NumPy 政策支撑 feature release 退出、旧版仍可安装及维护资源观点;不能写成科学计算生态同日完成迁移,也不能说旧 Python 2 版本消失。

定位:NEP 14 Abstract, Detailed description, and Implementation: 2019 Python 3-only feature releases, continued PyPI availability of old Python 2-compatible versions, and limited maintenance resources

C-010-068

背景

这是从包维护转入产品与多项目系统的叙事连接;两个案例保持各自边界。

定位:Dropbox migration retrospective and OpenStack Python 3 sprint dependency list

C-010-082

支持

Dropbox 复盘支撑工程任务的拆解;不能把这些工具说成自动完成语义迁移。

定位:Dropbox incremental migration retrospective: dependency upgrades or forks, CI tests, Mypy blacklist reduction, skipped tests, and serialization failures

C-010-045

支持
supports

参与者后见复盘支撑失败试验和正式资源的时间关系;不能把 2015 写成完整多年计划,也不能声称已经伤害真实用户。

定位:Dropbox incremental migration retrospective: 2015 Hack Week result, damaged functionality, discarded work, and 2017 allocation of migration resources

C-010-083

支持

两份 Dropbox 复盘支撑回退契约和产品完成边界;不能外推为所有企业的通用迁移方法。

定位:Dropbox Hydra dual-interpreter selection before import, remote rollout gate, rollback, seven-month rollout, and desktop client version 52 removal

C-010-046

支持
supports

工程复盘支撑依赖、测试、类型检查和逐文件例外;不能把 Mypy 或测试写成自动完成迁移。

定位:Dropbox incremental migration retrospective: dependency upgrades or forks, Python 3 tests, Mypy, and file-by-file exceptions

C-010-047

支持
supports

具体错误来自 Dropbox 的桌面客户端复盘;不能外推成所有项目最常见的错误。

定位:Dropbox incremental migration retrospective: str(bytes) and serialization / text-byte failures

C-010-048

支持
supports

两份 Dropbox 复盘支撑产品级双解释器和灰度回退;不能把 Hydra 写成通用迁移工具,也不能外推到 Dropbox 全部系统。

定位:Dropbox rollout retrospective: Hydra dual interpreters, pre-import interpreter selection, remote gate and rollback

C-010-049

支持
supports

完成时间和范围均归属于 Dropbox 桌面客户端参与者复盘;不能外推为所有企业或 Dropbox 全部系统的完成日期。

定位:Dropbox rollout retrospective: seven-month rollout and desktop client version 52 removal of Python 2

C-010-084

支持

OpenStack 材料支撑依赖顺序与治理动作;不能写成所有项目或分支同日完成。

定位:OpenStack dependency blockers, coordinated timeline, Stein python3-first criteria, Ussuri staged removal, and stable-branch exceptions

C-010-050

支持
TRANSCRIPT CLAIM

OpenStack 不能只复制 Dropbox 的办法。 二零一四年的 Python 3 sprint 页面已经把问题列成依赖图:自有组件之外,还有 MySQL-python、boto、Eventlet 等外部依赖。一个服务可以先改完,不代表它依赖的库、测试工具、发行版和稳定分支都已经准备好。 二零一八年,Technical Committee 把退出时间变成共同协议:各项目不能各自选择日期,否则下游发行版和独立部署者可能需要同时打包两套依赖。Stein 先把 python3-first 写进文档、lint、构建、发布和测试,再到 Ussuri 按服务、公共库 / 测试工具、requirements 分三阶段移除 Python 2。 最后的复盘仍保留边界:Swift、Storlets 和 Tempest 的稳定分支并不会因为主线切换就同时变得无影响。对 OpenStack 来说,“完成”是依赖顺序、CI、治理和例外共同组成的过程,不是一个仓库在某天改完 shebang。 OpenStack 的难处在于,它不能把回退开关只放在一个产品入口。一个服务的 requirements 可能由公共库提供,一个公共库又可能被多个服务和发行版打包;稳定分支还必须继续服务已经部署的用户。于是“先迁移谁”不是技术团队内部的偏好,而是治理层必须公开协调的顺序。 Stein 的 python3-first 把这种顺序写进了日常检查:文档、lint、构建、发布和测试都先以 Python 3 为默认。到 Ussuri,退出又被拆成服务、公共库和测试工具、requirements 三个阶段。每一阶段都减少一类旧依赖,同时留下对稳定分支和特殊组件的解释空间。

supports

五份材料支撑多项目依赖、共同退出协议、完成口径和例外;不能写成每个仓库同日完成,也不能外推所有开源项目群。

定位:OpenStack 2014 sprint dependency list; 2018 coordinated deprecation timeline; Stein python3-first criteria; Ussuri three-phase removal; 2020 upgrade-impact exceptions

C-010-094

支持

延期的多方时间边界是编辑性解释;资料不证明具体项目因此拖延。

定位:Python 2.7 EOL extension rationale and 2014 maintenance discussion

C-010-085

支持

资料支撑延期的政策边界和不确定因果;不能把相关性写成具体项目的已证实拖延。

定位:PEP 373 EOL extension, 2014 python-dev discussion, and PSF migration retrospective

C-010-051

支持

PEP 固定政策日期与目的;不能推出延期导致任何具体项目拖延。

定位:PEP 373 post-history: Python 2.7 end-of-life moved from 2015 to 2020 and rationale around users and vendors unable to migrate

C-010-052

支持

一封同期邮件与一篇后见新闻稿分别支撑当时责任边界的不确定性和后见政策解释;不能证明延期没有降低压力,也不能证明必然有益或有害。

定位:2014 python-dev discussion on the meaning of Python 2.7 maintenance; PSF 2019 retrospective on migration, vendors and Unicode time

C-010-095

支持

分别支撑共同源码与安全回移的具体目的;不扩大为所有功能都应 backport。

定位:PEP 414 Unicode literal compatibility and PEP 466 security backport rationale

C-010-086

支持

分别解释语法、网络安全和库层妥协;不能把任何一个 backport 扩大为全部 Python 3 能力的回移。

定位:PEP 414 u-string compatibility, PEP 466 security backports, and Python-Future compatibility layers

C-010-053

支持

PEP 414 支撑共同源码交集扩大;不能写成恢复 Python 2 的文本模型。

定位:PEP 414 rationale and specification: restoration of the u prefix in Python 3.3 for Unicode-aware Python 2 code

C-010-054

支持

PEP 466 支撑安全能力回移与替代方案被否决;不能把它扩大为所有 Python 3 功能都应回移。

定位:PEP 466 rationale and resolution: network security backports to Python 2.7.9 and rejection of migration advice as the only response

C-010-087

支持

供应商材料支撑产品边界差异;不支撑用户规模、供应商动机或后续终止日期。

定位:AWS Lambda Python 2.7 runtime / SDK support boundary and Maya 2022.2 platform-specific Python 2 / 3 matrix

C-010-055

支持

两个供应商材料只支撑限定产品的延后支持和双运行时边界;不能推出 2020 后 Python 2 仍是通用主流,也不能推断供应商动机或规模。

定位:AWS Lambda continued Python 2.7 runtime and SDK support announcement; Maya 2022.2 Python 2 / 3 runtime platform matrix

C-010-096

支持

这里区分指标与用户处境;不能从下载量或 classifier 推出态度或统一采用率。

定位:PyPI request logs, package classifiers and release activity: supply / consumption distinction

C-010-088

支持

三种指标支撑供给与消费不能合并;不能推出统一采用率或单一拐点。

定位:PyPI request analysis, package classifier / activity analysis, and package-release activity analysis

C-010-056

支持

两份分析支撑消费端与活跃库供给的不同信号;不能合并为统一采用率,也不能把 Python 3.5 写成唯一拐点。

定位:2015 PyPI request-log analysis and Brett Cannon classifier / activity analysis

C-010-057

支持

这是趋势分析和预测,不是全生态已经完成的事实。

定位:2016 package-release activity analysis and its forecast of Python 3 support overtaking Python 2

C-010-089

支持

四份材料支撑不同生态层级的退出动作;不能说所有用户或发行版在同一天完成迁移。

定位:Django 2.0, NumPy NEP 14, Fedora 32 Python 2 removal, and pip 21.0 Python 2 support removal

C-010-058

支持

三个项目材料支撑不同下游的公开退出动作;不能推出所有用户随项目日期同步迁移。

定位:Python 3 Statement common deadline; Django 2.0 Python compatibility; NumPy NEP 14 Python 3-only feature releases

C-010-059

支持

发行版和工具链的退出时间各自独立;不能写成所有发行版同步,也不能说 Python 2 从此无法运行或安装任何包。

定位:Fedora 32 Retire Python 2 change and pip 21.0 release notes

C-010-060

支持

固定上游 EOL 与最后版本两个时间点;不能把 2020 某一天写成所有生产系统完成迁移。

定位:Python.org sunset FAQ and Python 2.7.18 final release announcement

C-010-061

支持

Ruby 官方发布文档支撑预警与执行顺序;不能写成 Ruby 3 与 Python 3 同等规模,也不能写成 Ruby 直接借鉴 Python。

定位:Ruby 2.7 release: keyword argument deprecation and Ruby 3 warning; Ruby 3.0 release: keyword separation, Ractor and removed $SAFE

C-010-091

支持

Go 文档支撑源代码合同及例外;不能说 Go 没有 breaking change。

定位:Go 1 source-level compatibility promise, point-release scope, standard library growth, and listed exceptions

C-010-062

支持

Go 文档支撑源代码兼容承诺和例外;不能推出 Go 没有任何 breaking change,也不能说该策略由 Python 3 直接导致。

定位:Go 1 compatibility document: source-level promise, standard API growth, point-release expectations and listed exceptions

C-010-092

支持

Python 资料支撑发布节奏策略;不能写成 Python 3 迁移的直接修复或从此没有不兼容变化。

定位:PEP 602 annual feature release cadence, gradual upgrade path, two-release deprecation window, and current version stages

C-010-063

支持

PEP 602 与当前版本指南支撑流程策略和版本阶段;不能把它写成 Python 3 迁移的直接修复,也不能因此断言 Python 不再产生不兼容变化。

定位:PEP 602 abstract, deprecations and rationale: annual feature releases, smaller changes, gradual upgrade path and at least two releases before removal; Developer's Guide version stages

C-010-093

支持

结尾区分公共默认路径与遗留系统;不能把 Python 2 sunset 写成所有生产系统同日迁移。

定位:Python annual feature cadence, current version stages, and official Python 2 sunset boundary

C-010-098

支持

当前结尾以 2026-05-27 快照为口径;页面会更新,不能写成 Python 不再有不兼容变化。

定位:PEP 602 annual feature release and deprecation policy; Python Developer's Guide current feature / bugfix / security / end-of-life stages

C-010-097

支持
TRANSCRIPT CLAIM

现在再回到那一行 print("你好")。 对一个初学者,它仍然可以是开始;对一个要在实验室、公司或特定领域临时解决问题的人,一个 .py 文件仍然可以很快带来结果。但语言的年龄意味着,代码不会只活在作者的电脑里。它会进入库、发行版、构建工具、桌面客户端和有自己生命周期的商业软件。

这也改变了“现在的 Python”应该怎样被描述。对新项目,Python 3 是公共生态的默认路径;对一个还锁在 Python 2 的旧系统,现实问题可能仍然是插件、系统镜像、内部构建和没有替换方案的依赖。前者说明生态已经完成方向切换,后者说明方向切换不等于每个系统都已经支付完迁移成本。

未来的 Python 仍会做不兼容的选择。差别在于,今天更成熟的做法应该让使用者尽早看到变化,让版本边界、弃用期限和例外条件可以被机器与人同时检查。一个 .py 文件要容易开始,一次升级也要有一个普通团队可以开始的第一步。

Python 2 到 Python 3 没有一个瞬间把所有过去搬走。它更像几层门依次关闭:核心团队停止发展旧语义,兼容工具把断裂拆成工作步骤,包维护者划出旧版边界,企业用双解释器和灰度保护用户,发行版与 pip 最后撤走默认兜底。

所以本期的结论不是“核心团队当年做对了,社区后来终于想通了”。更准确的说法是:语言设计者把长期收益和近期成本分给了不同的人;社区花了十多年发明中间状态;生态最终通过共同期限和停止支持,把 Python 3 变成多数活跃项目的默认路径,而不是所有遗留系统的同时终点。

Python 仍然要面对未来的 breaking change。真正值得继承的经验,也许不是永远不变,而是让每一次变化都有可见的 warning、可复查的边界、足够的中间版本,以及一条普通使用者能够开始的迁移路径。

supports

结尾是基于已登记事实的综合判断;不把 Python 2 sunset 写成所有生产系统同日迁移,也不承诺未来没有 breaking change。

定位:Python 2 sunset boundary, annual feature release policy, and current version lifecycle stages

C-010-100

背景

本段是固定官网入口与告别,不承诺当前尚未通过公开门禁的材料已经发布。

定位:Standard Chinese outro website module and episode publication-materials boundary

全部来源

44 SOURCES

明写会破坏向后兼容,记录 Py3k warnings、backport、`2to3` 与两套发布产物的推荐迁移模型;其对 2.x 后续寿命的预期不是实际结果

Guido van Rossum / 2006-04-05 / sanitized-full

固定 1.0.0 的源码组织、文档、可移植性与 Mac port 说明;可用于从“个人脚本”转向可分发语言的早期阶段,不证明当时普及程度

Guido van Rossum / 日期未知 / sanitized-full

用 `/` 的语义变化展示 Python 2.2 起如何以 `//`、`__future__` 和警告铺设长迁移路径;不能代表全部 Python 3 变化都采取同样策略

Moshe Zadka、Guido van Rossum / 2001-03-11 / sanitized-full

固定 Python 3 计划中大量删除、重命名与模型变更;是清单,不单独证明每项改动的必要性

Brett Cannon / 2004-08-20 / sanitized-full

清楚解释 `str` 同时表示文本与字节的问题,并承认团队原以为社区会更快跟上、不会再如此突然地做同规模不兼容变化;不能代表每位核心开发者

Brett Cannon / 2015-12-16 / sanitized-full

固定 print、迭代器、整数与文本 / 字节等用户可见变化;当前文档快照含后续勘误,引用历史措辞需与版本固定源码再交叉

Python 文档 / 日期未知 / sanitized-full

固定 Python 2.6 于 2008-10-01 发布、Python 3.0 于 2008-12-03 发布;不证明采用情况

Barry Warsaw / 日期未知 / sanitized-full

固定 2.7 于 2010-07-03 发布、2014 年将 EOL 从 2015 延至 2020;页面给出的动机是缓解不能迁移用户与供应商的担忧,不证明延期造成拖延

Benjamin Peterson / 日期未知 / sanitized-full

固定“不发布 Python 2.8”和官方升级路径只能到 Python 3;对迁移容易程度的判断需与实际案例交叉

Barry Warsaw / 2011-11-09 / sanitized-full

固定核心团队选择 `six`、采用 Python 3 代码兼容 Python 2、重命名 string / unicode API,并承认真实使用测试仍不足;只代表 Django,不等于所有包维护者都采用相同策略

Django / 2012-08-19 / sanitized-full

固定 2019 起新 feature release 只支持 Python 3、旧 Python 2 版本仍可从 PyPI 安装,并把双版本支持称为有限资源负担;不等于科学计算生态同时完成迁移

NumPy / 日期未知 / sanitized-full

记录 2015 首次尝试大量功能损坏、2017 正式配置资源、依赖 fork、测试 / Mypy、文本字节错误与混合源码;只证明桌面客户端路径

Cary Yang / 2019-02-06 / sanitized-full

记录 2015 起迁移、过时工具链压力、百万行 / 数亿安装规模、双解释器、七个月灰度和版本 52 移除 Python 2;规模为 Dropbox 自报,不能外推所有应用

Max Bélanger、Damien DeVille / 2018-09-25 / sanitized-full

证明 Python 3.3 恢复 `u""`,目标是减少 Unicode-aware Python 2 应用迁移改动并扩大双版本源码交集;不等于恢复 Python 2 文本模型

Armin Ronacher、Alyssa Coghlan / 2012-02-15 / sanitized-full

将 Python 3.4 的网络安全能力回移到 2.7.9,并明确否决“只建议迁移”的替代方案;证明当时迁移障碍影响公共安全,不证明所有功能都应 backport

Alyssa Coghlan / 2014-03-23 / sanitized-full

固定 Maya 默认 Python 3,但 Windows / Linux 仍可用 Python 2 模式,macOS 只保留 Python 3;只证明该商业工具和版本

Autodesk / 日期未知 / sanitized-full

按 trove classifier、发布活跃度与下载门槛显示活跃 / 热门项目的 Python 3 供给明显领先总下载采用;classifier 缺失和下载偏差使百分比只能按作者口径引用

Brett Cannon / 2015-06-12 / sanitized-full

固定 Django 2.0 只支持 Python 3.4-3.7,1.11 是最后支持 2.7 的系列;不能单独证明所有 Django 用户随即迁移

Django 2.0 release notes / 2017-12-02 / sanitized-full

证明 Fedora 移除 `python2` 及依赖包、例外需覆盖整条依赖链并提交迁移计划;只代表 Fedora 仓库,不代表所有 Linux 发行版

Fedora 32 `Retire Python 2` change / 日期未知 / sanitized-full

固定 pip 21.0 停止支持 Python 2,展示工具退出晚于解释器 EOL;旧 pip 仍可运行,不能写成 Python 2 从此无法安装任何包

pip 21.0 release notes / 2021-01-23 / sanitized-full

固定 Ruby 2.7 先对 keyword argument 等行为发出弃用警告,并明确 Ruby 3 将移除自动转换;可作为“先警告再断裂”的策略例子

Ruby / 2019-12-25 / sanitized-full

固定 Ruby 3 的目标、实验性 Ractor、keyword 参数分离与 `$SAFE` 移除;不能把 Ruby 3 写成 Python 3 的直接借鉴或同等规模断裂

Ruby / 2020-12-25 / sanitized-full

固定 Go 1 对语言规范和标准库 API 作源代码兼容承诺,同时列出极少数必要例外;用于对照“从起点建立兼容预算”,不证明 Go 没有任何 breaking change

Go team / 2012-03-28 / sanitized-full

记录 Python 采用年度 feature release 的动机,包括更小的单次变化与更可预测的升级节奏;不能把它写成 Python 3 断裂的直接修复

Łukasz Langa / 2019-09-06 / sanitized-full