V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Philippa
V2EX  ›  问与答

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

  •  
  •   Philippa · 2018-01-30 21:51:02 +08:00 · 2028 次点击
    这是一个创建于 2480 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    3 条回复    2018-01-31 00:31:24 +08:00
    secondwtq
        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
    muziki
        2
    muziki  
       2018-01-31 00:00:24 +08:00 via iPhone   ❤️ 1
    Rust 里面现在还没有 HKT,你给的论坛回帖用词也太随意了。

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

    btw … rust 这种核心团队很友好且活跃的情况下为什么不直接去社区问呢,中文社区水平 xxx
    Philippa
        3
    Philippa  
    OP
       2018-01-31 00:31:24 +08:00
    谢谢两位,那我暂时理解“生命周期”为一种糅合了“类型设计”风格的东西好了,且脱离常规的类型系统,并接受 Rust 中泛型<>符号的“二义性”。找个时间好好看看人家发出的文章才行。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1055 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:23 · PVG 06:23 · LAX 14:23 · JFK 17:23
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.