rust铁斧头怎么做_Rust 用于客户端跨平台开发的可行性分析

本文探讨了Rust语言在客户端跨平台开发中的可行性,包括其内存安全、性能、库尺寸、FFI、编译与调试等方面。作者通过对比测试发现Rust性能接近C++,并且提供了与C的FFI接口。同时,文章指出Rust的编译时检查和丰富的生态系统为开发带来了便利,但在调试和体积控制方面仍存在挑战。
摘要由CSDN通过智能技术生成

在写这篇文章之前,我已经花了几天看完了《Rust 程序设计语言》这本书,虽然不敢说已经熟悉或者精通 Rust,但对其语法和特性已有一个大概的认知。不过本文毕竟是一篇预研文,有些方面说的并不是很深入,同时有些问题可能需要真正用到生产环境中才会暴露。

注:本人是一个客户端 C++ 程序员,偶尔写 Java/Objc/Dart/Python,了解 Kotlin/Javascript/MATLAB。本文并不想引起编程语言的“圣战”,文中所提到的编程语言都有他们固有的不可取代的优势,因为文章重点原因可能并没有体现出来。

1. 语言

在使用 C/C++ 过程中,内存一直是程序员躲避不掉的坑,哪怕是一个经验再丰富的程序员,也会因为偶尔的开小差写出内存有问题的代码,而这种问题又恰恰是最难以排查的。

既然人都会犯错,那把内存管理交给计算机会怎么样呢?目前最流行的方式就是"垃圾回收机制": 在程序运行时不断地寻找不再使用的内存进行回收释放。这样做确实在很大程度上减轻了程序员的负担,但也由此带来了一定性能的损失,典型的编程语言:Java/C#/Go 都采用了这种方式。

而 Rust 则选择了另外一种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。在运行时,所有权系统的任何功能都不会减慢程序。当然也并不是全是好处,毕竟“命运赠送的礼物,早已暗中标好价码”。使用所有权系统的代价要先引入一套崭新的完整体系,这套体系导致学习曲线极其陡峭。但 Rust 依然选择了这条路,可以说 Rust 是一门"为了安全可以放弃一切"的编程语言。

2. 性能

使用不同的语言但是相同的算法实现在 90 秒内尽可能多的完成找出10000000以内的所有素数,主要测试了循环、动态数组、基本数学运算的性能。每种语言都会执行6次来减小误差。具体的代码在文末[参考3]

测试结果如下图:

fed09ec9b0d279441de582e95783b126.png

可以看到性能上 C++ 依然称王称霸。Rust 紧随其后,相差也不大。

除了这个之外,还找到有别的网友使用了不同的语言来实现了一个 web 后台,通过 wrk 进行性能测试,详细描述在文末[参考4]。

测试结果如下:

cc0d45ad173c02af205c6a2b8ffff1f8.png

3. 尺寸

只测试返回一个 "hello world" 的函数的情况下,用 Rust 编译成静态库使用,几乎对最终生成的产物 的体积没有影响,在 Android 上最终 so 是 5.9KB,在 iOS 上最终 app 文件是 188KB。

但是如果再使用 Rust 的其他函数或者宏,包体积会有个急剧增加的过程。例如在之前的基础上使用 panic!,Android 的 so 文件会变成 977KB,iOS 的 app 文件会变成 5.2M。

理论上来讲,如果使用 Rust 的其他函数会涉及到 Rust 自有封装实现部分,所以随着开发者代码量的增加,会先出现急剧增加,然后慢慢趋向于平稳,折线表示变化过程:

bbed2a853be934b920f02c0167d8f477.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值