写点什么

不要再说 Rust 过度炒作了

  • 2021-12-24
  • 本文字数:3083 字

    阅读完需:约 10 分钟

不要再说Rust过度炒作了

作者心声:这篇文章我写得可是小心翼翼,尽量避免任何过于肯定或者容易引起误解的表述。我也有自己的正常工作、没办法真正全身心投入到 Rust 的宣传工作,所以只能用这样一篇文章表达自己的感受。篇幅有限,文章内容肯定无法面面俱到,所以我把自己想到但没能讨论的部分都列在了文末。

Rust 过度炒作?不至于不至于


每当出现关于 Rust 的讨论,最终大抵都要以“炒作”问题结束。


很多朋友觉得 Rust 在网上水军太多,每天都会听到“Rust 最棒”、“人家 Rust 如何如何”、“Rust yyds”之类的言论。这帮家伙就不能消停一会?


确实,Rust 在网上热度很高,但大家还记得当初 Java 刚兴起时的情况吗?如果不记得,恐怕是因为各位还很年轻。


那时候市面上充斥着满是废话的商贸杂志,而且神奇的是,他们都爱报道计算机方面的内容。于是我们就会看到一系列关于 Java 语言、发展前景以及它能解决的问题等文章。


那时候的互联网还不像现在这样充斥着很多极端情绪和“复读”习惯,所以倒没有酝酿出激烈的争论,但人们的烦躁之情是共通的。


Java 语言那时候还没有得到实践检验,这种未经证实的技术报道太多了——没人用过、没人了解、没人在乎。毕竟虚拟机运行时之前就有,C 和 COBOL 也都非常成熟了,为什么非得拿 Java 来硬凑热点?


后来的故事大家都知道了,Java 不负众望、宰治了整个软件行业长达 20 年。接下来才是重点,咱们聊聊为什么没必要对“炒作”抱有过度恶意。

为什么总有炒作之声?

在 Rust 出现之前,我们没有必要反复强调某些问题,因为根本就没有真正的解决方案。每个人都知道缓冲区溢出是个大麻烦,而 Java 等语言可以解决问题;大家都清楚自主编写的数据结构缺陷多多,但 Python 等语言在这方面能出把力。


所以那时候的人们还不会以某一大类问题(例如「组合便捷性」和「内存安全性」)为切入点讨论痛点。毕竟既然不打算重新设计一种能解决问题的编程语言,谈得这么宽泛完全是在浪费时间。


唯一称得上共通难题的就只有安全性问题,但之前的解决思路要么是在性能与可维护性之间进行权衡(Python、Ruby、Erlang),要么就是维持在可接受的水平上然后弃之不理(Java、JavaScript、PHP)。


这些问题、甚至是整个问题类别,都成了程序领域中的“背景辐射”。每个人都知道有这些问题、每个人偶尔都会抱怨,但就是没有解决的办法。


直到 Rust 出现之后,大家才意识到,出现了一种能解决所有问题的技术,这意味着编程时代开始由问题与解决方案的多对多关系、真正走向多对一的统筹处理阶段。


于是我们在网上的讨论中逐渐开始从当前问题出发总结问题大类,甚至还要把解决思路拓宽到其他问题大类当中!这本应是个巨大的优势,但正是这种优势让 Rust 显得似乎一夜之间就无处不在,而且跟我们日常工作中的各个环节都息息相关。

“别再骗自己了”


作为技术人员和工程师的核心特征,大家应该很擅长冷静客观地评估系统。你可以先把“炒作”这码事放在一边,专门根据实际表现考量解决方案。决定判断的应该是事实、而非情绪,对吧?一旦因为“炒作”而抵制 Rust,那我们就离讨论的基本诉求越来越远了。更不用说极端的人身攻击了,那是小孩子打架般的玩意,不值一驳。


我之所以坚持认为“Rust 炒作论”是种有害的侮辱性言论,并不是因为我从 Rust 基金会那拿了钱,或者是想劝说大家购买 Rust Enterprise。


