上月,Stack Overflow发布了2020年度最热关键技术趋势调查结果, 这项调查的结果反映了将近65,000名开发人员的意见和经验 ,而其中最为令人关注的是, Rust连续四年登顶最受欢迎的编程语言 。

但最有趣的是, 参加调查的大多数开发人员并不熟悉该语言,但是却坚定的把票投给了它!这个Rust语言到底是何方神圣?能让广大程序员即使只是道听途说就把票投给了它?

一句话总结就是:Rust解决了许多其他编程语言中存在的痛点!

来自动态类型语言的挑战

倾向于使用动态还是静态类型语言的的争论可能还会持续数十年,但是静态类型语言有多少优势很难有定论。但是你会观察到当诸如TypeScript之类的语言或诸如Python等动态语言功能的兴起后, 人们对于动态语言在调试、运行时的不确定性的抱怨。而静态类型的语言允许对数据及其行为预先进行编译器级别的检查和约束,从而减少了程序理解的开销和动态运行的不确定性。

这并不是说所有静态类型系统都是高效的。许多静态类型的语言旁边都有一个大星号:它们允许使用NULL 的概念。这意味着任何值都可能是它自己或是什么都不是,这样可以更有效地为每种类型创建另一个可能的类型。与Haskell和其他一些现代编程语言一样,Rust使用可选类型对这种可能性进行编码,并且编译器要求你处理None这种情况。这样可以防止发生可怕的运行时错误(或等效语言),而可以将其提升为你在用户看到它之前解决的编译时错误。

这是一个 无论我们是否知道他的名字都向某人打招呼的函数示例;如果我们忘记了或者试图直接使用name去match,以为它存在的默认的String值的情况,编译器就会报警。

fn greet_user(name: Option) {

match name {

Some(name) => println!("Hello there, {}!", name),

None => println!("Well howdy, stranger!"),

}

}

Rust的静态类型尽最大努力避免程序员的麻烦,同时鼓励长期的可维护性。一些静态类型的语言给程序员带来了沉重的负担,要求他们多次重复变量的类型,这阻碍了可读性和重构。其他静态类型的语言允许在全局进行数据类型推断。虽然在最初的开发过程中很方便,但是这会降低编译器在类型不再匹配时提供有用的错误信息的能力。Rust可以从这两种样式中学习,并要求顶层项(如函数参数和常量)具有显式类型,同时允许在函数体内部进行类型推断。在这个例子中, Rust 编译器可以推断的类型包括twice,2以及1,因为val 参数和返回类型声明为32位带符号整数。

fn simple_math(val: i32) -> i32 {

let twice = val * 2;

twice - 1

}

来自垃圾回收语言的挑战

使用系统级编程语言的最大好处之一就是可以控制代码底层的细节。

Rust使你可以选择将数据存储在堆栈上还是堆上,并在编译时确定何时不再需要内存并可以对其进行清理。这样可以有效利用内存,并实现更高性能的内存访问。Tilde是Rust在其Skylight产品中的早期生产用户,他发现通过使用Rust重写某些Java HTTP服务,他们能够将内存使用量从5Gb减少到50Mb。当云提供商对增加的内存或更多的节点收取高昂的价格时,这样的节省将会带来巨大的收益。

无需连续运行垃圾收集器,Rust项目非常适合被其他编程语言通过外部功能接口用作库。这使现有项目可以用快速的Rust代码替换对性能至关重要的代码,而不会产生其他系统编程语言固有的内存安全风险。某些项目甚至已使用这些技术在Rust中进行了增量重写。

通过直接访问硬件和内存,Rust是嵌入式和裸机开发的理想语言你您可以编写底层代码,例如操作系统内核或微控制器应用程序。在这些特别具有挑战性的环境中,Rust的核心类型和功能以及可重用的库代码表现将会非常出色。

来自其他系统级编程语言的挑战

对于许多人来说,Rust在很大程度上被视为其他系统级编程语言(例如C或C ++)的替代。与这些语言相比,Rust可以提供的最大好处是借阅检查器。这是编译器的一部分,负责确保引用不会超出引用的数据寿命,并有助于消除由于内存不安全而导致的所有类型的错误。

与许多现有的系统编程语言不同,Rust不需要你将所有时间都花在细节上。Rust力求拥有尽可能多的零成本抽象,这种抽象与等效的手写代码具有同等的性能。在此示例中,我们展示了如何使用迭代器(一种主要的Rust抽象)来简洁地创建一个包含前十个平方数的向量。

let squares: Vec<_> = (0..10).map(|i| i * i).collect();

当安全的Rust无法表达某些概念时,ref="http://cliffle.com/p/dangerust/">可以使用不安全的 Rust。这样可以释放一些额外的功能,但作为交换,程序员现在有责任确保代码真正安全。然后,可以将这种不安全的代码包装在更高级别的抽象中,以确保抽象的所有使用都是安全的。

使用不安全的代码应该是一个经过深思熟虑的决定,因为正确使用它需要与负责避免未定义行为的任何其他语言一样多的思考和关心。最小化不安全代码是最小化由于内存不安全而导致段错误和漏洞的可能性的最佳方法。

系统性编程语言有一种天生的使命,即它们必须永远有效地存在。尽管某些现代软件并不需要那么长的使用寿命,但许多企业希望其辛苦编写代码库在可预见的将来能够一直使用。Rust意识到了这一点,并围绕向后兼容性和稳定性做出了有意识的设计决策。这是为未来至少40年设计的语言。

Rust生态系统

Rust的生态比语言规范和编译器还重要。创建和维护高质量的软件库的语言都会被视为编程界的一股清流。可以通过rustup安装和管理多个并发的Rust工具链。Rust安装随附Cargo,这是一个命令行工具,用于管理依赖项,运行测试,生成文档等。由于默认情况下依赖项,测试和文档可用,因此它们的用法很普遍。crates.io是用于共享和发现Rust库的社区站点。发布到crates.io的任何库都将在docs.rs上构建并发布其文档。

除了内置工具之外,Rust社区还创建了许多开发工具。基准测试,模糊测试和基于属性的测试都可以轻松访问并在项目中得到广泛的使用。额外的编译器 lints 可从 Clippy 下载, 而rustfmt提供了自动的通用格式的设置。

除技术要点外,Rust拥有一个充满活力的欢迎社区。人们可以通过几种官方和非官方途径获得帮助,例如聊天,用户论坛,Rust subreddit,当然还有Stack Overflow 问题与解答以及聊天室。

在离线状态下,Rust在全球范围内召开了多个会议,例如RustConf,Rust Belt Rust,RustFest,Rust Latam,RustCon Asia等。

当然,Rust也不是没有缺点的

Rust强大的类型系统和对内存安全性的强调(都在编译时强制执行)意味着在编译代码时出现错误是非常普遍的。对于不习惯这种自以为是的编程语言的程序员来说,这可能会令人沮丧。但是,Rust开发人员花费了大量时间来改进错误消息,以确保它们清晰且可快速定位错误。

在此示例中,我们创建了一个包含名称的可变字符串,然后引用该名称的前三个字节。尽管该引用非常出色,但我们尝试通过清除字符串来对其进行突变。现在无法保证引用指向有效数据并对其取消引用可能导致未定义的行为,因此编译器会阻止我们:

fn no_mutable_aliasing() {

let mut name = String::from("Vivian");

let nickname = &name[..3];

name.clear();

println!("Hello there, {}!", nickname);

}

error[E0502]: cannot borrow `name` as mutable because it is also borrowed as immutable

--> a.rs:4:5

|

3 | let nickname = &name[..3];

| ---- immutable borrow occurs here

4 | name.clear();

| ^^^^^^^^^^^^ mutable borrow occurs here

5 | println!("Hello there, {}!", nickname);

| -------- immutable borrow later used here

