写了多年的Java,某天机缘巧合之下听说了一门语言叫Rust,Rust的亲爹是Mozilla,如果要和其它语言拼爹的话,实力应该还是可以的。

官方介绍如下:Rust is blazingly fast and memory-efficient: with no runtime or garbage collector, it can power performance-critical services, run on embedded devices, and easily integrate with other languages.

Rust速度快得惊人,内存效率也很高。没有运行时或垃圾收集器,它可以为性能关键的服务提供强大支持,可以在嵌入式设备上运行,并且很容易与其他语言集成。

Rust’s rich type system and ownership model guarantee memory-safety and thread-safety — enabling you to eliminate many classes of bugs at compile-time.

Rust丰富的类型系统和所有权模型保证了内存安全性和线程安全性——使您能够在编译时消除许多各种各样的bug。

Rust has great documentation, a friendly compiler with useful error messages, and top-notch tooling — an integrated package manager and build tool, smart multi-editor support with auto-completion and type inspections, an auto-formatter, and more.

Rust的文档很强大,有一个友好的编译器,能提示一些有用的错误信息,以及一流的工具——一个集成的包管理器和构建工具,支持自动完成和类型检查的智能多项编辑器,一个自动格式化程序,等等。

我已经在上文中把今天的重点加粗标识了。打算用一个LeetCode上的算法题目来对比下Java实现和Rust实现,看看Rust是不是真的很惊人。

题目如下:

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

示例1:

输入: [2,2,1]

输出: 1

示例2

输入: [4,1,2,1,2]

输出: 4

解法:利用异或运算(XOR)的特性,使用位操作进行计算。

先来一起复习下XOR的特性:对0和任意数进行XOR运算,得到的仍然是这个数本身,即a^0=a。

对同一个数进行XOR运算,返回的结果是0。即a^a=0。

XOR满足交换律和结合律。即a^b^a=(a^a)^b=0^b=b。

以下是撸代码环节......

Java版本:

class Solution {

public int singleNumber(int[] nums) {

int result = 0;

for (int num : nums) {

result = result ^ num;

}

return result;

}

}

LeetCode执行结果:

Rust版本:

impl Solution {

pub fn single_number(nums: Vec) -> i32 {

let mut result: i32 = 0;

for num in nums {

result = result ^ num;

}

return result;

}

}

将LeetCode运行结果整理到一个表格中,便于直观地对比:

从数据来看,Rust在执行用时和内存消耗上比Java强大太多。这个例子中内存消耗的差距更明显一些。

结语

如果不谈Java和Rust背后的生态,仅从运行效率本身来看。Rust作为一门更接近底层的语言,性能比Java强也是应该的。在内存要求苛刻、GC时间苛刻的场景下不失为一个好的选择,例如嵌入式、实时股票行情场景。能不能取代C++就看Mozilla怎么搞好社区和生态圈了,以及C++程序员们是否愿意付出学习成本。

我也是刚接触Rust,之后也会持续关注,希望Rust未来可期。朋友们有兴趣的话可以多多交流,共同拓宽技术广度与深度。

