前段时间在看 Rust 时总容易把生命周期和泛型搞混,生命周期像泛型一样传入函数,但它们又是不同的东西,泛型 T 可以是 struct,struct 可以是字符串,可以是基础的 int 类型,float 类型等等,但生命周期却不是,它不属于 T ……好吧,我有点混了,然后我去问了一个问题: https://rust-lang-cn.org/article/339
但最近看回来,还是无法理解高阶类型是什么,去搜,找到了 scala 的相关文章……
(int, float, double ...) 属于 type 属于 kind (暂且叫它 kind 吧),那么 kind 属于什么? kind 就是 kind 的 kind ?这突然让我想起 Python 的 type 的类型是 type,一下子就更繁杂了。
求懂得家伙能够真正通俗易懂的语言解释一番! Thanks !
1
secondwtq 2018-01-30 23:44:13 +08:00 1
不要钻牛角尖,另外 Python 不适合在这举栗子
大多数人比较熟悉的语言中,典型的 higher kinded type 表现是 C++ 的 template template parameter,虽然我很怀疑有多少人知道这个东西,如果楼主接触过 C++ 的 template 的话可以去看一下,比 Scala 的要友好一点 Rust 的 lifetime 我的理解他就是和所谓的类型分离的(但是又运用了很多为类型设计的静态分析的东西),只是语法上借了类型的地方而已,这里有几个 implementation note: https://github.com/rust-lang/rust/tree/master/src/librustc/infer https://github.com/rust-lang/rust/tree/master/src/librustc/infer/lexical_region_resolve https://github.com/rust-lang/rust/tree/master/src/librustc/infer/region_constraints 我不觉得这个和 higher kinded type 有什么鸟关系,另外这个东西我记得有人说借鉴了 Region-Based Memory Management,这个我还没看,楼主真要钻的话可以去看 ATTAPL 还有相关的 paper |
2
muziki 2018-01-31 00:00:24 +08:00 via iPhone 1
Rust 里面现在还没有 HKT,你给的论坛回帖用词也太随意了。
在 runtime 中 lifetime 是 reference 的类型的一部分并且没有 runtime representation。 btw … rust 这种核心团队很友好且活跃的情况下为什么不直接去社区问呢,中文社区水平 xxx |
3
Philippa OP 谢谢两位,那我暂时理解“生命周期”为一种糅合了“类型设计”风格的东西好了,且脱离常规的类型系统,并接受 Rust 中泛型<>符号的“二义性”。找个时间好好看看人家发出的文章才行。
|