造个新语言

2018-05-10 01:48:56 +08:00
 noli
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).
283 次点击
所在节点    自言自语
2 条回复
noli
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
2018-05-27 16:54:19 +08:00
说语言, 我还在用 JavaScript ...

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

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

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

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

© 2021 V2EX