rust的现状和未来发展

2023-05-16

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云计算一样,走上虚拟化的道路。毕竟,虚拟化有太多的优势,例如前文所说的低成本、高利用率、充分灵活、动态调度,等等。
前几年,大家以为虚拟机是核心网的终极形态。目前看来,更有可能是容器化很可能只需要一台服务器,创建十几个容器,用不同的容器,来分别运行不同网元的服务程序。这些容器,随时可以创建,也可以随时销毁。还能够在不停机的情况下,随意变大,随意变小,随意变强,随意变弱,在性能和功耗之间动态平衡。

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

rust的现状和未来发展 的相关文章

  • NVIDIA CUDA安装失败解决方法

    CUDA安装失败原因可能与显卡驱动安装有关 xff0c 之前安装的显卡驱动影响了cuda安装 xff0c 建议就是清除原本的显卡驱动安装 xff0c 自动重启 xff0c 再重新安装cuda 下载显卡驱动安装工具解压 百度网盘链接 xff1
  • Jenkins在Linux环境下的安装与配置,包含遇到的问题以及解决方法

    一 Jenkins简介 Jenkins是一个开源软件项目 xff0c 是基于Java开发的一种持续集成 xff08 CI xff09 工具 xff0c 用于解决持续重复的部署 监控工作 xff1b 它一个开放易用的软件平台 xff0c 大大
  • win10添加ubuntu的网络硬盘,实现远程操作ubuntu硬盘

    1 前言 在工作时候经常需要在本地windows10和另外一台ubuntu上实现数据共享 xff0c 如果使用远程工具会非常麻烦 xff0c 需要收发文件 既然在同一个局域网情况下 xff0c 那么有没有办法实现远程操作硬盘呢 xff0c
  • (1)数据包嗅探和欺骗-SEED Ubuntu 20.04

    数据包嗅探和欺骗 网络安全课程实验一 在做的时候参考了很多网上主要就是CSDN上的教程 xff08 感觉最近还是很忙 xff0c 所以等我有空想起来再来写这个教程 xff09 xff08 下面放一下我的实验报告部分 xff0c 里面有流程
  • 实验一的命令代码

    实验一 dcbuild 下载容器所需的image镜像 xff0c 如果已经有了 xff0c 就跳过 dcup 即docker compose up 安装容器并启动 cd Labsetup1 1 1 vi test1 py 写一个python
  • 安装Proxmox VE系统报错

    安装Proxmox VE系统 报错内容如下 xff1a Waiting for dev to be fully populated 8 344009 hdaudio hdaudioCoD2 Unable tobind the codecdo
  • PUT和DELETE部署在内网服务器后 外网无法请求的问题

    PUT和DELETE部署在内网服务器后 外网无法请求的问题 这问题困扰我好几天 xff0c 本身就不是搞运维的 xff0c 且实习时长 俩年半 半年的小辣鸡 xff0c 被赶鸭子上架 系统部署在甲方的内网服务器里 xff0c 然后他们通过V
  • C语言冒泡排序法,用函数形式实现。

    冒泡排序法 释疑 xff1a 冒泡排序法是将数组中的元素依次从小到大 xff08 Also 从大到小 xff09 进行排序下来 请看如下操作 xff01 共有4个数 xff0c 如 2 xff0c 4 xff0c 1 xff0c 3 进行N
  • Gorm之下载安装gorm.io/driver/sqlite依赖

    文章目录 Gorm之下载安装gorm io driver sqlite依赖1 会出错2 下载MinGW3 配置MinGW环境变量4 检测是否配置成功5 再次下载依赖即可成功 Gorm之下载安装gorm io driver sqlite依赖
  • Sheep to sheep

    背景 最近被这只羊折腾的够呛 xff0c 不管怎样就是过不了 xff0c 最终幡然醒悟 xff0c 还是得借助点外力 xff0c 上点技术手段才行 在网上找一下可行的方法 xff0c 看到比较简单的方法有两种 xff1a 抓包 xff1b
  • CentOS8.4 OpenLDAP服务配置

    目录 OpenLDAP简介 基本操作 配置文件 服务端配置 配置下载证书 生成数据库并设置权限 调用模块 定义访问和认证信息 定义目录结构 配置用户认证结构 测试 NFS服务配置 客户端配置 测试 挂载用户目录 相关知识 注意事项 环境 服
  • C语言排序算法之选择排序

    文章目录 一 选择排序的概述二 选择排序算法代码详解 xff08 1 xff09 算法分析 xff08 2 xff09 选择排序算法代码详解 三 总代码 一 选择排序的概述 选择排序 xff08 Selection sort xff09 是
  • CodeForces - 501B Misha and Changing Handles(Map)

    题目大意 xff1a 就是讲在codeforces网站上 xff0c 由于一个黑客 xff0c 大家都可以随便改名字了 xff0c 有的人就改了一次又一次 xff0c xff08 当然也有的人就只改一次 xff09 然后题目问你一共有多少个
  • LINUX文件编程之——open(文件打开及创建)

    文件的打开及创建 C语言打开及创建文件需要用到open 函数 xff0c open函数在三个头文件当中 xff1a open函数 函数原型 xff1a open函数的返回值是一个小的 非负整数 xff0c 这个整数是被open打开的文件描述
  • linux文件编程之——write、read、lseek、close(文件的写、读、光标移动,关闭操作)

    文件的写入 xff08 write xff09 昨天已经学习了文件的打开及创建 xff0c 及使用open函数 xff0c 传递不同的参数可以实现文件的打开及创建 xff0c 并赋予文件的权限 xff0c 今天延续昨天的学习内容 文件的写入
  • 嵌入式笔试——笔试题目

    单选 xff08 15题 xff09 第一题 栈简介 栈由操作系统 xff08 编译器 xff09 自动分配释放 xff0c 用于存放函数的参数值 局部变量等 xff0c 其操作方式类似于数据结构中的栈 堆简介 堆由开发人员分配和释放 xf
  • ARM———第一天

    1 为什么学习ARM xff1f 嵌入式 xff1a 操作硬件的软件 嵌入式系统分两大类 xff1a 1 应用程序 xff0b 硬件 2 应用程序 xff0b 操作系统 xff0b 硬件 ARM是学习嵌入式的入门 xff0c 也是学习系统移
  • ARM———第二天

    1 什么是汇编指令 汇编指令 xff1a 是机器指令的助记符 xff0c 经过编译后会得到一串01010组成的机器码 xff0c 可以由cpu读取执行 伪指令 xff1a 本质上不是指令 xff0c 只是和指令一起写在代码中 xff0c 是
  • LINUX内核

    Linux内核功能 内存管理 操作系统内核功能管理设备实际的物理内存 xff0c 还可以创建和管理虚拟内存 xff08 Swap xff09 xff1b 通过硬盘的存储空间来创建虚拟内存 xff0c 叫内存交换空间 xff08 Swap s
  • man手册各章节的意义

    man手册分成很多section xff0c 使用man时可以指定不同的section来浏览 xff0c 各个section意义如下 xff1a 1 commands 2 system calls 3 library calls 4 spe