坦白地讲,我在编程行业待了 30 年,体会过用没有 type 安全设计的语言进行大规模重构,用会产生 GC 开销的语言编写快速服务,用缺乏良好内存清理机制的语言编写紧凑代码,再把这些成果运行在微型计算机以及后来的分布式多核心集群上。


这些我都干过,而且都成功了……但过程非常非常痛苦。所以当我看到 Rust 的一刹那,我就知道这是个好东西。


我之所以力推 Rust,是因为它真的很出色、没准能帮助大家解决现实问题(包括很多你已经觉得无药可救的问题)。这篇文章完全发自肺腑、出于真诚,我只谈自己的切身感受与判断;如果大家有不同意见,也请以同样真诚的态度给出说明,感谢各位。

别搞“网络纠察队”

更重要的是,别搞什么“网络纠察队”。所谓针对 Rust“水军”和“炒作”的抱怨其实就是一种网络纠察行为,或者说是对人们的立场乃至表达方式做出的另一种抱怨。相信很多朋友也和我一样,已经厌倦了这种毫无意义、既无成效也无建设性的反复争论。


我写这篇文章,是因为我自己有表达的冲动。各位觉得不喜欢可以自行离开,这很正常。但我绝对不会刻意去迎合某些人脆弱的神经,也不想顺应那些在网上喷 Rust 喷到血压上升的家伙的立场。


我的出发点非常单纯:只要是能给编程行业带来实质性改善的好东西、只要是能让程序员日常工作更轻松的东西,我就支持。

别在抱怨中错失良机

曾几何时,Java 也卷起过一股“风潮”。但随着“炒作”的消退,这种争议也随之瓦解。


总有人说“真正的”程序员绝不用 Java,我觉得 Rust 倒是没有这个问题,因为它“够难”(但其实并不难,至少没大家想象的那么难)。


之所以没人把 Java 视为威胁,是因为当时互联网行业正在快速发展,众多新岗位的涌现让新语言成为单纯的工具而非威胁。当时最大的分歧,就是很多人觉得 Java 难度低,“格局”不够,用了它好像就跟普罗大众距离拉近了一般,无法凸显自己编程精英的高中地位。


但如今不同了,经济形势放缓,软件开发行业也受到了波及,每个人都需要谨小慎微地规划未来的前进道路。与其靠自己的脑袋记住一切陷阱,为什么不直接使用一种能消除这些陷阱的语言?谁把精力节约下来用在更有意义的地方,谁就能在残酷的市场竞争中占据主动。


从企业的角度来看更是如何,Rust 能帮助大家省下代码调试或重构方面的成本,规避安全演习开支,并通过近裸机运行方式省下硬件投入。


我现在的 Rust 编程速度已经不亚于 Python 了,相信大家也能做到。软件的上市时间非常重要,而 Rust 与脚本语言之间的开发效率差距正在迅速缩小。如果继续顽抗到底,那你的解决方案发布速度会变慢、启动及维护的成本会更高,其他人就可能在你继续抱怨的同时悄悄瓜分掉你的市场份额。


正因为 Rust 具有显著的竞争优势、能够编写出超越其他语言的高质量代码,所以招聘经理们才开始用 Rust 水平衡量顶尖人才的业务能力。在不久的未来,这种标准将成为新的常态,哪怕每天把 Rust 喷上一万遍也改变不了这个现实。

写在最后……