rust废铁最快_Rust初体验,它确实有点快相关推荐

  1. 一个课程,11个项目!爬虫初体验,快来!

    <11 个案例开启 Python 爬虫初体验> <人人都能做的 Vue 3 记账本实战>

  2. 小程序 缩放_缩放流星应用程序的初体验

    小程序 缩放 by Elie Steinbock 埃莉·斯坦博克(Elie Steinbock) 缩放流星应用程序的初体验 (First Experiences Scaling a Meteor Ap ...

  3. Windows Embedded CE 6.0开发初体验(二)CE开发环境 收藏

    上一篇<Windows Embedded CE 6.0开发初体验>之"嵌入式开发流程": http://blog.csdn.net/aawolf/archive/200 ...

  4. 我的Go+语言初体验——【三、spx案例测试(附-视频)】

    欢迎大家参与[我的Go+语言初体验]活动: 活动地址:[https://bbs.csdn.net/topics/603464006?utm_source=1594742339] 安装过程博文:[我的G ...

  5. 香蕉派(or 皮?)上手初体验 -- 外观鉴赏,安装,配置amp;总结

    一.前言及简单介绍 听到"派"或者是看到这幅图片.难免让你想到眼下大名鼎鼎的"树莓派". 而香蕉派(Banana Pi. 论坛上也有人称它香蕉皮)是一款国产的比 ...

  6. WTM系列视频教程:初体验

    WTM系列视频教程 第一章:初体验 文字摘要: "如果你没用过wtm,今天的教程肯定能让你眼前一亮,这个框架竟然这么牛逼么?开发速度这么快么?" "至于为什么叫WTM,他 ...

  7. Windows Embedded CE 6.0开发初体验(二)CE开发环境

    CE开发环境 下面就要让今天的主角闪亮登场了--Digi CC 9P开发板.为了感谢Digi提供的开发板,还是给他们做个广告吧:这是一家以WiFi相关产品为主营业务的公司,也生产ARM架构的CPU,所 ...

  8. 搜索引擎核心技术与算法 —— 倒排索引初体验

    今天开启一个新篇章--智能搜索与NLP.本篇章将由羸弱菜鸡小Q和大家一同学习与智能搜索相关的知识和技术,希望能和大家一同学习与进步,冲鸭!! 这里首先区分两个概念:搜索和检索 检索:数据库时代的概念, ...

  9. 使用Kotlin开发Android应用初体验

    使用Kotlin开发Android应用初体验 昨晚,最近一届的谷歌IO大会正式将Kotlin确定为了官方开发语言,作为一名Android开发鸟,怎么能不及时尝尝鲜呢? Kotlin的简要介绍 在开发之 ...

最新文章

  1. 阿里架构师,讲述分布式架构云平台解决方案(附学习路线)...
  2. 荷兰国旗 Flag of the Kingdom of the Netherlands
  3. 关于char[]转换成LPCWSTR的有关问题
  4. 外服封号_外服大主播Diss原神:因为吐槽氪金体验差,米哈游把我号封了
  5. git版本管理工具学习
  6. python学习笔记(五)
  7. poj 2777 Count Color(线段树区区+染色问题)
  8. JS 正则表达式 验证中国大陆身份证号码
  9. 唐平中讲座笔记 Reinforcement mechanism design 20171107
  10. 为什么一提到苹果就想到乔布斯,蒂姆·库克的事迹你知道多少?
  11. mp3转成m4a的简单方法介绍
  12. 堪比N6705和Power Monitor AAA10F 的高精度_高采样率_低功耗测试电源mPower1203
  13. 小云路由器mysql地址_小云OS3.0,极简操作,让小白玩转离线下载和NAS(转发)
  14. arm汇编和c语言混合编程实验报告,arm实验ARM汇编和C语言混合编程.doc
  15. 数据结构课程设计-哈夫曼编解码器
  16. 网络安全与管理 整理
  17. 【黑马课程笔记】webAPI
  18. 管家婆财贸双全提示此记录为系统会计科目禁止删除处理方法
  19. 炉石服务器请求超时何时才能修复,炉石传说登陆提示请求已超时怎么办_炉石传说登陆提示请求已超时解决方法_3DM网游...
  20. 北斗智慧环卫智能收运系统解决方案

热门文章

  1. Kogito,ergo规则—第2部分:规则的全面执行模型
  2. intellij注释模板_IntelliJ中的实时模板
  3. spring框架mvc框架_Spring MVC测试框架入门–第2部分
  4. servlet3异步_Servlet 3的异步Servlet功能
  5. Java 9:欢迎来到Module World
  6. 将EntityManager.refresh添加到所有Spring数据存储库
  7. 适用于无服务器Java开发人员的AWS Lambda:它为您带来了什么?
  8. 使用Spring-Retry重试处理
  9. 使用cglib创建代理对象
  10. jsf 开发_JSF开发人员应该知道的5种有用方法