写点什么

不要再说 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:449553
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论 1 条评论

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

从云原生到 AI 原生,网关的发展趋势和最佳实践

阿里巴巴云原生

阿里云 云原生 网关

腾讯云大神呕心沥血整理:redis深度笔记”,看完全面掌握redis核心技术

采菊东篱下

redis java面试

lazada 商品详情 API 的获取与应用

科普小能手

API 接口 API 测试 lazada商品评价接口 lazada API接口 lazada API

如何炼就 AI 原住民的“自我修养”丨通义灵码走进北京大学创新课堂

阿里云云效

阿里云 云原生 通义灵码

80%腾讯程序员都在用,腾讯云AI代码助手让编码提效42%

科技热闻

【DevOps系列】需求的层次结构:业务驱动的协作与产品导向的交付

嘉为蓝鲸

DevOps 需求分析

附演讲视频|隐语城市行·北京站:行业发展趋势、大模型前沿技术、实践落地案例干货打包

隐语SecretFlow

喜报!博睿数据再获“信创工委会技术活动单位”称号

博睿数据

【DevOps系列】CICD流程建设之警惕反模式

嘉为蓝鲸

DevOps CI/CD 反模式

Tecplot 360 EX 2021 R1 for Mac CFD可视化和分析工具

Mac相关知识分享

Apache Seata(incubating) 首个版本重磅发布!

阿里巴巴云原生

Apache 阿里云 云原生

鸿蒙NEXT应用上架与分发步骤详解

威哥爱编程

华为 HarmonyOS Open Harmony HarmonyOS框架 HarmonyOS NEXT

如何妥善处理 TCP 代理中连接的关闭

不在线第一只蜗牛

网络协议 网络

如何炼就 AI 原住民的“自我修养”丨通义灵码走进北京大学创新课堂

阿里巴巴云原生

阿里云 云原生 通义灵码

【DevOps系列】DevOps全过程质量管控

嘉为蓝鲸

DevOps

可视化数学分析软件MathWorks MATLAB R2023a for Mac

Mac相关知识分享

【DevOps系列】CICD流程建设之持续集成实践指南

嘉为蓝鲸

DevOps 持续集成 CI/CD

【核电科技企业】构建一体化服务器智能运维平台,助力降本增效

嘉为蓝鲸

AIOPS 运维‘ 一体化运维

浅谈inBuilder中元数据的灰度更新方案

inBuilder低代码平台

低代码 元数据 低代码中的元数据

财务规划的成功战略之一:建立数据驱动型决策

智达方通

数据分析 企业管理 财务分析 财务管理 财务规划

软件测试学习笔记丨Selenium弹窗操作

测试人

软件测试

一文彻底弄懂MySQL的优化

快乐非自愿限量之名

MySQL 数据库

Illustrator 2023版 for mac(Ai2023矢量设计应用程序)

Mac相关知识分享

2024 OPPO开发者大会召开,携手火山引擎加速迈进AI语音交互新时代

新消费日报

「用户故事」 从 Thanos 到 GreptimeDB,我们实现了 Prometheus 高效长期存储

Greptime 格睿科技

数据库 云原生 数据迁移

【DevOps系列】DevOps工具链选型指南

嘉为蓝鲸

DevOps 工具链

场景题:百万数据插入Redis有哪些实现方案?

王磊

关于C语言指针类型的总结

EquatorCoco

数据结构 算法 C语言

豆包MarsCode Agent 登顶 SWE-bench Lite 评测集

豆包MarsCode

AI

对象存储防勒索升级:XEOS 国内首家通过 NBU 对象锁认证

XSKY星辰天合

IoTDB 探索季活动|大疆无人机等你来拿

Apache IoTDB

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