rust的现状和未来发展

news2024/12/24 20:25:05

rust现状:

Stack Overflow 的开发者调研显示只有 7% 的开发者在使用 Rust,对比 JavaScript、Python 等语言,使用 Rust 的开发者占比并不高;但从 2016 年开始,Rust 每年都是开发者最爱的编程语言。
根据 JetBrains 2021 年的调研报告,出于兴趣或为私人项目选择 Rust 的开发者仍然占大多数,真正用于工作的开发者仅占 16%,而 Go 语言用于工作的开发者比例占到了 61%,差距明显。各种招聘也表明rust岗位少,人才少。而java,go等很多。
为什么叫好不叫座呢? 我觉得大概原因可能有本身rust学习路线陡峭、编译时间长、一些特性不稳定比如异步编程等,以及外部原因比如发展时间不够长市场占用率不高(2015年才出现1.0的稳定版本,2018年才有异步编程)生态不够完善,没有一款杀手级别的应用(比如go乘着微服务的东风有了k8s,java乘着互联网软件的东风写各种软件)。但是我觉的这不影响未来rust的前景,这个行业更新迭代很快,rust很好的特性一定会有用武之地。分析如下:

rust前景
在这里插入图片描述

1、第一层,首先从语言本身来说,难度大,特性多是客观事实,但是这也表示rust是博采众长的,吸收了C,C++等其他语言的精华,当然你可能会说没有必要这么做,每种语言利用自己的特性做自己擅长的事情就可以了。但是这起码说明rust有这种潜力可以完成这些事,并且,rust 2024有一个远景规划叫做扩展授权,也就是让每个用户都可以可靠并且高效的软件, 目前 Rust 官方其实也已经了解到了一些特别是 async 的 Rust 存在一些使用上的问题,并且也非常重视这个事情。所以它 **2024 年的目标主要就是为了让 Rust 更加好用,更加易用,并且能够落地更多的项目。**所以难学,编译速度(一个错误能在编译期间找到成本是最小的)或者什么的并不会影响大局,并且我感觉要是学过C++,其实也没有那么难学。

2、第二层,从rust本质来说,是制造可靠且高效的软件,我们都知道这两点都是很重要的。比如说微软70%的安全问题都是内存安全问题,比如说高性能也是很重要的,这涉及到用户体验,品质,成本等诸多问题。现在的语言是无法兼顾两者的,比如C++高性能,但是内存安全问题是很难避免的,全靠经验,而且很多stl库和其他库涉及的内存操作我们并不知晓,具体的内存安全问题可以看前几篇介绍。你出现问题的地方很可能不是第一现场,这样一来debug就很困难了。(如果出现内存安全问题比如内存越界就崩溃,debug还比较容易,可以打印堆栈看看。如果不崩溃的话就很难debug了,可以hook一下malloc,memcpy等涉及内存安全问题的操作测试写一下日志)。rust只需要看一下是不是新增了unsafe模块。
当然,安全还包括线程安全,没有数据竞争。主要靠的是rust一套基础设施以及类型系统来限制程序员写出正确代码。(send,Sync,rc,arc,mutex,rwlock,channel等)rust还提供了异步编程(async,await实现类似于单个线程多个协程的形式提高效率,依靠的是运行时的状态机,具体看前面)
再说高性能,go,java等这种有垃圾回收机制的语言,虽然不容易出现内存安全问题,写起来也简单,但是性能不高(GC有世界暂停的问题)。比如go里面深度优化很困难(编译器不智能没有代码重排导致缓存命中率低,以及没有零成本抽象只有动态分发,零成本抽象就是在不用的时候坚决不增加额外的成本,rust c++都有零成本抽象。比如rust没有运行时只在用到异步才有,而go的协程已经是语言层面的,直接调用,而rust只是封装基本的trait具体实现靠库)在竞争的情况下,性能问题也很重要,仅仅是靠钱堆性能并不是长久之计。
在这里插入图片描述
(比如这是一个 debian 搞的 benchmark game 的一个结果,我选的是一个纯计算的 case 的结果。,为什么 Rust 会比 C 和 C++ 性能还好,其实这也是因为 Rust 它对于程序员的一个要求,因为它的代码的限制更加严格,这就直接导致了编译器可以做更加激进的一些优化。所以它的性能在有部分时候是可以超过 C 和 C++ 的。)