随机推荐

  • Dockerfile

    1 Docker 镜像原理 操作系统组成部分 xff1a 进程调度子系统 进程通信子系统 内存管理子系统 设备管理子系统 文件管理子系统 网络通信子系统 作业控制子系统 Linux 文件系统由 bootfs 和 rootfs 两部分组成 b
  • 一、STM32寄存器点亮LED灯

    目录 一 xff1a 硬件介绍 二 xff1a 三步点亮LED灯 三 xff1a 新建工程 四 xff1a 寄存器程序 1 xff1a 使能GPIOC的时钟 2 配置GPIOC13端口为输出模式 xff08 端口配置寄存器 xff09 3
  • 0、Linux虚拟机打印hello world

    Ctrl 43 Alt 43 T 打开终端 xff0c 输入sudo apt get install vim 下载vim 输入sudo apt get install gcc xff0c 下载gcc 下载完成后输入clear 可以清除终端
  • VS2017提示 LNK1104 无法打开文件 kernel32.lib

    在C盘里搜索kernel32 lib的路径 xff0c 然后添加到项目 gt 属性 gt VC 43 43 目录 gt 库目录里去就好了 但不知道为什么 xff0c x64路径下的kernel32就不行
  • 【智能无线小车系列四】树莓派操作系统安装

    对于第一次接触树莓派的人来说 xff0c 初次点亮树莓派的过程总是最为激动人心的 其实它就跟我们刚刚买回来的电脑一样 xff0c 首先需要做的就是安装操作系统 还记得上操作系统课程的提到 xff0c 操作系统是软件和硬件之间的桥梁 xff0
  • 使用c++实现学生成绩管理系统

    学生成绩管理系统 一 前言二 系统介绍头文件 CStudent h 2 源文件 xff08 实现函数 xff09 3 源文件 xff08 测试函数 xff09 4 运行截图 三 总结 一 前言 学生成绩管理系统的设计 xff0c 可以更好地
  • 魔百盒cm311-1a yst 青龙

    Armbian Debian 清华源 tsinghua source 清华源 deb https mirrors tuna tsinghua edu cn debian buster main contrib non free deb sr
  • 手把手教你安装Python3.x

    目录 普通安装下载安装包安装Python设置Python安装包 其他安装参考资料End 普通安装 下载安装包 打开浏览器 进入 Python 官网网站 xff08 https www python org xff09 xff0c 因为网站在
  • 实验二 单片机汇编语言算法实现(排序控制LED灯亮灭)

    这里写目录标题 实验二 汇编语言算法实现实验一 实验目的二 实验内容三 实验结果 实验二 汇编语言算法实现实验 一 实验目的 xff08 1 xff09 掌握汇编语言工程的编写 xff08 2 xff09 对单片机 I O 接口汇编控制有初
  • Centos7—2003下安装mysql8.0.28详细教程

    首先使用xftp上传mysql的linux压缩包 然后使用解压命令tar xvf mysql 8 0 28 1 el7 x86 64 rpm bundle tar 具体步骤如下 严格按照安装顺序安装 切记切记 root 64 localho
  • kali下载安装

    一 前期准备 kali镜像下载地址 xff1a http mirrors ustc edu cn kali images 二 VMware虚拟机配置 1 打开vmware xff0c 点击创建新的虚拟机 2 选择自定义 高级 选项 xff0
  • Linux设置字符界面的字体大小和字体类型

    SourceURL file home windstorm Documents ManjaroLinuxManual SetConsoleFont docx 首先我们进入目录 cd usr share kbd consolefonts 然后
  • anaconda3重新安装后cmd和anaconda都打不开的情况

    之前更新anaconda3时 xff0c 选择的默认安装路径 xff0c 更完后发现电脑上两个anaconda3 xff0c 原来是我第一次安装时和后来更新时选择的路径不一样 xff0c 强迫症的我想删了一个 xff0c 可又害怕出现问题
  • 处理器的大小端及位序

    大端Big Endian xff1a 数据的高字节存储到低位地址中 小端little Endian xff1a 数据的低字节存储到低位地址中 举例说明 xff1a 32位16进制数据为 61 0x12345678 xff0c 大端存储 地址
  • Python之循环语句while

    使用 while 循环 xff0c 只要条件为真 xff0c 我们就可以执行一组语句 场景 1 用户名和密码 反复输入 2 计算1 100 where 条件 要循环执行的代码 1 打印1 xff5e 10之间的数字 2 打印1 50之间能被
  • vue3-devtools安装

    开始使用vue3后 xff0c 发现浏览器上安装的vue devtool不支持vue3 xff0c 但是不翻墙的话无法通过webstore安装 xff0c 所以就只能通过下载源码自行打包来安装 xff0c 折腾了很久 xff0c 记录一下
  • 移动端布局——flex布局下的居中对齐方式(1+X Web前端开发初级 例题)

    题目要求 html代码 lt DOCTYPE html gt lt html gt lt head gt lt title gt 第三题 lt title gt lt meta charset 61 34 utf 8 34 gt lt lt
  • 在redhat8中安装ansible

    文章目录 一 确保有下载软件的仓库二 挂载三 安装 EPEL 源四 下载ansible五 查看是否安装好补充 xff1a 一 确保有下载软件的仓库 如果没有需要写一个 二 挂载 root 64 haha yum repos d mount
  • 【bat批处理】手把手教你批量打开软件、文件、网页等

    bat批处理 打开软件 文件等 0 前言1 start 命令用法1 0 注释1 1 start 命令说明1 2 启动软件1 3 打开文件1 4 打开文件夹1 5 打开网页 2 实战2 0 怎么创建bat批处理文件2 1 打开软件 文件 网页
  • rust的现状和未来发展

    rust现状 Stack Overflow 的开发者调研显示只有 7 的开发者在使用 Rust xff0c 对比 JavaScript Python 等语言 xff0c 使用 Rust 的开发者占比并不高 xff1b 但从 2016 年开始