2020年有多少天-09-26:请问rust中的&和c++中的&有哪些区别

一句话概括:macOS/Linux用户首选CLion + Rust插件折騰VSCode收益太低。以下内容来自参与开发、等Rust主流开源图形项目的经历总结

使用Rust开发macOS、iOS、Android等跨平台共享源码的项目,开发环境避免不了这些系统所要求的开发环境即:

  • 修改Rust软件更新源为中科大站点对国内用户而言可以提高下载速度,已翻墙可不考虑

    Rust开发iOS项目的效率工具

    cargo lipo一個命令可编译出iOS目前支持的5个CPU架构静态库,且自动合并成一个多合一的universal静态库

  • 在Rust项目任意位置执行cargo lipo即可开始编译iOS静态库
  • ,顾名思义给JNI接ロ编写Rust绑定让我们在Rust中调用JNI函数,在Java代码中直接加载so即可调用我们公开的API无需再加一层头文件。下面是给一个示例

    
     
     
    
      
}

关于单线程下的内存安全性:

C++ 和 Rust 當然都能写出安全的单线程代码区别在于怎样达到这个目的。Rust 的做法是 borrow checkerC++ 的做法是通过惯用法。

这就有个问题我们说 C++ 可能写出不安全嘚代码并不是说新手会因为不懂惯用法写出不安全的代码,而更多的是说老手也可能会因为疲劳或者怠工写出不安全的代码Niko 去年有个幻燈片用 C++ 的 std::map 举例,两处代码分别引用了 map 上的不同部分最后导致访问错误。

Rust 怎么防止老手写出不安全的代码borrow checker。这个是 Rust 的核心其他内容都偠为这一点服务。

那你可能会说对新手那部分,新人完全可以写坏了搅黄项目啊很高兴你这么说,这里也涉及到 Rust 的一个优点就是它的模块化Rust 有良好的模块系统。你设计好模块之间的接口那新手也只能访问公共接口,想访问非公开的内容没门。把库之间的可见性从鏈接阶段移到语言中去这也是显而易见的优点。

补充一下多线程下的内存安全:

C++ 还是那个老问题:惯用法析构函数、拷贝构造函数。寫对了没有单线程下是对的,也许多线程就错了要知道你可能从前写好了基础库,没有完整测试它在高并发下的表现继续用可能就絀错了(数据错误、内存访问错误)。Rust 呢Rust 有一套基础设施(borrow checker), 从语义上检查了跨线程共享

可能你会说,你丫这不是扯淡么说了半忝不就是说 C++ 可能写错,要比当然比对的代码其实这就是差异所在:

  • 对 Rust 来说,编译器保证指出你的错误
  • 对 C++ 来说,编译器没有这种保证咜也无法保证。

当然以上都是在说 Rust 中没有 unsafe 块的情况。

  • Rust 和 C++ 都可以选择安全或不安全
  • 对 Rust 来说,安全和不安全的边界(unsafe 块)是清晰的想保證安全只需退到安全线以后,
  • 对 C++ 来说如果你想选择安全,你无法保证已经安全了

多线程下除了内存安全,当然还有竞争、死锁这样的問题这方面我就不胡说了。

其他的安全比如权限控制、隐私、保密、身份鉴别其实也是安全问题,不过这些 Rust 和 C++ 相比没有什么优势也沒什么劣势(主要都是链接到 C 函数的问题,这个 Rust 并没有比 C++ 差)

}

我要回帖

更多关于 回顾2019展望2020 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信