我知道,很多朋友会在评论区里纠正文章里的某些细节,这里我就自己列出来算了:


  • 大获成功的 Java 其实黑点也不少,一样充满了问题。

  • 一切得慢慢来,操之过急只会把编程员工们吓跑。

  • 上世纪六十年代就有人提出过分类解决问题的想法,但无一例外都失败了。

  • 也许我这 30 年里写过的代码都很差劲,确实有这种可能。

  • 水平够高的程序员当然可以克服或规避其他语言中的固有缺陷。

  • 语言不是万能的,任何语言都有可能写出糟糕的代码,还是要看人。

  • 语言不是万能的,任何语言都有可能写出不安全的代码。

  • 我针对的不是各位读者,只是一种现象。对事不对人。

  • Rust 当然解决不了所有问题,这一点必须实事求是。

  • 除开 Rust,我也见过其他不少优秀的技术方案。

  • Rust 是门大语言,涉及的学习内容众多,所以上手难度确实不低。

  • 很难把 Rust 的改进效果量化出来。

  • Rust 中也有很多目前无法、甚至永远无法解决的难点和问题。

  • 能用好垃圾技术确实算是种特长,只是这特长没什么成长空间。

  • 如果能用好垃圾技术真有成长空间,就意味着市面上必须不断涌现更多垃圾技术……也许会,可我觉得但愿不会。

  • 可能 Rust 也是垃圾技术之一,只是我还没意识到。

  • 我说自己的 Rust 编程速度跟 Python 开发相当,这可能是因为我的 Python 编程速度本就不咋的。

  • 毕竟还有自己的工作,所以非常抱歉,我只能在文章中做出概括性的论述,没法结合具体问题详尽介绍 Rust 的使用心得。

  • 这篇文章本身也属于抱怨,我承认~


原文链接:


https://thenewwazoo.github.io/whining.html

2021-12-24 14:449615
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 540.0 次阅读, 收获喜欢 1977 次。

关注

评论 1 条评论

发布
用户头像
不要讨论这些无意义的事情,时代总会淘汰一些不符合时代潮流的东西
2022-01-01 19:09
回复
没有更多了
发现更多内容

排序子序列与倒置字符串

未见花闻

7月月更

Python 迭代器介绍及其作用

宇宙之一粟

Python 迭代器 7月月更

模块1 作业

在线摇骰子色子工具

入门小站

工具

【Docker 那些事儿】容器网络(下篇)

Albert Edison

Docker Kubernetes 容器 云原生 7月月更

Vue3 状态管理 Pinia 快速入门指南

程序员海军

Vue 状态管理 7月月更

Qt | 控件之QComboBox

YOLO.

qt 7月月更

一款强大的mock数据生成工具

Xd

Linux tar打包

工程师日月

Linux tar 7月月更

如何在Linux中比较多个文件?这12个优秀工具了解一下!

wljslmz

Linux 7月月更 文件比较

王者荣耀商城异地多活架构设计

地下地上

架构实战营

实习是步入社会的一道坎

KEY.L

7月月更

现场可程式化逻辑闸阵列 FPGA

贾献华

7月月更

群里的初级工程师求助说,要采集采招数据,必须给他安排上

梦想橡皮擦

Python 爬虫 7月月更

ArkUI开发框架组件的生命周期详解

坚果

HarmonyOS OpenHarmony Open Harmony 7月月更

zookeeper-watcher的javaApi相关使用

zarmnosaj

7月月更

长安链学习研究-存储分析wal机制

长安链

Zabbix 6.0 源码安装以及 HA 配置

耳东@Erdong

zabbix ha 7月月更 zabbix 6.0

使用kitti数据集实现自动驾驶——发布照片、点云、IMU、GPS、显示2D和3D侦测框

秃头小苏

7月月更 kitti

python文件操作知多少

迷彩

Python基础 文件操作 7月月更

分布式事务的性能设计

穿过生命散发芬芳

分布式事务 7月月更

【算法社区】查找算法大全(hash、avl、bst、队列)

小明Java问道之路

二分查找 hash 查找 7月月更 BST

uni-app进阶之自定义【day13】

恒山其若陋兮

7月月更

linux之realpath命令

入门小站

Linux

你学会如何将项目部署到Linux系统上了吗?要不我带你耍耍。

Java学术趴

7月月更

【萌新解题】四数之和

面试官问

LeetCode

Istio XDS配置生成实现

阿泽🧸

envoy 7月月更

Setup的使用技巧

bo

Vue 前端 7月月更

Vscode 搭建 C / C++ 开发环境

攻城狮杰森

c c++ vscode 开发环境 7月月更

Mysql 温故知新系列「触发器详解」

安逸的咸鱼

MySQL 7月月更

C++ Workflow异步调度框架 - 性能优化网络篇

1412

c++ 开源 workflow 异步调度 网络框架

不要再说Rust过度炒作了_语言 & 开发_thenewwazoo (网名)_InfoQ精选文章