我认为 Rust 非常适合协作,是因为它确实是一门真正工程实践出来的语言。它有非常智能的编译器,有完善的文档,有非常齐全的工具链,以及成熟的包管理。而且最重要的一点,你可以完全信任别人的代码,只需要关注业务逻辑,这个是在 C 和 C++ 甚至在 Go 里面都做不到的。
所以说, 可以兼顾性能和安全和协作,是rust的核心竞争力,其他语言想要深度优化很困难。虽然现在rust没有杀手级别的应用,但是语言就像武器,我们手上有了更加先进的武器,才能在更新迭代很快的互联网战场上打出更多的战术,成为赢家。

3、第三层:社区,市场和生态逐渐完善。
首先,rust有完善的团队和工作组,完整的提案流程。还有活跃的社区。这些(人才)都是rust的活力源泉。
市场来说,已经越来越接收使用rust了。几个重点就是:第一rust基金会的成立(微软,脸书,谷歌,华为等)为rust提供足够的发展支撑;第二就是rust for linux,这个是 Linux 内核至今为止,唯一接受的除了 C 以外语言,应该是相当重量级的一个代表。第三就是被企业接受。如果有用过飞书的企业可以了解一下,飞书所有的逻辑全都是 Rust 编写的。
在这里插入图片描述
(小插曲,为什么C++不能发展成像rust这样,因为历史包袱太重了,要兼容之前各种标准很乱)

一个公司(飞书)如何建立rust生态
建立基础库和一些框架。
基础库大概是像日志、监控、链路追踪、mysql、 redis 、动态配置、 mq 这些属于我们认为非必须的、非常重要的一些基础库。接下来剩下一些非必须的基础库,可能是某一些业务单独的库,就可以发动群众的力量,因为它只要最基础的这些东西。
基于 Axum 的 Web 框架。 Axum 算是 tokio 现在比较火的一个官方的 HTTP 的 Web 框架。RPC 框架,支持了 GRPC 和 thrift,叫做 Volo。第三个,异步的运行时的 Monoio 框架。这个主要是考虑到提供给一些性能非常关键的业务以及基础设施,就是基础架构的服务去使用。它的好处在于它采用 Thread Per Core 模型,这样就可以解决 **Tokio 的很多问题,比如它的 future 必须加 Sync 的一个问题。因为 thread per core 的情况之下,它能保证一个 task 一定在一个线程中被运行,这样很多时候就不需要 send 加 sync 的约束,可以直接用 TLS( thread local storage )或者其他的这些技术,以及一些无锁的技术去编程,这可以很大程度上提高性能。**第二个就是它采用了 Linux 最新发布的 io_uring 技术去做 IO 层 ,如果有对于性能要求非常高的同学可以去了解一下。

落地的一些成果。首先是有一个 proxy 类的业务,它的 CPU 的占用从大概 630% 降低到了380%,几乎是提升了一倍。第二个就是它的memory,也就是它的内存占用大概从 9GB 降到了 2GB。可以节省几百万的成本。

4、降本增效的历史机遇。现在其实大家都对底层技术越来越关注,而 Rust 它的掌控力非常的强,所以在底层技术领域它是一个非常非常趁手的工具。而且现在 Rust 关注度足够高,社区也是在快速发展的过程当中。

(什么是docekr,k8s)
Docker和容器技术为什么会这么火爆?说白了,就是因为它“轻”
在容器技术之前,业界的网红是虚拟机。虚拟机技术的代表,是VMWare和OpenStack。而Docker这样的容器技术,也是虚拟化技术,属于轻量级的虚拟化。虚拟机虽然可以隔离出很多“子电脑”,但占用空间更大,启动更慢,不易迁移,虚拟机软件可能还要花钱(例如VMWare)。而容器技术恰好没有这些缺点。它不需要虚拟出整个操作系统,只需要虚拟一个小规模的环境(类似“沙箱”)。

在这里插入图片描述

想要搞懂Docker,其实看它的两句口号就行。搭建、发送、运行”,三板斧。
Docker的第二句口号就是:“Build once,Run anywhere(搭建一次,到处能用)”。
Docker技术的三大核心概念,分别是:
镜像(Image)
容器(Container)
仓库(Repository)
我刚才例子里面,那个放在包里的“镜像”,就是Docker镜像。而我的背包,就是Docker仓库。我在空地上,用魔法造好的房子,就是一个Docker容器。
我的理解,仓库里面都是各种容器的镜像,要用的时候,就拉取容器的镜像,而镜像是最基本的环境,里面各种动态参数比如库等自己添加, 实践中比如要用A容器运行两个项目,但是库有冲突,就可以建两个镜像,每个运行一个项目就不会冲突了。

