python / python/typing

spec: Definition of materialization is insufficient

未关闭
#2,027 2 条评论 4 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

topic: typing spec
主要语言
Python
星标
1.8k
派生
302
平均合并
23 小时
30 天内合并 PR
8

描述

The spec currently defines materialization as follows:

Given a gradual type A, if we replace zero or more occurrences of Any in A with some type (which can be different for each occurrence of Any), the resulting gradual type B is a materialization of A.

A type A is assignable to B if there exists a pair of materializations A' and B' of A and B such that A' is a subtype of B'.

Now let's consider whether list[int] | list[str] is assignable to list[Any]. To do so, we have to consider materializations of list[Any], created by substituting Any with some other type. But there's nothing we can substitute for Any that would make for a fully static type that is a supertype of list[int] | list[str], since list is invariant in its type parameter. Therefore, list[int] | list[str] is not assignable to list[Any]. Relatedly, this means list[Any] | list[Any] is not equivalent to list[Any]. This is obviously not a desirable conclusion; current type checkers treat list[int] | list[str] as assignable to list[Any], and they should.

I think to fix this, we could say that if A' and A'' are materializations of A, then the union A' | A'' must also be a materialization of A.

贡献指南

这个仓库没有索引到贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

调研方向

从链接的 typing specification 中的 materialization 定义开始,逐步分析 list[int] | list[str] 与 list[Any] 的示例。评估“materializations 的 union 仍然是 materializations”这一提议规则,包括其对 assignability 和 equivalence 的影响;完成的要求是达成一致的 specification 更改并更新解释性文本。

由索引模型根据 Issue 内容生成。

评估

技术栈
python
领域
documentation
Issue 类型
功能
难度
5/5
预计耗时
一周以上
活跃度
冷清
描述清晰度
基本清楚
新手友好度
38/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。