Rust 近乎宗教般信仰的案例

2023-11-07

Rust 近乎宗教般信仰的案例 亚历山大·西多罗夫

众所周知,Rust 社区对 Rust 非常热情,有些人甚至责怪我们偶尔表现得像一个邪教。

恐怕我不会打消这个印象。因为在这篇文章将证明 Rust 使您成为一个更好的工程师、更好的管理者和更好的人。

作者背景

我的背景是十多年的 C# 开发。从表面上看,在 Rust 之前,我有一个远大的职业生涯:

我一直在领导团队完成成功的项目,并在 .NET 的最前沿构建软件。

但在内心深处,我从未满足于我一直在做的事情。我一直认为这是冒名顶替者综合症,但不知何故,这种感觉在我切换到 Rust 后消失了。

感觉像魔术一样,对编码冷淡的状态消失了,我重新发现了我对软件开发的热爱。

经过长时间的自我反省,我发现了情绪变化背后的三个关键原因。

Rust之美

关于 Rust 与其他语言相比的技术方面的文章已经绰绰有余了,我不想重复相同的论点。

但是,所有这些绝妙的想法巧妙地组合在一起,恰到好处地让我再次对软件开发感到兴奋。

考虑到 Rust 从工程师那里得到的爱,我绝对不是唯一一个。

开源社区

与其他不太集中的生态系统相比,.NET 中的开源社区一直感觉非常不活跃。

公平地说,自从Microsoft开始在.NET Core上工作并变得更加开源友好以来,在过去的5 +年中有很多改进,但是浪费了很多时间。

相比之下,Rust 中的开源社区是如此健康和充满活力,你自然希望成为其中的一员。

我们正在开发开源交易基础设施,并计划尽可能多地开源我们的工作。

项目类型

随着 Rust 越来越主流,这个论点可能会被淡化,但现在 Rust 中的项目质量非常出色:许多雄心勃勃的想法正在专门在 Rust 中实现。

迁移

我当时经营着一家金融科技公司。事情进展顺利,但我们正在寻找进一步发展的方法。

考虑到我们正在开发高负载、延迟敏感的软件,在 Rust 中做一些严肃的事情的想法有明显的长期好处。

此外,这会让开发人员感到高兴,因为我们有越来越多的对 Rust 充满好奇的工程师。

大约两年前,一旦async/await 支持稳定下来,我们就开始构建第一个 Rust 团队。

最初我们没有计划将其作为从 C# 到 Rust 的完整迁移,但是,一旦我们开始朝着这个方向前进,就没有办法阻止它。

越来越多的开发人员开始要求加入 Rust 团队。告诉他们“不”,从而使他们失去动力绝对不是最好的选择。因此,我们承诺逐步将绝大多数软件迁移到 Rust。

现在可能很难意识到这一点,因为 Rust 似乎越来越主流,但两年前,从经营公司的角度来看,这是一个非常可怕的决定。

从一个你一直在工作的成熟生态系统的舒适区,转移到一个你经验很少的年轻生态系统,是很艰难的。

但悲惨的失败不是一种选择,所以我们继续前进。在最初的几个月里,我们看到了各种区块的惊人快速改进:我们对 Rust 的理解一天比一天好,Rust 生态系统正在迅速成熟。

我们迁移到 Rust 的激进程度肯定有赌博的成分。但是,幸运的是,大约半年后,就在我们开始适应新的生态系统时,Rust 起飞了。

从那时起,我们遇到的唯一问题是人才奇缺!

但即使是这个问题最终对我们来说也是一件好事。当我们用主流语言招聘时,我们一直希望得到一位经验丰富的工程师,他此时此地都非常适合。

回想起来,我们的招聘过程自私和近乎傲慢。由于我们刚开始的时候基本上没有经验丰富的 Rust 开发人员,这促使我们更加开放,投资于人,

提供机会并自己培养人才

不仅能改善我们的团队文化,使我们的团队更加平衡。即使现在不再严重缺乏 Rust 开发人员,我们也遵循这种方法。

当我与其他公司的同事讨论我们内部的 Rust 革命时,我最常被问到的问题是 Rust 团队是否比 C# 团队慢。