就在Docker容器技术被炒得热火朝天之时,大家发现,如果想要将Docker应用于具体的业务实现,是存在困难的——编排、管理和调度等各个方面,都不容易。于是,人们迫切需要一套管理系统,对Docker及容器进行更高级更灵活的管理。而且随着云计算的发展,云端最大的挑战**,容器在漂移**。在此业务驱动下,k8s问世,提出了一套全新的基于容器技术的分布式架构领先方案,在整个容器技术领域的发展是一个重大突破与创新。
就在这个时候,K8S出现了。
K8S,就是基于容器的集群管理平台,它的全称,是kubernetes。

一个K8S系统,通常称为一个K8S集群(Cluster)。
这个集群主要包括两个部分:
一个Master节点(主节点)
一群Node节点(计算节点)
一看就明白:Master节点主要还是负责管理和控制对外提供接口。Node节点是工作负载节点,里面是具体的容器(包括docker,日志系统,pod,pod是一个进程包含的若干容器,以及更高层的service提供一组pod)。
其实可以看出来,就是更好地管理容器,通过容器抽象为pod进程需要的容器集合到service一组pod。

从几十年前的1G,到现在的4G,再到将来的5G,移动通信发生了翻天覆地的变化,核心网亦是如此。
但是,如果你仔细洞察这些变化,会发现,所谓的核心网,其实本质上并没有发生改变,无非就是很多的服务器而已。不同的核心网网元,就是不同的服务器,不同的计算节点。
变化的,是这些“服务器”的形态和接口:形态,从机柜单板,变成机柜刀片,从机柜刀片,变成X86通用刀片服务器;接口,从中继线缆,变成网线,从网线,变成光纤。
既然是服务器,那么就势必会和IT云计算一样,走上虚拟化的道路。毕竟,虚拟化有太多的优势,例如前文所说的低成本、高利用率、充分灵活、动态调度,等等。
前几年,大家以为虚拟机是核心网的终极形态。目前看来,更有可能是容器化很可能只需要一台服务器,创建十几个容器,用不同的容器,来分别运行不同网元的服务程序。这些容器,随时可以创建,也可以随时销毁。还能够在不停机的情况下,随意变大,随意变小,随意变强,随意变弱,在性能和功耗之间动态平衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/455159.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SSH远程访问及控制

文章目录 1.SSH远程管理1.1 SSH的概述1.2 OpenSSH服务器1.3 sshd_ config常用选项设置1.4 SSH端口、配置文件 2.配置OpenSSH服务端2.1 更改端口号2.2 用户登录控制 3.登录验证方式3.1 密码验证3.2 密钥对验证3.3 配置密钥对验证 5.TCP Wrappers访问控制5.1 TCPWrappers机制的基…

第37讲:Python if-elif-else流程控制语句核心概念以及案例演示

文章目录 1.流程控制的概念2.Python中代码块的相关注意事项3.if流程控制语句的语法格式4.if流程控制的简单使用4.1.单分支的if流程控制语句4.2.加else语句的if流程控制4.3.多分支的if流程控制4.4.多分支if代码优化 5.对象的布尔值6.if-else条件表达式6.1.if-else条件表达式语法…

String的那些事儿

String作为我们最常用的Java类之一,在日常开发过程中充当着重要角色?那么大家真的了解String吗?让我们一起看看下面的问题: String内存结构?对象存储在堆上还是栈上?一个String有多长?占内存多…

享元设计模式解读

目录 问题引进 展示网站项目需求 传统方案解决网站展现项目 传统方案解决网站展现项目-问题分析 享元模式基本介绍 基本介绍 享元模式的原理类图 对类图的说明 内部状态和外部状态 享元模式解决网站展现项目 应用实例要求 思路分析和图解(类图) 代码实现 享元模式…

创建一个 vue 3 项目

vue create projectNameVue CLI v5.0.8 ? Please pick a preset: ❯ Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint)Manually select featuresbabel : ES2015 and beyond。Babel 默认使用一组 ES2015 语法转换器,允许你使用新的语法&#xff0c…

vue2数据响应式原理(6) 处理数组特殊遍历

