V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
noli
V2EX  ›  自言自语

造个新语言

  •  
  •   noli · 2018-05-10 01:48:56 +08:00 · 273 次点击
    这是一个创建于 2394 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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 条回复    2018-05-27 16:54:19 +08:00
    noli
        1
    noli  
    OP
       2018-05-13 18:42:20 +08:00
    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  
       2018-05-27 16:54:19 +08:00
    说语言, 我还在用 JavaScript ...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1006 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:22 · PVG 05:22 · LAX 13:22 · JFK 16:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.