Rust 的生命周期是高阶类型?

2018-01-30 21:51:02 +08:00
 Philippa

前段时间在看 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 !

2029 次点击
所在节点    问与答
3 条回复
secondwtq
2018-01-30 23:44:13 +08:00
不要钻牛角尖,另外 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
muziki
2018-01-31 00:00:24 +08:00
Rust 里面现在还没有 HKT,你给的论坛回帖用词也太随意了。

在 runtime 中 lifetime 是 reference 的类型的一部分并且没有 runtime representation。

btw … rust 这种核心团队很友好且活跃的情况下为什么不直接去社区问呢,中文社区水平 xxx
Philippa
2018-01-31 00:31:24 +08:00
谢谢两位,那我暂时理解“生命周期”为一种糅合了“类型设计”风格的东西好了,且脱离常规的类型系统,并接受 Rust 中泛型<>符号的“二义性”。找个时间好好看看人家发出的文章才行。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/427242

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX