当前位置: 首页 > news >正文

说大话还是真实力,Rust 是被炒“火”的吗?

04cea3e48f8e083afffac060e101a419.gif

整理 | 丁广辉      责编 | 张红月

出品 | CSDN(ID:CSDNnews)

每位程序员都很了解自己使用的语言的优缺点,有些语言的优点很明显,但它所存在的缺点往往也会让人绞尽脑汁,却又无可奈何。比如Java的优点就很明显,简单,安全,稳定,还能跨平台使用。但是它所需要的内存量太大了,因为他还需要一系列的硬盘空间来存储Java文件和.class文件以及对应的版本文件。

同样的Python也有很明显的优点,编写简单,有丰富的内置代码库以及大量的第三方库。但是运行速度慢,写出来的代码还不能加密。我们在过去的程序编写中或多或少地留下了一些无法解决得问题,但直到Rust的发布。我并不是说Rust就是最好的,它也存在问题,但它确实解决了不少以前让我们头疼的难题。

Rust是诞生于2015年的编程语言‍,在2016年被 Stack Overflow 评选为最受开发者喜爱的语言‍。国内外许多知名互联网或科技公司纷纷拥抱Rust,用它来优化或者重构技术栈,比如字节跳动的飞书,Google 的 Fuchsia 、Linux 内核也开始尝试Rust等。那么Rust好在哪里呢?

68ac8cf78a29848e9cbc39555cbcaf07.png

首先 Rust 没有历史包袱,采百家之长。从语言的内核看, Rust 重塑了对基本概念的理解。比如它清晰地定义了变量的生命周期,不仅摒弃 GC 这样的内存和性能杀手,还不用关心手动内存管理,让内存安全和高性能兼得。

其次,从语言的外观来看,它用起来很像 Python/TypeScript 这样的高级语言,表达能力一流,但性能丝毫不输于 C/C++,表达力和高性能二者兼得。

所以,集表达力、高性能、内存安全于一身的 Rust ,在很多场景里都能大施拳脚。除了在传统的系统开发领域,如操作系统、设备驱动、嵌入式等方向高歌猛进之外,Rust 还在服务端高性能、高并发场景遍地开花。

但是就是这样一个很好用的新兴底层语言,却依然有很多人在“抨击”说Rust是在炒作。对此,一名拥有30多年编程经验的开发者喊话,请停止吧!

1

Rust为什么会被“炒作”?

事实上,每次讨论关于Rust的话题都会以无休止的抨击Rust过度宣传而告终,有不少人认为它“言过其实了”认为那些说Rust好话的人都是在为Rust炒作。

还有人记得Java横空出世的时候吗?可能很多人都已忘记,也可能是因为你太年轻。在过去的日子里,有很多关于Java文章的讨论。有不乏对Java的前景的赞美,当然也有一些人“看不起”Java并贬低它,说它已死之类的言论。当然我们都知道最后的结果如何。Java不负众望,在这个行业风生水起了20多年。当时的互联网还不是个充满仇恨的地方,但是对Java的抨击和现在的Rust是一样的,所以请不要在抨击Rust炒作之类无意义的事情了。让我们把视线聚焦到真正的解决方案之中,如何解决现实的编程问题才是第一位。

在Rust出现之前,反复强调没有解决方案的问题是毫无意义的。例如Java对解决缓冲区溢出问题很有帮助,Python则有助于改善开发人员编写数据结构。而对于类似ease of composition和内容安全这样的问题就没有讨论的必要,因为除非重新设计一门语言,否则根本没有可用的解决办法。当然在近几十年,有关内存安全问题已经是一个被充分理解的问题类别,但要解决它需要在性能和可维护性方面做出权衡(Python、Ruby、Erlang),要么就不能真正解决它(Java、JavaScript、PHP)。

面对种种问题,大家除了抨击之外,却一直没有找到最佳的解决方案。只能用不同的技术解决不同的问题,然而Rust的诞生改变了这种情况,人们用Rust就可以解决大部分问题。这就让Rust可以存在于各种程序中,让人觉得它无处不在,且与我们的程序息息相关。他能帮助技术人员编写更好地程序,正是因为它够好,所以才会有这么多炒作。

2

Rust对你是有帮助的,这是事实

技术人员和工程师都有一个特点,就是他们善于冷静的评估系统,可以抛开“炒作”,只关心这个技术能否帮助他们解决问题,而不会因为内心排斥就绝对不用。也就是说他们不会因自己认为Rust在“炒作”就抵制Rust。

我没有拿Rust基金会的钱,骗你去使用Rust。作为一个拥有30年编程经验的开发者,我曾成功地在没有类型安全的语言中进行了大型的重构,也曾在产生GC开销的语言上实现快服务,也曾在内存支持较差的语言上写过严格的代码,也曾在微型机进行编程,也曾在分布式多核集群中写代码。所以当看到Rust发布更新时,我知道这对开发者来说,又多了一些“利器”,因为它可以让开发者解决诸多让人头疼的问题。

我之所以在你的话题中提到Rust,是因为它和你谈论的话题有一定的关联,甚至能解决你遇到的问题。就算你对Rust感到厌烦,也无法改变它能帮助你的事实。当然你可以选择不同意我的观点,那就请你就我所说的观点提出异议,并像我真诚的对你说我的观点一样,真诚的回应我。

3

互联网技术是不断迭代更新的

所有的编程语言都是一种“时尚”,一旦热度平息就会消失,我想这不是Rust的问题,也不是某一个语言的问题。互联网和行业的发展意味着总会有某种技术逐渐没人使用直至消失,但总会有一种新的技术来接替它。

你能记住程序中的所有陷阱,并且学习所有编程技巧和编程过程中的注意事项来避免问题的发生。但是另外一个用其他语言的人会将你替代,因为他的程序不需要为这些问题浪费时间。还有一些公司选择不在重构和调试上花那么多的钱,这样他们就可以减少安全测试的支出,于是你所会的对于这些公司就没用了,你还是会被逐渐淘汰。而我可以像写Python一样快速的写Rust,并且还能兼顾Java的优点。因此我能更快的写出安全稳定的程序。所以我会被企业看重,而你只能被淘汰。这不是个人能力的问题,而是企业需要的人和技术在不断更替。

现在技术人员了解和使用Rust是有竞争优势的。招聘经理通过它来筛选最优秀的人才,因为他们知道Rust有助于技术人员在其他语言中写出更好地代码。在不久的将来它将成为招聘桌上的最重要的部分。

4

推荐阅读

c4d41325cc2ecbf1085cdf5f0e105493.png

01

《Rust编程:入门、实战与进阶》

朱春雷 著

10515a7f01bd38e97fcdb86e08ac7be9.png

推荐理由:Web3metaLabs创始人兼CTO/Polkadot大使撰写,语法与编码能力训练并重,精选39道LeetCode高频算法面试真题。是一部注重编码能力训练的实战性著作,既能帮助读者扎实掌握Rust的主要语法知识并具备实战能力,又能指导读者快速从初学者晋级为高手。

4cc78cb6d333fca848ba1ddc43a3afe7.png

02

《Rust实战:从入门到精通

8d1d7f766e81b035369548b6647a76ad.png

[意] 卡洛·米拉内西(Carlo Milanesi) 著

卢涛 李颖 译

推荐理由:Rust开发社区贡献者编写;通过大量代码示例详细解析Rust语言的各种特性,带你轻松入门Rust编程。阅读本书只需了解基本的编程知识——最好是有C或C++的基础知识,就可以完成本书的学习。

a9e8b7cdbd34097ef496f85c9c22abc3.gif

23a879b6ef8bf36500c855223e8d8fca.png

扫码关注【华章计算机】视频号

每天来听华章哥讲书

16ab37d24a62dbe0c348c966945694c4.gif

更多精彩回顾

书讯 | 12月书讯(上) | 冬夜寒冷,读书暖心,华章科技上新啦!

书讯 | 12月书讯(下) | 冬夜寒冷,读书暖心,华章科技上新啦!

资讯 | 2022年六大值得关注的边缘计算趋势

书单 | 8本书助你零基础转行数据分析岗

干货 | 胡伟武:中国IT产业的根本出路在于构建自己新的体系

收藏 | Excel摸鱼技巧:快速实现分列转到行

上新 | 【新书速递】高效使用Greenplum

赠书 | 【第86期】CPU 空闲时在干嘛?

460c2450115c2a2759a56e7de83e44b6.gif

244df8d1d11f28d023025d942c99f301.gif

点击阅读全文购买

相关文章:

  • 用Python写了一个图像文字识别OCR工具
  • 解读数据工程、数据科学和机器学习都有什么区别?
  • 1月书讯(上)| 2022年的第一本书
  • Docker冲顶技术热词,微服务应用热度不减,中国云原生开发者真实现状如何?...
  • 重磅!达摩院发布2022十大科技趋势
  • Flink1.14.2发布,除了log4j漏洞你还需要关注什么?
  • 揭秘 vivo 如何打造千万级 DAU 活动中台
  • 终于有人把“可解释机器学习”讲明白了
  • 产品经理必读:用户场景分析的四要素
  • 年终盘点:2021年的通信行业
  • 缓存和数据库一致性问题,看这篇就够了
  • 【新书速递】深入浅出Electron
  • Java静态编译技术:突破Java“冷启动”桎梏,实现启动性能“质”的飞跃
  • 脑机接口新进展!只凭意念,操纵机器移动、拿取物体成为现实
  • 【第87期】程序员怎样上元宇宙的车?
  • [译]如何构建服务器端web组件,为何要构建?
  • 【EOS】Cleos基础
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • CSS 专业技巧
  • JavaScript 无符号位移运算符 三个大于号 的使用方法
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • Just for fun——迅速写完快速排序
  • Netty源码解析1-Buffer
  • SpiderData 2019年2月25日 DApp数据排行榜
  • 欢迎参加第二届中国游戏开发者大会
  • 简单易用的leetcode开发测试工具(npm)
  • 爬虫模拟登陆 SegmentFault
  • 驱动程序原理
  • 人脸识别最新开发经验demo
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在Unity中实现一个简单的消息管理器
  • Spring第一个helloWorld
  • 通过调用文摘列表API获取文摘
  • #includecmath
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • ${ }的特别功能
  • (07)Hive——窗口函数详解
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (编译到47%失败)to be deleted
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)ssm考试题库管理系统 毕业设计 069043
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (四)Android布局类型(线性布局LinearLayout)
  • .NET Core跨平台微服务学习资源
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • .NET应用架构设计:原则、模式与实践 目录预览
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • :“Failed to access IIS metabase”解决方法
  • @angular/cli项目构建--Dynamic.Form