For more information about this error, try `rustc --explain E0502`.

非常有用的是,错误消息包含了我们的代码,并尽最大努力解释问题,指出确切的位置。

由于Rust具有静态类型的性质,并且Rust需要满足100%的所有条件,而不仅仅是99%,所以在早期开发中,这些极端情况通常可以先让程序崩溃吧,然后在以后再添加严格的错误处理。这与Ruby等语言的工作流程不同,在Ruby中,开发人员经常在REPL中试用代码,然后将其移至原型,而完全不考虑错误情况。

Rust仍然是相对较新的,这意味着某些所需的库可能不能用。好的方面是,有很多环境可以开发这些所需的库,并可以利用相关计算机科学领域的最新成果。由于此特性再结合和Rust的能力,Rust的某些库(例如正则表达式库)是所有语言中同类产品中表现最好的。

尽管Rust对稳定性和向后兼容性具有坚定的承诺,但这并不意味着该语言已非常完善。例如,Rust具有异步Future特性已超过三年,但稳定的ef="https://blog.rust-lang.org/2019/11/07/Async-await-stable.html">async/await支持仅在几个月前才加进去。

Rust编译器基于LLVM构建,这意味着目标平台的数量将小于C或C ++。

加入我们吧!

不管你现在喜欢哪种编程语言,Rust肯定都会引起你的兴趣。这就是为什么我和其他人非常喜欢Rust的一些原因。如果你正在寻求开发项目更快或更高效的代码,或者更安全地编写高性能代码的能力,那么现在该来看看,Rust是否会将成你下一个最爱的语言吧!

至于如何快速体验?去领取一个创帆云_python云环境云主机_wordpress网站建设_个人网站_免费上云_数据爬虫_免费bi工具_数据分析​www.bistudio.com.cn

,免费搭建一个Rust环境试试吧!

欢迎关注公众号,获取更多教程好文

Thanks Jake Goulding

丅rust是什么意思_网红编程语言Rust到底是个什么鬼?相关推荐

  1. 编程语言python怎么读-网红编程语言Python将纳入高考你怎么看?

    近日,2018年最具就业前景的7大编程语言排行榜出炉了.这次的编程语言排行榜是由CodingDojo(编码道场)发布.在此次的最有"钱"途的编程语言榜单上,Java排名第一,网红编 ...

  2. 2020年,网红KOL营销到底要怎么做才算成功?我来谈谈

    2020年,网红KOL营销到底要怎么做才算成功?我来谈谈 KOL是近年崛起的炙手可热的新贵. "带货种草.信任社交",以及以抖 音为代表的低门槛.模板化内容创作.算法平等分发的短视 ...

  3. vc6怎么看错误在哪_网红莉哥怎么红的为什么被封了 网红莉哥1400事件视频在哪看...

    喜欢玩短视频的朋友都知道网红莉哥,那么网红莉哥是怎么红的呢?据说,网红莉哥的号已经被封了,这是怎么回事呢?一起来看一下. 网红莉哥是怎么红的 前两年,突然走红的网红莉哥凭借翻唱一首<让我做你的眼 ...

  4. 天津盈克斯机器人科技_网红新科技,走进家居新时代|环渤海爱乐屋门窗amp;威卢克斯天窗双旦狂欢节送您一个温暖的家!...

    转眼间已是2019年年底 环渤海爱乐屋门窗&威卢克斯天窗 推出圣诞活动,一起迎接2020年的到来 ★2019.12.24-2020.1.1★ 1917年芬兰共和国成立.同年,芬兰??爱乐屋木屋 ...

  5. thinkphp5 return 返回空_网红饮品大杯约1/3是空的!店员:这是公司设计的中空隔冷层...

    原标题:网红饮品大杯约1/3是空的!店员:这是公司设计的中空隔冷层 近日,在成都人民北路新开的一家名叫"伏见桃山·茶寮"的网红连锁饮品店,其销售的一款大杯饮品引来一些网友质疑:看起 ...

  6. 动态壁纸安卓_网红文字时钟手机版来了!安卓手机和苹果手机都可以使用!

    今天,我们分享一下最近网上非常火的网红文字时钟手机设置方法.上次,我们为大家分享了Word Clock文字时钟电脑屏保,刚推送就有小伙伴留言要手机版的,不负所望,手机版终于来了! 首先我们看看效果图! ...

  7. 音乐机器人特奥_网红机器人特奥挑战人类钢琴家音乐会

    网红机器人特奥挑战人类钢琴家音乐会 2018-5-3 14:24:02  www.cn010w.com  点击:786次 演出时间: 2018.06.03 演出场馆: 江苏大剧院-音乐厅 演出详情 人 ...

  8. thinkphp5 return 返回空_网红饮品大杯约1/3是空的,店员:是公司设计的中空隔冷层...

    原标题:网红饮品大杯约1/3是空的,店员:是公司设计的中空隔冷层 近日,在成都人民北路新开的一家名叫"伏见桃山·茶寮"的网红连锁饮品店,其销售的一款大杯饮品引来一些网友质疑:看起来 ...

  9. 阜阳机器人餐厅_网红智能机器人来阜阳这家医院“上班”了,还会说阜阳话!...

    原标题:网红智能机器人来阜阳这家医院"上班"了,还会说阜阳话! 相信不少"抖友" 在刷抖音的时候 都看过一些医院.银行大厅的智能机器人 被他们萌的心花怒放.乐不 ...

  10. RISC-V,芯片中的网红战斗机,究竟是个什么鬼

    说到芯片,大家一般都自然而然的想到电脑.手机.是的,这两位确实是芯片的典型用户,但是却不是唯一用户,更不是最大用户.随着半导体技术的日益精进,现代的电子设备,没有几个不用到芯片的,包括日常最常见的遥控 ...