这是一个非常普遍和合理的问题。因为 Rust 是一种较低级别的语言,您必须手动执行 C# 等高级语言自动为您执行的操作。

但是我们没有遇到开发人员性能的任何显着下降。考虑到现代 C# 是一种非常好的语言,这更令人惊讶。

虽然我确实对C#有疑问,但现在 C# 可以说是复杂后端软件的最佳编程语言之一:

它相当快,跨平台,并且具有清晰的语法和现代功能。

我没有看到太多的竞争:

使用 Python 在生产中会很慢并且由于类型系统不佳而难以维护;

C/C++ 会降低开发速度并经常出现内存泄漏,即使是我们中最好的人也容易出现!

Go 在其舒适区之外往往是一个糟糕的选择(微服务等)

我唯一可以证明比较更好的语言是 Kotlin,但前提是你真的喜欢 Java 生态系统。

C#肯定做对了很多事情。它提出了一个问题,为什么在转向较低级别的语言后,开发过程没有减慢。

这是需要篇幅更长才能详细解释的文章,解释了为什么会这样。补充一点,当你在开发真正复杂的软件时,工程师很容易需要长达一年的时间才能熟悉代码库。

因此,重要的是人才保留,这主要基于工程师的满意度,这是 Rust 闪耀的另一个领域。

结论

与其深入技术细节,更适合从工程师和整个公司的角度分享一些较少有争论的、不太明显的转向 Rust 的话题。

总的来说,迁移到 Rust 是一次非常积极的体验:

一切都以绝对完美的方式结合在一起。

虽然 Rust 显然不是所有这些进步背后的唯一原因,但它绝对是其中的关键因素。

希望这篇文章的内容没有冒犯任何喜欢其他语言的人。虽然我们找到了对我们有用的方法,但没有一种永远通用且正确的方法来编写软件:

魔鬼在细节中,并且有各种语言的位置。

补充:

Async-Await 范式是编程发展中向前迈出的一大步。它不仅使您的异步代码“看起来”同步,增强了可读性,而且还提高了应用程序的响应能力和性能,特别是对于 IO 绑定用例。

但是,考虑到它在不同语言和框架中的处理方式,一开始可能有点令人生畏!

在我进一步讨论之前,我假设我们对 Rust 中的 Async-Await 有基本的了解,并且对 tokio、executors、futures 和任务等运行时有所了解。

什么是async/await 异步/等待? async/await 是 Rust 编程语言中一个强大的功能,它使开发人员能够编写高效并发运行的异步代码。

它是一种允许函数以非阻塞方式执行的技术,释放执行的主线程以在等待异步函数完成时执行其他任务。

这样,程序可以在等待异步函数的结果的同时继续执行其他操作。在 Rust 中,异步函数可以与 await 关键字结合使用,以在特定点暂停和恢复函数的执行。

此功能在处理 I/O 绑定或 CPU 密集型任务时特别有用,因为它允许程序在等待异步功能完成时执行其他任务。

为什么将Tokio与Async/Await一起使用?

虽然 Rust 的特性提供了一种编写异步代码的方法,但它不提供运行这些函数的执行器。这就是Tokio的用武之地。

Tokio 是 Rust 的一个流行的异步运行时,它提供了一个执行器和其他工具来帮助编写异步代码。

Tokio 的执行器提供了一种在不阻塞主线程的情况下有效地同时运行多个任务的方法。

它使用一种称为“反应器模式”的技术来管理 I/O 事件和计划任务。这使Tokio 能够以较低的开销有效地管理数千个任务。

信息论入门非常有帮助的书籍推荐如下:

  1. 《信息论、推理与学习算法》 - David J. C. MacKay 权威的信息论教材,内容全面,数学严谨,非常适合作为信息论的入门学习书籍。

  2. 《信息论基础》 - Thomas M. Cover 和 Joy A. Thomas 信息论的典范教材,内容从基础到进阶全面介绍信息论,理论推导严谨。

  3. 《信息论与可靠通信》 - Robert G. Gallager 更侧重于通信领域信息论内容,书写简洁明了,示例丰富形象生动。

  4. 《信息论与网络编码》 - Raymond W. Yeung 对各种网络编码做了详细阐述,内容新颖,对网络信息论感兴趣的人很适合。

  5. 《深入理解信息论》 - 张贤达 国人编著的信息论书籍,理论推导严谨,内容通俗易懂,对信息论入门很有帮助。

