# 为什么 Discourse 没有用 Rust 重写？

**URL:** https://meta.discourse.org/t/why-hasnt-discourse-been-rewritten-in-rust/316333
**Category:** Development
**Created:** [2024年七月15日 14:21 UTC](https://meta.discourse.org/t/why-hasnt-discourse-been-rewritten-in-rust/316333 "2024-07-15T14:21:14Z")
**Posts on this page:** 1
**Showing post:** 14

<div class="post-metadata">

### Author: ![LWinterberg](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lwinterberg/32/361644_2.png) [@LWinterberg](https://meta.discourse.org/u/LWinterberg)
#### Post date: [2024年七月17日 09:54 UTC](https://meta.discourse.org/t/why-hasnt-discourse-been-rewritten-in-rust/316333/14 "2024-07-17T09:54:47Z")

</div>

> [@tsk](#):
>
> 内存安全对平台会有很大好处吗？

Discourse _是_内存安全的。Ruby 是一种内存安全语言；所有垃圾回收语言都是如此。在这方面与 Rust 的主要区别在于安全检查的执行时间；Rust 在编译时执行，Ruby 在运行时执行。

> [@tsk](#):
>
> 我还认为，通过 Rust 可以减少永无止境的 Discourse 错误。

Rust 只解决少数几类错误，主要是 C++ 缺乏垃圾回收所导致的错误。当然，他们找到了在保持指针_理论上_可能实现的性能优势的同时做到这一点的方法，这很_酷_，但这绝不能防止您作为用户会看到的那些错误。例如，如果我使用 `<` 而不是 `<=`，并因此导致了差一错误，Rust 也救不了我。如果我忘记在操作完成后生成一个成功消息，Rust 也救不了我。

真正能防止错误的是 Discourse _已经_部署的测试驱动开发。很少有项目可以直接从 master 部署并期望它们是稳定的，但 Discourse 就是其中之一。

> [@tsk](#):
>
> 作为一个现代平台，Discourse 能在不重写成 Rust 的情况下生存下来吗？

“现代平台”如雨后春笋般涌现，前后端都使用 JavaScript。Ruby 在流行度上仅落后 Rust 两位（Kotlin 居于两者之间），所以它目前并不是一种罕见的语言。当然，10 年后情况可能会有所不同，但即使重写成 Rust，10 年后也会变成技术债务。

> [@tsk](#):
>
> 只要付出一些血汗和眼泪，12-16 天就能完成。

很难传达这句话有多么天真，这就是为什么每个人都在嘲笑这个想法。我见过我的开发人员花了 3 年时间重构代码，他们才刚刚准备好从 wxWidgets/ShuttleGUI 移植到 Qt/QML——就背景而言，这是从 C++ 到 C++ 的迁移，只是使用了不同的 UI 工具包。在确保行为完全相同的同时转换代码是_非常困难_的。12-16 天可能只是在任何人开始之前所需的规划时间。

---

_[View the full topic](https://meta.discourse.org/t/why-hasnt-discourse-been-rewritten-in-rust/316333)._