最新文章

  1. iOS 相册和网络图片的存取
  2. nagios监控linux nrpe安装
  3. Struts2中Action访问Servlet API的三种方法
  4. zblog php标签,201502200101 zblogphp调整“显示常用标签”个数方法
  5. ArcGIS在线资源集
  6. 项目管理之需求调研感悟
  7. 提高网速软件_【干货】C盘空间不够用,这款软件或许会帮到你!一键清除C盘多余文件...
  8. java响应鼠标滚轮事件_一文读懂鼠标滚轮事件(wheelEvent)
  9. 超牛逼的异步协程爬虫
  10. 用二维数组实现矩阵转置
  11. SAP Spartacus 的 git flow 和发布流程
  12. SAP ABAP实用技巧介绍系列之 ABAP XSLT select keyword
  13. 如何创建一个特定版本的python虚拟环境
  14. python中valueerror是什_Python:ValueError和Exception的区别?
  15. 亿贝html5,亿贝CALL
  16. PDF电子书制作详细教程
  17. Houdini在UE4特效中的尝试分享
  18. VRP--车辆路径问题 c++
  19. 合肥工业大学宣城java实验报告,合肥工业大学宣城校区,程序设计基础上机实验,周波老师仅供参考(修正版).doc...
  20. 【毕业设计】深度学习 python opencv 实现人脸年龄性别识别

热门文章

  1. sharepoint FAST serach 设置
  2. TCP/IP协议讲解
  3. Could not resolve subtype of [simple type, class org.apereo.cas.services.Reg...
  4. 这么多年的土豆都白吃了!土豆还能这么做,太香了
  5. 豆瓣top250html源码,用23行代码爬取豆瓣音乐top250
  6. 二维码应用——门禁系统
  7. MAC Pro开机密码忘记了怎么办?
  8. 计算机术语中的cpu是指什么意思是,什么叫cpu_cpu是什么意思_电脑cpu意思介绍 - 系统家园...
  9. (内附独家PPT)李岩:CynosDB高可用系统介绍
  10. java的自省机制_深入理解Java反射机制