V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  Austaras  ›  全部回复第 3 页 / 共 10 页
回复总数  195
1  2  3  4  5  6  7  8  9  10  
2021-08-12 11:54:04 +08:00
回复了 huangmingyou 创建的主题 Linux 两次从 Linux 逃离到 os x 又逃回来的感受
@pisc Linux 上的各家 DE 对分数缩放的支持都很差
2021-07-28 21:01:23 +08:00
回复了 Smash 创建的主题 程序员 写过过 Angular 和 Vue 后,才发现 React router dom 真的不行.
别听楼上讲代数效应的瞎吹,都是扯淡的

react-router 的问题不是在于维护者跑路了吗? beta 都 beta 一年了还一大堆 bug,准备什么时候 release 啊?
@wutiantong pattern match 的优越性是老生常谈了,各路 fp 语言都分别论证过一遍的东西,随手举几个例子
···
fn foobar(n: u8) -> String {
(match (n % 3, n% 5) {
(0, 0) => "foobar",
(0, _) => "foo",
(_, 0) => "bar",
(_, _) => ""
}).into()
}

struct List<T> {
value: T,
next: Option<Box<T>>
}

fn len<T>(list: List<T>) -> usize {
1 + match list {
List { value: Some(list), ...} -> len(list) ,
List { value: None, ...} -> 0
}
}
···
复杂的例子里最好的例子大概是 ast,比如
···
let persistent_id = match &mut item {
// function Foo() {}
ModuleItem::Stmt(Stmt::Decl(Decl::Fn(FnDecl { ident, .. }))) => {
if let Some(hook) = handle_map.remove(&ident) {
hook_reg.push((ident.clone(), hook));
}
get_persistent_id(ident)
}

// export function Foo() {}
ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl {
decl: Decl::Fn(FnDecl { ident, .. }),
..
})) => {
if let Some(hook) = handle_map.remove(&ident) {
hook_reg.push((ident.clone(), hook));
}
get_persistent_id(ident)
}

// export default function Foo() {}
ModuleItem::ModuleDecl(ModuleDecl::ExportDefaultDecl(ExportDefaultDecl {
decl:
DefaultDecl::Fn(FnExpr {
// We don't currently handle anonymous default exports.
ident: Some(ident),
..
}),
..
})) => {
if let Some(hook) = handle_map.remove(&ident) {
hook_reg.push((ident.clone(), hook));
};
get_persistent_id(ident)
}

// const Foo = () => {}
// export const Foo = () => {}
ModuleItem::Stmt(Stmt::Decl(Decl::Var(var_decl)))
| ModuleItem::ModuleDecl(ModuleDecl::ExportDecl(ExportDecl {
decl: Decl::Var(var_decl),
..
})) => {
···
至于生命周期的例子,不好意思,cpp 只要愿意永远可以怼裸指针,而且 rust 里需要手动标记的地方也是越来越少,所以很难搞出一个具体的例子,不过你可以看看 rust 里的 COW 是怎么做的
@wangxn 超越的地方就是不需要线程共享的时候可以不用这个改用 Rc 啊,而且 rust 能保证 Rc 被共享的时候会编译出错
@wangxn 是可以,有两个 auto trait send 和 sync,快来学吧 233
@wangxn 那你要怎么知道这个东西不会被多线程共享呢?不好意思 cpp 没有这样的能力,只好全部上 Arc
哦,std variant 果然也没有 niche 优化,这可真 zero cost
2021-07-19 14:55:13 +08:00
回复了 kebyn 创建的主题 Node.js callback 和 promise 性能差距疑问
@myqoo 你等于在问
```
async function foo() {}

await foo()
```
不是即时执行的,这就是 js 把 async 和 promise 绑定带来的问题,一个 async 函数,无论怎样返回的东西都是一个 promise,所以一定要在下一个 microtask 里执行
@wutiantong  你都封装成智能指针了那哪里的 zero cost 呢?固然 rust 这边可以全部 Arc (不多线程共享的可以用 Rc,这点上成本比 cpp 的 shared_pointer 还要低),但性能损失呢?
@wutiantong  首先 adt 起码对应 std::variant 和 std::tuple,你可以看看 cpp 里的实现是多扭曲,而且 cpp 里也并没有相应的基础设施,随便多嵌套几层就等着爆炸吧

feature 并不是越多越好,恰恰相反,需要仔细斟酌加什么不加什么,衡量收益和代价,而在这点上 cpp 可以说是灾难性的失败
另外要说丑陋,不知道 cpp 到底是怎么有资格鄙视其他语言的。。。
@wutiantong 那 cpp 支持的可以简单地用 raii 解决的问题 rust 里也没让你标记啊。。。一般来说需要手动标记的情况 cpp 都是解决不了的比如各种引用飞来飞去。此外所谓的“语法可能性”是什么奇怪的概念,不要再随地发明了

此外 rust 的泛型和 adt 配合 pattern match 是比 cpp 现有的解决方案优雅地多的做法,可能你这时候又要说这只不过是语法不解决真正问题了
@GeruzoniAnsasu 因为真正的学习成本并不一样啊,一个人读了 trpl 就能写生产用的 rust 代码了,一个人要是只读了 cpp primer 你敢让他写生产用 cpp 吗。。。
@GeruzoniAnsasu 谁告诉你 rust 不是 zero cost abstraction 的。。。借用 rust 团队里一个人吹逼的话,给一段 llvm ir,他可以人肉还原成 cpp 或者 rust

此外生命周期的问题不要以为用了几个智能指针就算解决了
@ipwx mpmc queue 这个应该有的吧,crossbeam 用得非常广泛
@ipwx 能举几个 crates.io 上没有的例子吗?
@ipwx 那感觉你的要求 rust 完全满足啊,快来搞 rust 吧
叫 web 和 api
不叫 frontend 和 backend 的原因:
如果加了安卓 /iOS 或者 SSR 不是傻了
1  2  3  4  5  6  7  8  9  10  
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3184 人在线   最高记录 6543   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 24ms · UTC 10:51 · PVG 18:51 · LAX 03:51 · JFK 06:51
Developed with CodeLauncher
♥ Do have faith in what you're doing.