以上都是信息论领域非常经典和优质的著作,对理解和学习信息论理论非常有帮助。可以根据个人喜好和学习阶段选择合适的书籍进行学习。

本文由 mdnice 多平台发布

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rust 近乎宗教般信仰的案例 的相关文章

  • 你不知道的JavaScript-----强制类型转换

    目录 值类型转换 抽象值的操作 JSON 字符串化 ToNumber 非数字值到数字值 Number value ToBoolean 转换为布尔类型 Boolean value 强制类型转换 字符串和数字之间的显式强制类型转换 奇特的 运算
  • Eclipse/MyEclipse闪退之后打不开工作空间的问题解决

    Eclipse MyEclipse闪退之后打不开工作空间的问题解决 在开发过程中偶尔会出现Eclipse MyEclipse闪退之后再启动时打不开工作空间的情况 可以这样解决 1 找到工作空间的目录 例如 E workspace 2 再进入
  • code review

    方法有多种 目前最被认可或运用的方法莫过于CodeReview活动了 那么 CodeReview到底能给团队带来什么 什么样的团队需要进行CodeReview活动 如何有效开展CodeReview活动 用哪种方式会比较好呢 笔者为了接地气地

随机推荐

  • 工业物联网的巨控GRM530无线模块与西门子PLC通信,远程上下载程序

    西门子逆天技术出来了 西门子smart200PLC的数据无线远程传输到上位机 手机APP 概述 随着移动互联网的普及 越来越多的用户希望通过智能手机APP监控工业现场PLC的各种状态 报警等数据 通过手机APP来实现减少人力的投入 还可以实
  • vue中属性key的作用(了解diff),为什么不建议index作为key

    1 官方文档有关key的说明 key 的特殊 attribute 主要用在 Vue 的虚拟 DOM 算法 在新旧 nodes 对比时辨识 VNodes 如果不使用 key Vue 会使用一种最大限度减少动态元素并且尽可能的尝试就地修改 复用
  • 一篇搞定,Kettle详细教程

    文章目录 第一章 Kettle概述 1 1 Kettle发展历程 1 2 Kettle简介 1 3 Kettle相关俗语 1 4 Kettle设计与组成 1 5 Kettle功能模块 1 6 Kettle的执行 Transformation
  • OPT3001光强传感器驱动实现(STM32F407)

    上面是我的微信和QQ群 欢迎新朋友的加入 写了个光强传感器的代码 产品特点 精密光学滤波以匹配人眼 拒绝IR gt 99 典型值 自动满量程设定功能简化了软件 并确保正确的配置 0 01勒克斯至83K勒克斯 23位有效动态范围 自动增益范围
  • 批量汇总nmon结果文件Excel数据

    1 原由 在使用nmon监控服务器资源以后 因为服务器较多 生成了几十个结果文件 现在需要统计每个文件中cpu 内存 disk等平均值 最大值信息 太多表了 就写了个Python脚本 以后可能用的上 先记录一下 nmon生成的Excel中
  • Xml外部实体注入漏洞(XXE)与防护

    Xml外部实体注入 XXE 除了json外 xml也是一种常用的数据传输格式 对xml的解析有以下几种常用的方式 DOM SAX JDOM DOM4J StAX等 然而这几种解析方式都可能会出现外部实体注入漏洞 如微信支付的回调就出现过 见
  • 电脑启机时出\windows\system32\drivers\bootsafe64.sys什么

    开机时出现如下故障解决办法 用老毛桃制作PE启动盘 把C WINDOWS system32 drivers下bootsafe64 sys删除还有一个kavbootc sys删除 重启即可 此问题就出在金山的产品给系统加入的这个文件 它不知出
  • 注释转换(C的多行注释 转换为C++的单行注释)

    目录 题目描述 AnnotationConvert h 状态划分 AnnotationConvert c 处理每个字符 main c 测试代码 Makefile 编译 test in 待测试数据 test out 输出 题目描述 把C的多行
  • 2019年安徽省大数据与人工智能应用赛总结---本科组

    前言 2019年安徽省大数据与人工智能决赛于10月13日在安徽省职业经济管理学院举办 现场赛共计90支队伍 经过4个小时的激烈追逐 我们组获得了22名的不错成绩 荣获省级二等奖 严格意义上说 这是我第一次参加省级比赛 因为缺少比赛经验 所以
  • mysql Initial client character set can be forced via the ‘characterEncoding‘ property.问题

    是数据库版本不一致导致的问题 1查看本地是数据库版本 删除旧包 2在配置文件pom xml文件中修改为对应的版本 3 更新为新的数据连接包 参考https blog csdn net qq 37077976 article details
  • 业务敏捷 SOA从概念到实践迈出的一大步

    2007年5月30号 在北京西四环的世纪金源大酒店宴会厅里 一场关于中国SOA最佳实践的技术大会在这里举行 从Gartner首度提出SOA这个概念到现在已经超过了十个年头 在这十年发展的演变中 SOA的内涵发生了多次的变化 从ESB Web
  • layui使用初步入门

    目录 布局元素 字体图标 按钮 表单 数据表格 弹出层 layui官方地址 layui是模块化框架 这表示你想实现它的某个功能 可以选择不全部引入 只要引入一个一个相关的模块文件即可 引入的方式有两种 一种是将之当成独立组件引入 如 另一种
  • 面试准备1

    上海银行 目录 1 java io 字节流 字符流 使用场景 你了解java的流吗 怎么用流打开一个大文件 2 java序列化 什么时候会用到 必问 3 java集合类 哪些是线程安全的 为什么它们是线程安全的 4 String a a 创
  • leetcode 150-200题-java版(按顺序,不分专题)

    leetcode 150 200题 java版 152 乘积最大子数组 160 相交链表 167 两数之和 输入有序数组 168 Excel表列名称 169 多数元素 172 阶乘后的0 174 地下城游戏 188 买卖股票的最佳时机 4
  • 在学校,你需要知道的8种思维导图的类型及其工作方式

    思维导图是一种学习方法 它可以将学习者的思维和抽象的思想以具体的视觉形象化 具体来说 思维导图可以帮助学习者有效地组织他们的想法和信息 此外 学习者可以更容易地将他们的信息碎片连接起来 这可以提高他们的理解能力 这可以提高他们的理解能力 通
  • Springboot系列(二十二):如何纯文本转成.csv格式文件?

    一 前言 不知道大家有咩有遇到这么个需求 给你一长串文本 要求你能导成excel格式展示数据 一时间我陷入了沉思 如果要常规转excel 最明显的一点就是固定表头名 然而并不是 这表头名是动态给的 连字段名都不相同 这可如何是好 我突然想到
  • error @achrinza/node-ipc@9.2.2: The engine “node“ is incompatible with this module. Expected version

    解决方法三 看报错信息 版本不兼容 这个最好解决了 输入这个命令 该命令是自动补充兼容所报的错误 yarn config set ignore engines true 成功 可以
  • gtest在使用中出现错误:error: undefined reference to ‘testing::internal::EqFailure(char const*, char const*,

    如题 业务需要编写了一个C的API库 顺带写了一个gtest测试用例 但是编译的时候出现题目中的错误 折腾了半天以为是gtest的问题 结果发现是自己CMakelist txt的问题 因为Gtest支持的最低版本是Cxx 14版本 所以只要
  • TCP/IP协议二十一:HTTPS/SSL协议详解(1)加密原理

    TCP IP协议二十一 HTTPS SSL协议详解 1 加密原理 1 加密历史 对称加密算法 1 1 加密 1 2 密钥 1 3 对称加密算法 2 非对称加密算法 2 1 RSA算法 2 1 1 RSA 非对称加密原理 2 1 2 RSA通
  • Rust 近乎宗教般信仰的案例

    Rust 近乎宗教般信仰的案例 亚历山大 西多罗夫 众所周知 Rust 社区对 Rust 非常热情 有些人甚至责怪我们偶尔表现得像一个邪教 恐怕我不会打消这个印象 因为在这篇文章将证明 Rust 使您成为一个更好的工程师 更好的管理者和更好