出品 | OSC开源社区(ID:oschina2013)
近日,Microsoft Azure CTO、Sysinternals 的主要开发者 Mark Russinovich 在其社交账号上发布动态称,开发人员是时候停止使用 C/C++ 来启动新项目,并建议可在需要使用 non-GC 语言的场景中使用 Rust。
“说到语言,现在是时候停止用 C/C++ 启动任何新项目了,并在那些需要使用 non-GC 语言的场景中使用 Rust。为了安全性和可靠性,业界应该宣布弃用这些语言。”
C++ 之父回应
针对 Mark Russinovich 的言论,外媒 The Register采访了 C++ 之父 Bjarne Stroustrup;Stroustrup 则为 C++ 进行了辩护:
“人们 -- 尤其是一些高管 -- 总是会迷恋那些承诺会使他们的生活更轻松的新事物,这是很正常的。而且,支持新事物远比解决旧的和众所周知的工具的已知问题更令人兴奋。不幸的是,新的语言通常需要多年的时间和重大的努力,才能在其广泛的应用领域中与成熟的语言相媲美。发烧友们很少看到这一点,他们的评论往往是相当片面的”。
Stroustrup 表示,考虑到安全性的重要程度,多年来他一直在致力于提高 C++ 的安全性;从而现在在 ISO C++ 中实现了可靠的完美类型和内存安全。也就是说,每个对象都根据它定义的类型来使用;这意味着消除了 dangling pointers 的使用、捕获范围错误并消除了数据争用。
他还强调称,包括 Rust 在内的每一种 “安全” 语言都存在着允许不安全代码的漏洞。并谈到了他参与编写的 C++ Core Guidelines,这份指南的基本思想是定义一套为保证安全而必须遵守的规则,然后通过静态分析来强制执行。而之所以需要这些规则,就是因为任意的 C 或 C++ 代码本身都无法自证安全。
“这就是符合 ISO 标准的 C++ 代码,那些感觉不需要安全保障或者还不能更新代码的人可以直接不运行分析器。目前,微软 Visual Studio、Clang Tidy 等一些其他地方都有这种分析器的部分实现。”
Stroustrup 指出,很显然的是 C++ 正在积极改进中,譬如在实际应用中的灵活性和性能提升的各种尝试。目前已有数十亿行的 C++ 代码被部署,因此无论是想要对 C++ 代码进行替换还是加强安全性,都是一项需要循序渐进的艰巨任务。“否则大量不安全的 C 和旧式 C++ 代码将 ' 永远 ' 存在”。
引发开发者热议
当然,Mark Russinovich 的言论一出,不可避免的引起了广泛地讨论。有人问这是他个人的观点,还是作为 CTO 的一个声明。对于这个问题,外媒 The Register 也向微软进行了询问,即 Russinovich 的建议是否会在微软全公司范围内进行采纳,但并未得到回复。
.NET Foundation 成员 Shawn Wildermuth 则在评论区提出疑问,Rust 是否有足够的开发人员来推动工作的进行?对此则有开发者回复称,“想要舍下 C/C++ 确实非常困难,但这并不重要;年轻的开发者可以很快掌握 Rust,相较试图寻找有才华的 C/C++ 开发者,此举要容易得多”。
还有评论表示:
George Ou:我是 Rust 的忠实粉丝,但对于那些认为有安全版本的 C 和 C++ 的人,你怎么说?
Ted Mielczarek:要么他们在骗你,要么他们建议的东西需要有效地重写你的整个代码库,所以你最好使用 Rust。
而在反对的声音当中,一个 ID 为 ionCube24 的用户称,Mark Russinovich 的意思更像是在责怪语言而不是程序员。但事实是 “C++ 很好,只是很多使用它(和其他语言)的人基本上不知道如何编程;切换语言并不会解决这一问题。”
有人以自身实践举例表明,Rust 存在局限性,并不能解决他所有的问题。然而该网友的论点似乎有点站不住脚:
“它不必解决所有问题才能产生重大影响。”
“为什么要以 ‘解决所有的问题’ 为标准,它是否需要 ' 解决你所有的问题 ' 才能在编程中产生实质性的差异?在我看来,想要 ' 在所有新项目中使用它 ' 这个标准远比让 ' 它能解决所有已知问题 ' 要低得多。”
还有人则颇为 “痛心” 的感叹 Mark Russinovich 变了,不再 “cool” 了。也有相对理智的发声称,“或者更好的方式是:不要再过度的去宣传推广一种编程语言。不同的工具适合不同的问题。Rust 很好,但它不是所有编程问题的解决方案”。
更有甚者提出了自己认为更好的 C/C++ 替代方案,“当 GCed 系统语言可以接受时,也不会再有新的 C/C++ 项目。Go、Nim 和 Crystal 都是比 C/C++ 更好的选择。还有 Zig,它正在做一些很酷的事情,但尚未像 Rust 那样成熟或流行。”
目前,Hacker News 和 Reddit 上也有相关的话题讨论。
不过话说回来, Rust 最近确实有着较高的热度:
Linus Torvalds 透露,没有意外的话 Rust 将在 6.1 版本进入 Linux 内核
Cloudflare 放弃 Nginx,使用内部 Rust 编写的 Pingora
Rust 成立专门的安全团队
Asahi Linux 计划使用 Rust 编写 Apple 芯片的 GPU 驱动程序
GCC Rust 得到 GCC 批准,将被纳入主线代码库
GStreamer 准备将 Rust 编写的插件作为其官方二进制版本的一部分发布(https://www.oschina.net/news/210942/gstreamer-rust-plugins)
相关链接:https://twitter.com/markrussinovich/status/1571995117233504257
https://news.ycombinator.com/item?id=32905885
https://www.reddit.com/r/rust/comments/xitq5o/mark_russinovich_azure_cto_its_time_to_halt/