“再见了 Rust,祝你成功,但我还是回到了 C++……”

【CSDN 编者按】在技术社区中,编程语言的选择往往不仅仅是基于技术优劣的考量,更涉及到职业发展、市场需求以及个人偏好等多方面因素。本文作者分享了从 Rust 回归 C++ 的心路历程,指出了尽管 Rust 在设计上拥有诸多优势——如更好的工具支持、丰富的库生态以及严格的内存安全机制,但在实际就业市场上的采用率和行业影响力却相对有限。作者通过个人经历反思了 Rust 与 C++ 之间的抉择,并对 Rust 未来的发展提出了自己的看法。

作者 | I_pretend_2_know(Reddit ID)   编译 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

在我三年的 Rust 编程生涯中,我做过异步/多线程编程、通过 bindgen 使用 FFI、在没有 std 的情况下进行内核编程……这些都很有趣。但现在这种乐趣已经结束:一个月前,我开始了一份 C++ 的工作。

4216f273f159decebacb297dd20f95fb.jpeg

(CSDN付费下载自视觉中国)

b9a47ad5734333136c396b1bfae6e7ec.png

Rust 没有获得足够的普及度

从我的个人体验来看,Rust 确实比 C++ 更优秀。它有更好的工具(cargo)、更完善的库生态系统(crates.io),还去掉了很多繁琐无用的东西(没有面向对象,没有异常处理,内存管理更严格等),并要求你以正确的方式做事。

但 Rust 的好,就像 Betamax 之于 VHS、Mastodon 之于 Twitter、Dvorak 键盘之于 QWERTY、世界语之于英语,以及 Lua 之于 JavaScript 一样:在通信技术中,采用率和关键用户群占了 90% 的比重,剩下的 10% 才是技术细节,最多也只是各抒己见。而编程语言是一种沟通技术,是一种向其他开发者传达想法的工具。

Rust 的问题在于,它没有获得足够的普及度——说实话,我觉得它永远也不会有。最近,Linus Torvalds 在某处抱怨说,许多掌握 C 语言的“老古董”根本不愿意学 Rust。对于更高层次的应用(比如 Web 后端),Go 提供了比 Rust 更快的迭代周期,因为它的学习曲线更平缓,编译时间也更短。虽然 Rust 的采用率在上升,但竞争技术也在不断进步(例如:更安全的 C++ 和更强的 lint 工具,JIT 编译的 JavaScript 和 WASM 引擎变得更快),甚至有些技术发展得更快(比如 Go)。

36666596401d5e2092122e2505fac3e5.png

掌握 Rust,对找工作几乎没有帮助?

然后,我们还要面对一个显而易见的事实:掌握 Rust 对找工作几乎没有帮助。大多数要求 Rust 编程技能的工作,都要求在某些专业领域有深厚的知识:如加密货币/区块链、金融交易、机器学习/数据分析、冷门网络协议、网络安全等等。在这些职位上,精通 Rust 最多只是一个“加分项”——我的意思是:如果你被这类岗位录取,绝不是因为你精通 Rust,而是因为你对相关领域有着深入了解。

甚至在 Reddit 里,名为“self.rust”的子版块也凸显了这个问题。我发现在其他编程语言的子版块(例如 Golang、C++)中,招聘信息总是会被置顶。而在 Rust 的子版块中我却很少看到这种情况,就好像“关于 Rust 工作的第一条规则就是不要谈论 Rust 工作”。

有很多技术由于未能获得广泛接受而最终被遗弃,其中很多比 Rust 更具革命性(例如 Lisp、Smalltalk),而我不认为 Rust 能够避免这样的命运。

值得一提的是:编程语言的进步背后往往有大公司的支持。例如,IBM 推动了 FORTRAN,AT&T 推动了 C 语言,微软推动了 MS-Basic 和 C#,Sun 推动了 Java,谷歌推动了 Python,苹果推动了 Objective-C 和 Swift,Web 浏览器推动了 JavaScript,大部分大公司都推动了 C++——然而,我看不到有多少强有力的赞助商在背后支持 Rust,并推动其客户采用。

590ea4dee015139fdc1710b367c886f3.png

网友热议,多数人看好 Rust 的发展

