V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
noli

造个新语言

  •  
  •   noli · May 10, 2018 · 495 views
    This topic created in 2910 days ago, the information mentioned may be changed or developed.
    Features:

    C++: RAII, move semantics, partial specialization

    Rust: enum type, trait, lifetime, borrow checker

    C#: Expression Tree (compiler support), linq, async/await,

    Haskell: currying

    Not OO; JIT and AOT; mandatory garbage collection (mainly deal with recycle reference).
    2 replies    2018-05-27 16:54:19 +08:00
    noli
        1
    noli  
    OP
       May 13, 2018
    Rust 语言 在支持 fcontext 式的 coroutine 上遇到了问题,因为目前在 rust 的 stdlib 中使用了 TLS( thread local storage) 来存储一些用于支持 catch_unwind 的变量。

    Rust 这种在 stdlib 级别使用 TLS 的实践方式,为实现支持 M:N 模式的 coroutine 的开发者带来了极大的阻碍。
    M:N 线程和协程模型意味着 一个协程可能会被不同的线程调度运行。
    但当 协程中产生崩溃的时候,如果产生崩溃前在线程 A 运行, 产生崩溃时在线程 B 运行,那么 rust 的 catch_unwind 就会出错(因为跨越了 线程 导致 catch_unwind 所使用的 TLS 数据无效 )。

    C++ 使用 fcontext 没有这样的问题,因为 C++ 的 catch 和 throw 不使用 TLS 而是依赖于 编译器生成的 调用栈帧记录。

    不得不说,RUST 虽然社区很开放很有活力,不过确实有几个技术决策相当缺乏远见或者暴露了技术视野狭隘的问题。这种问题不是靠人多就能避免或解决的,使用的人越多兼容性负担越大。

    如果 rust 不打算破坏其 stdlib 的兼容性,rust 将来要无缝完美支持  coroutine 或者 async/await 的话,就只剩下编译器生成 状态机的一条路可走了。Zero Cost Abstraction 听着很美好,但 rust team 的人做不到呢,真可惜。
    iugo
        2
    iugo  
       May 27, 2018
    说语言, 我还在用 JavaScript ...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   4964 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 40ms · UTC 09:50 · PVG 17:50 · LAX 02:50 · JFK 05:50
    ♥ Do have faith in what you're doing.