打开一直在写的案例 然后 找到src下的 dataResp.js 这里 我们Observer中 数数组和对象还是要分开处理 因为他们还是有所不同 我们修改 Observer 类代码如下 class Observer{constructor(value) {//相当于 给拿到的对象 其中的__ob__绑定 值为thsi,在类中用this 表示取实例本…

数据结构入门(C语言版)一篇文章教会你手撕八大排序

八大排序 排序的概念常见的排序算法排序算法的实现一、直接插入排序二、希尔排序三、选择排序四、堆排序五、冒泡排序六、快速排序1.递归写法①三位取中函数②hoare版本③挖坑法④前后指针版本⑥快排主函数 2.非递归写法 七、归并排序1.递归写法2.非递归写法 八、非比较排序1.基…

倾斜摄影三维模型顶层合并技术及其实现方法

倾斜摄影三维模型顶层合并技术及其实现方法 倾斜摄影三维模型由于数据量大、结构复杂,常常需要进行顶层合并,以便更好地应用到城市规划、土地管理和文化遗产保护等领域。本文将介绍倾斜摄影三维模型顶层合并技术及其实现方法。 1、什么是顶层合并 倾斜…

【安全与风险】普适计算中的安全与隐私研究

普适计算中的安全与隐私研究 日常生活的数字化无处不在的计算对移动社交媒体的影响讨论更便宜的存储和更强大的处理的影响移动和普适计算的影响有时候,惊奇另一个例子攻击模型贡献是什么?智能家居的案例研究本文的主要内容如何自学? 日常生活的数字化 …

第三章 使用 Maven:命令行环境

第一节 实验一:根据坐标创建 Maven 工程 Maven 核心概念:坐标 ①数学中的坐标 使用 x、y、z 三个**『向量』作为空间的坐标系,可以在『空间』中唯一的定位到一个『点』**。 ②Maven中的坐标 [1]向量说明 使用三个**『向量』在『Maven的仓…

不知道今天吃什么?今天吃什么 API 告诉你

引言 在现代社会,由于生活节奏加快和繁忙的工作日程,越来越多的人感到选择今天吃什么餐点是一项繁琐且令人困扰的任务。为了解决这个问题,许多人会求助于在线菜谱和美食博客等渠道,但是这些选项通常是繁琐和耗时的。 幸运的是&a…

聚观早报 | 马斯克称星舰1-2个月内准备再发射;推特撤下官媒标签

今日要闻:马斯克称星舰1-2个月内准备再发射;推特撤下「官媒」标签;Pixel Fold 折叠机型首次被泄露;蔚来员工曝半年加班500小时;苹果Mac Pro和Mac Studio无缘WWDC 马斯克称星舰1-2个月内准备再发射 美国当地时间 4 月 …

关于GNSS技术介绍(二)

在上期文章中,我们介绍了GNSS技术的发展历程、原理,并对不同类型的定位技术进行了介绍,在本期文章中我们将继续讨论GNSS的优点与应用及其测试方法和解决方案。 GNSS的优点与应用 目前GNSS技术已经成为日常生活不可或缺的一部分,几…

自定义RecyclerView.LayoutManager实现类实现卡片层叠布局的列表效果

一.前言 先看效果(大佬们请忽略水印): 卡片层叠列表的实现效果已经发布成插件,集成地址:implementation ‘com.github.MrFishC:YcrCardLayoutHepler:v1.1’; 先讲解如何快速实现,然后再来讲解…

小程序开发费用估算:如何控制项目成本?

在当今数字化的时代,小程序已经成为了很多企业和个人开展业务的重要手段。小程序的开发需要耗费时间和资源,因此在项目初期,了解预计的开发费用是非常重要的。本文将详细介绍如何估算小程序开发费用以及如何控制项目成本。 小程序开发费用 …

2023年重庆经济发展研究报告

第一章 发展概况 1.1 地理和人口发展概况 重庆(简称“渝”)位于中国西南地区,是中国四个直辖市之一,地处长江中上游,横跨东经10517到11011,北纬2810到3213之间。重庆市地势复杂,地形多山&…

风光场景削减及源荷不确定性的虚拟电厂随机优化调度研究(Matlab代码实现)

💥 💥 💞 💞 欢迎来到本博客 ❤️ ❤️ 💥 💥 🏆 博主优势: 🌞 🌞 🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 …

Ubuntu16.04配置使用robosense雷达18版本的rsview软件记录

目录 依赖安装boost安装下载源码解压编译安装更新一下系统的动态链接库 libpng16-16安装 rsview运行下载运行具体操作可以看doc文件夹内的说明文件 参考文章 依赖安装 boost安装 下载源码 boost1.65官方下载地址 解压 进入下载文件所在的文件夹 tar -zxvf boost_1_65_1.t…

托福高频真词List05 // 附托福TPO阅读真题

目录 4月23日单词 生词 熟词 4月24日真题 4月23日单词 生词 sparsethinly distributedadj 稀疏的sparselythinlyadv 稀疏地congestion / kənˈdʒestʃən / overcrowdingn 拥挤continuallyregularlyadv 持续的eradicateeliminatev 消除facilitatemake easiereasev 使..…

M2下通过docker安装sqlserver

背景:要做这一个需求,将txt文件格式化以后,入库到sqlserver中,没有测试环境,只能自己在本地搭建一个sqlserver的服务器 前提:安装好docker 第一步:在终端下查找sqlserver的镜像文件 我们可以选…