为了构建能够支持未来应用程序的数据库,SurrealDB需要未来的底层编程语言。他们相信这种语言就是Rust,他们从Rust的Future中获得灵感,构建了类sql查询语言SurrealQL。
在SurrealDB主页的正中间,你会看到这三句话:
- 开发更加容易
- 构建更快
- 规模更大
这不仅是SurrealDB可以为应用程序做的事情,也是Rust为SurrealDB做的事情。由于Rust众所周知的陡峭的学习曲线,当你想到使用Rust时,更容易开发和更快构建可能不是你首先想到的事情。
然而,Rust支持你以不同的方式思考。在Rust中从0到1的转换速度可能不如在其他语言中那么快,但它比你想象的要容易。因此,可以使用不同的语言进行原型设计,然后在看到项目的长期潜力后再用Rust重新编写。SurrealDB本身首先使用Go开发原型,然后使用Rust完全重写。
这里的关键是,一旦支付了学习Rust的前期成本,你就可以走得更快,或者像人们常说的那样:从慢到快。
现在,在进一步讨论之前,我们需要解决一个问题,相信许多人都会有一个问题:为什么不使用Zig或其他更新的语言呢?
虽然确实可以使用Zig或其他较新的语言构建数据库,但在默认情况下,当涉及到内存安全时,它们没有Rust的特性,而且没有垃圾收集器以获得最高性能。
不可否认,Rust已经俘获了开发者社区的青睐,在Stack Overflow的年度开发者调查中连续8年被评为“最受尊敬的编程语言”。它不仅仅是令人钦佩,它也是GitHub上增长最快的语言之一。
2019年Linux安全峰会上的一场演讲显示,内存安全问题估计占主流系统(包括Android和Ubuntu)安全漏洞的65-88%。这也符合微软的经验,微软每年分配给CVE的漏洞中有70%仍然是内存安全问题。
这表明,即使经过几十年的开发,一些最优秀的工程师使用C和C++的最佳实践,仍然会出现问题,诸如访问已经释放的内存、数据竞争等。因此,很难说这只是技能问题,而更有可能是所使用语言的根本问题。
有了这个背景,你就明白为什么微软Azure的首席技术官Mark Russinovich说:“说到语言,现在是时候停止使用C/C++开始任何新项目了,在那些需要非gc语言的场景中使用Rust。为了安全性和可靠性,业界应该将这些语言声明为弃用语言。”
这种对Rust的信任并不是凭空而来的,为了使Rust在安全关键型环境中完全可用,已经投入了大量的工作。这可以从Rust最近通过Ferrous Systems开发的 Ferrocene工具链获得ISO 26262和IEC 61508标准的资格认证中看出。
你可能也听说过美国政府正在关注这些发展,比如美国白宫国家网络主任办公室(ONCD)。该办公室上个月(2024年2月)发布了一份报告,建议转向内存安全的编程语言,并指出Rust是可以在安全关键的太空系统中替代C和C++。
虽然数据库不是至关重要的太空系统,但它们通常在组织中扮演着至关重要的角色。你想要保证你的数据安全,因为如果你丢失了你的数据,你就会失去你的业务。
因此,如果主要系统中65-88%的安全漏洞可能是由内存问题引起的,那么理解为什么SurrealDB把赌注押在Rust上以确保数据尽可能安全就不是什么难事了。