Why Discord is switching from Go to Rust

eGust
十年 02月05日 字数 770

语言坑:Why Discord is switching from Go to Rust

https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f

太长不转了

tldr

由于一个很大的 LRU cache,golang 每两分钟 gc 导致延迟。用 rust + async 做了很基本的优化的版本,就全方位超过了仔细手动调整过的 go 版本

hacker news 和 reddit 上面已经战开了

https://news.ycombinator.com/item?id=22238335

https://www.reddit.com/r/programming/comments/eyuebc/why_discord_is_switching_from_go_to_rust/

https://www.reddit.com/r/rust/comments/eytyug/why_discord_is_switching_from_go_to_rust/

反方主要观点有:

1. 为啥用1.9这么老的版本,明明这几年 gc 有巨大进步;rust 你们敢用 nightly 版

2. jvm 这边的主流解决方案是 off-heap cache,go 这边你们是不是也应该这么搞

3. 你们 go 里面用的是 hash map,到了 rust 里用了 b-tree map,不公平

Programming 编程技术
1 个Like
11 个回复
eGust
十年 02月05日

关于 golang 版本,原文下面有评论,1.12有巨大的改进,自己项目的 gc 延迟问题到了这个版本不用改了

搜了一下 go 1.12 是去年3月底出的,discord 文章作者说 rust 项目是5月完成的……

【 在 eGust (十年) 的大作中提到: 】

: 语言坑:Why Discord is switching from Go to Rust

: https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f

: 太长不转了

: ...................

adoal
阿豆 02月05日

今年准备把手头最后一个CentOS 5下线的人表示,

看到Go 1.9这个版本号瑟瑟发抖^o^

【 在 eGust (十年) 的大作中提到: 】

: 语言坑:Why Discord is switching from Go to Rust

: https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f

: 太长不转了

: ...................

ArchLinux
a lightweight and flexible distribution 02月05日

Go 和 Rust 都是发展得很快的语言,不像 C++ 三年才出一个版本,而且使用者大多数都是用之前的 1~2 个版本。

我们可以看看 Rust 2018 能不能稳定下来。

【 在 adoal (阿豆) 的大作中提到: 】

: 今年准备把手头最后一个CentOS 5下线的人表示,

: 看到Go 1.9这个版本号瑟瑟发抖^o^

dhcn
朝晖 02月05日

稳定啥呀,已经有人吼2021 version了

【 在 ArchLinux 的大作中提到: 】

: Go 和 Rust 都是发展得很快的语言,不像 C++ 三年才出一个版本,而且使用者大多数都是用之前的 1~2 个版本。

: 我们可以看看 Rust 2018 能不能稳定下来。

dhcn
朝晖 02月05日
fanci
大葡萄 02月06日

Discord是啥

【 在 eGust () 的大作中提到: 】

: 语言坑:Why Discord is switching from Go to Rust

: https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f

: 太长不转了

Dieken
风催草低 - 明月何尝不照人 02月06日

论战里有人用g1.13编译试试么?甚至改写那个lru map。

off-heap就算了,用这个干嘛不用java。

【 在 eGust 的大作中提到: 】

: 语言坑:Why Discord is switching from Go to Rust

: https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f

: 太长不转了

: ...................

gqlu
恋上此生 02月06日

第三点reddit上他们的人提到过,go尝试过btree 但是没效果。

【 在 eGust 的大作中提到: 】

: 语言坑:Why Discord is switching from Go to Rust

: https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f

: 太长不转了

eGust
十年 02月07日

我印象中只说了一开始 rust 里也是 hash map,效果也比 go 强。另外,rust 标准库里自带 b-tree,切换过去几乎没成本,很自然的论战中也捎带着鄙视 go 没泛型的问题

【 在 gqlu (恋上此生) 的大作中提到: 】

: 第三点reddit上他们的人提到过,go尝试过btree 但是没效果。

eGust
十年 02月07日

go 1.12出来的时候,很明显人家的 rust 版本已经基本写完了。discord 的官方解释是,一直在忙,所以也没时间进行后续版本的比较。这解释倒也也挺合理的,不然为啥去年年中就切换了,文章直到最近才出来。

个人理解,这也导致了另外一个非技术方面的问题,既然花了这么长时间用 rust 重写了,总得拿出些成果来给上面的人交差。搞了两年最后发现白搞了,那这件事就办砸了,以后就不太容易做类似的工作了。

所以其实我也挺期待能有后续文章,能跟1.14比较一下

【 在 Dieken (风催草低 - 明月何尝不照人) 的大作中提到: 】

: 论战里有人用g1.13编译试试么?甚至改写那个lru map。

: off-heap就算了,用这个干嘛不用java。

GoGoRoger
GoGoRoger 02月07日

不是有个架构师的笑话吗。架构师blabla说了一堆自己系统的优点,别人问,你们的程序和另一个来源程序比有啥优点。架构师上,我们开始做的时候,来源程序还没出现。。。。

发自「今日水木 on Mi Note 3」

【 在 eGust 的大作中提到: 】

: go 1.12出来的时候,很明显人家的 rust 版本已经基本写完了。discord 的官方解释是,一直在忙,所以也没时间进行后续版本的比较。这解释倒也也挺合理的,不然为啥去年年中就切换了,文章直到最近才出来。

: 个人理解,这也导致了另外一个非技术方面的问题,既然花了这么长时间用 rust 重写了,总得拿出些成果来给上面的人交差。搞了两年最后发现白搞了,那这件事就办砸了,以后就不太容易做类似的工作了。

: 所以其实我也挺期待能有后续文章,能跟1.14比较一下

: --

Dieken
风催草低 - 明月何尝不照人 02月07日

同意,KPI,吸眼球,仅此。

再忙,用 go 重新编译下,分流测试下,多大点屁事,改下map到btree,多大点屁事。他们那应用场景怎么可能go顶不住。

非go粉都看不下去了。

【 在 eGust 的大作中提到: 】

: go 1.12出来的时候,很明显人家的 rust 版本已经基本写完了。discord 的官方解释是,一直在忙,所以也没时间进行后续版本的比较。这解释倒也也挺合理的,不然为啥去年年中就切换了,文章直到最近才出来。

: 个人理解,这也导致了另外一个非技术方面的问题,既然花了这么长时间用 rust 重写了,总得拿出些成果来给上面的人交差。搞了两年最后发现白搞了,那这件事就办砸了,以后就不太容易做类似的工作了。

: 所以其实我也挺期待能有后续文章,能跟1.14比较一下

: ...................