这篇帖子在 Reddit 上引起了广泛热议,其中大多数网友并不认可本文作者的说法:

  • “跟你完全不同,我们在 AWS 的每个新项目都要求使用 Rust,而之前这些项目都是用 C++ 编写的。”

  • “微软也是如此。现在在虚拟机托管节点上运行的所有新服务都必须使用 Rust,这是一项自上而下的规定。”

  • “我不是 Rust 的粉丝,但是...谷歌、微软、亚马逊等公司都在谈论和推动 Rust,从某种意义上说,他们都在使用 Rust,Rust 也确实不错。Rust 虽然是一种新技术,但我相信它有足够的动力达到你所说的普及度。”

  • “没有人能预见未来,但我不同意你对 Rust 的悲观看法,原因有以下几点:首先,有大公司在推动 Rust 的应用,例如谷歌、微软、亚马逊等。甚至连美国政府都建议用内存安全语言(Rust 是主要的替代语言)取代 C 和 C++。其次,C++ 已有近 40 年历史。Rust 甚至还不到 10 岁。采用率的提升需要时间,而且 C++ 一开始也不是很流行。“

那么,你对于这个话题又有什么看法呢?

282042bf561aa332a459103aacf9e8c7.gif

即日起至 12 月底下单「侯捷C++系列精品课程」,学员不仅可以享受侯捷老师精心打造的 C++ 课程,还能获得两份珍贵的学习资料:

 「2024 全球 C++ 与系统软件大会 PPT」,帮助您了解最新的技术趋势;
「现代C++白皮书」中文版,由 C++ 之父与全球C++及系统软件技术大会联合发布,深入解读现代C++的设计理念与实践精髓。

扫码加入CSDN知识分享官,还可以领取“见面礼”福利一份:

### 二维前缀和算法在瓦片图案生成或处理中的应用 #### 定义与基本原理 二维前缀和是一种用于快速求解矩形区域内元素总和的技术。对于给定的一个矩阵 `A`,可以预先计算一个新的矩阵 `prefixSum`,其中每个元素 `(i,j)` 表示从原点 `(0,0)` 到当前坐标的子矩阵内所有数值之和。 通过这种方式,在后续查询任意指定区域内的元素累积值时只需常数时间复杂度 O(1),因为只需要访问四个预处理过的节点即可完成加减运算得出结果[^1]。 #### 应用场景分析 当涉及到像地图服务这样的应用场景时——特别是采用分层切片机制的地图系统(如微软 Bing 地图),这种技术能够显著提升性能效率: - **加速渲染过程**:利用二维前缀和可以在瞬间获取特定范围内的数据汇总信息,从而加快图像合成速度; - **简化碰撞检测逻辑**:游戏开发等领域经常需要用到对象间相互作用判断,借助此方法可迅速定位目标区间并作出响应; - **优化路径规划算法**:无论是最短路还是其他形式的空间搜索问题,都能受益于高效的数据检索能力所带来的优势[^2]。 #### 实现案例展示 下面给出一段 Python 代码片段作为例子说明如何基于上述理论框架构建实际解决方案: ```python def build_prefix_sum(matrix): rows = len(matrix) cols = len(matrix[0]) if matrix else 0 prefix_sum = [[0]*(cols+1) for _ in range(rows+1)] for i in range(1,rows+1): for j in range(1,cols+1): prefix_sum[i][j]=matrix[i-1][j-1]+\ prefix_sum[i-1][j]+ \ prefix_sum[i][j-1]- \ prefix_sum[i-1][j-1] return prefix_sum def query_submatrix_sum(prefix_sum,x1,y1,x2,y2): """Query sum of elements within sub-matrix defined by top-left (x1,y1), bottom-right(x2,y2).""" return prefix_sum[x2+1][y2+1]-prefix_sum[x1][y2+1]-prefix_sum[x2+1][y1]+prefix_sum[x1][y1] # Example usage: input_matrix=[[3,0,1,4],[2,8,7,5],[4,6,9,1]] ps=build_prefix_sum(input_matrix) print(query_submatrix_sum(ps,1,1,2,2)) # Output should be 30 which is the sum inside this area. ```
评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CSDN资讯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值