Rust 遇上 C/C++ (一):数组操作
Rust 第一个稳定版本于 2015 年发布,与上世纪 80 年代左右诞生的 C/C++ 相比,可谓是后起之秀。
同样作为系统级编程语言,Rust 的设计准则为安全、速度和并发。当然,C/C++ 可能对此表示不服!
那么当 Rust 遇上 C/C++ 会在哪些方面进行讨论呢?我们先从数组操作谈起。
环境:Cent OS 8(Kernel 4.18.0),gcc 8.3.1,g++ 8.3.1,rustc 1.43.1。
C
编译没有产生任何错误,程序正常运行,“成功”访问了无效的内存 a[10]。
C++
同样,编译没有产生任何错误,程序正常运行并访问了无效的内存 a[10]。
Rust
编译没有产生任何错误,但程序导致运行时错误并没有成功退出。
当我们尝试使用索引访问一个元素时,Rust 将检查您指定的索引是否小于数组长度。如果索引大于或等于数组长度,Rust 将陷入 Panic。
总结
当提供不正确的索引时,C/C++ 可以访问无效的内存。
Rust通过立即退出而不是允许内存访问,从而避免这种错误。大家是否觉得这样更安全呢?
Rust 由于提供了额外安全保证,可能会降低一些性能。
哪有什么岁月静好,都是有人替你负重前行!
当然,如果 C/C++ 的使用者足够细心,自己能提供安全保证的话,是同样可以避免错误的。
版权声明: 本文为 InfoQ 作者【Coding Fatty】的原创文章。
原文链接:【http://xie.infoq.cn/article/efa3b06625f516068c4d75f2d】。文章转载请联系作者。
评论 (6 条评论)