当前位置: 首页 > news >正文

软件工程师,是时候了解下Rust编程语言了

背景

        2024年年初,美国政府发布了一份网络安全报告,呼吁软件开发人员停止使用容易出现内存安全漏洞的编程语言,比如:C和C++,转而使用内存安全的编程语言。这份报告由美国网络空间总监办公室 (ONCD) 发布,旨在落实美国总统拜登的网络安全战略,目标是“保护网络空间的基石”。

        内存安全指的是程序在访问内存时,能够避免出现错误和漏洞,比如:缓冲区溢出、野指针等。Java由于其运行时错误检测机制,被认为是一种内存安全的语言。然而,C和C++允许直接操作内存地址,并且缺乏边界检查,容易出现内存安全问题。

内存安全的语言

        内存安全的语言包括:Rust、Go、C#、Java等。这些语言在设计和实现上都注重内存安全,以预防常见的内存相关错误,比如:缓冲区溢出、空指针引用等。

        Rust:Rust是一种系统级编程语言,旨在提供内存安全和并发性保证。它使用所有权系统和生命周期规则来确保内存安全,同时保持高性能。Rust特别适用于构建底层系统组件,比如:操作系统、嵌入式系统或网络服务等。

        Go:Go是由Google开发的一种静态类型、编译型语言。它内置了内存安全和并发性支持,通过垃圾回收和goroutines(轻量级线程)简化了并发编程。Go语言适用于构建网络服务、分布式系统和云基础设施等。

        C#:C#是微软开发的一种面向对象的编程语言,具有内存管理和类型安全的特性。它运行在.NET框架上,通过垃圾回收机制自动管理内存,减少了内存泄漏和空指针引用等问题的风险。C#常用于Windows桌面应用、Web应用和游戏开发等。

        Java:Java是一种广泛使用的编程语言,具有跨平台性、内存管理和类型安全的特性。Java通过虚拟机(JVM)和垃圾回收机制来管理内存,使得开发者无需关心内存分配和释放的细节。Java在企业级应用开发、Android应用开发以及大数据处理等领域有着广泛的应用。

        这些内存安全的语言通过不同的机制和技术来确保内存的正确使用,从而减少了因内存错误导致的程序崩溃、数据损坏或安全漏洞等问题。然而,每种语言都有其适用的场景和优缺点,开发者在选择时应根据具体需求和项目特点进行权衡。

Rust的优势

        相较于C#、Java、Go等其他内存安全的语言,Rust具备多个显著的优势,这些优势使其在软件开发领域脱颖而出。

        内存安全:Rust语言的核心设计目标是确保内存安全,它通过所有权系统和借用检查等机制来避免常见的内存错误,比如:空指针和野指针等问题。这种设计使得Rust在编写高性能、安全的并发代码时更加容易。

        并发性能出色:Rust提供了出色的并发性能。它支持零成本抽象,使得并发编程更加高效。此外,Rust的所有权模型、借用模型和生命周期模型等特性也使得编写并发程序更加容易。所有这些,使得Rust成为构建并发和多线程应用的理想选择。

        高性能:Rust能够提供接近C/C++的性能。它能够直接操作底层硬件并消除运行时开销,从而提供出色的执行效率。这使得Rust成为编写高性能应用程序的优选语言,比如:网络服务器、游戏引擎和图形应用程序等。

        生态系统活跃:Rust拥有一个非常活跃的生态系统,其中包括大量的第三方库和工具。这些库和工具覆盖了广泛的开发需求,从基本的数学运算到高级的并发框架,都可在Rust的生态系统中找到。这使得开发者能够更高效地构建复杂的应用程序,而不用重复造轮子。

        函数式编程和面向对象编程的结合:Rust支持函数式编程和面向对象编程,这使得开发者能够根据需要灵活选择编程范式。函数式编程的特性(比如:不可变性和高阶函数)有助于提高代码的可读性和可维护性,而面向对象编程的特性(比如:封装和继承)则有助于构建复杂的软件结构。

        包管理和构建工具完善:Rust提供了良好的包管理和构建工具(比如:Cargo),可以方便地管理项目依赖、进行版本控制和自动化构建。这降低了项目管理的复杂性,大大提高了开发效率。

Rust的所有权系统

        Rust的内存安全特性主要体现在其所有权系统和生命周期管理上,这些机制确保了在程序的执行过程中不会发生内存泄漏、空指针引用或数据竞争等问题。在下面的示例代码中,我们展示了Rust的所有权系统和如何自动管理内存。

fn main() {// 创建一个String类型的变量,Rust会为其分配内存let s = String::from("Hello CSDN");// 将s的所有权传递给另一个变量s2let s2 = s;// 此时s已经失去了对内存的所有权,不能再使用s// 如果取消注释下一行,会导致编译错误// println!("{}", s);// 打印s2的值,它现在拥有之前s的内存println!("{}", s2);// 当s2离开作用域时,Rust会自动释放其内存
}

        在上面的示例代码中,我们创建了一个String类型的变量s,它包含了一个字符串字面量。然后我们将s的所有权转移给了s2。在Rust中,一旦一个变量的所有权被转移,原来的变量就不能再被使用了。如果尝试使用已经失去所有权的变量(比如:取消注释的那一行代码),编译器会报错。

        Rust通过这种方式保证了在任何时候都只有一个所有者可以访问某块内存,从而避免了悬挂指针和双重释放等问题。当s2离开其作用域(main函数的末尾)时,Rust会自动释放s2的内存,不需要程序员显式地调用释放内存的函数。

        这种自动内存管理的特性大大减少了由于手动管理内存而引发的错误,是Rust内存安全特性的一个重要体现。当然,Rust还提供了其他机制,比如:借用检查器和生命周期注解等,来进一步确保内存安全。这些机制共同作用,使得Rust能够在提供高性能的同时,也保证了内存安全。

总结

        Rust是一种系统级编程语言,专注于提供内存安全和并发性,同时保持高性能。它由Mozilla Research领导开发,并得到了全球开发者的广泛支持和采用。如果你也想系统学习Rust语言,可以订阅专栏《30天拿下Rust》。

相关文章:

软件工程师,是时候了解下Rust编程语言了

背景 2024年年初,美国政府发布了一份网络安全报告,呼吁软件开发人员停止使用容易出现内存安全漏洞的编程语言,比如:C和C,转而使用内存安全的编程语言。这份报告由美国网络空间总监办公室 (ONCD) 发布,旨在落…...

SSL---VPN

文章目录 目录 一.SSL-VPN概述 优点 二.SSL协议的工作原理 三.虚拟网关技术 用户认证方式 本地认证 服务器认证: 证书匿名认证 Web代理 Web-link和Web改写 端口转发 网络扩展(允许UDP协议) 总结 一.SSL-VPN概述 SLL VPN是一种基于HTTPS&am…...

Chrome 跨域问题CORS 分析

先叠个甲,有错误,望沟通指正! 文章目录 1.什么是跨域报错2.为什么postman可以,浏览器访问就不行?根本原因是什么?2.1浏览器是依据什么来报错跨域的? 3.常规解决方案的分析方案1.通过代理解决方案2.被请求的B域的服务端开启Access-Control-Allow-Origin返回头的支持方案3.通…...

GPU性能测试中的张量和矩阵运算

正文共:888 字 7 图,预估阅读时间:1 分钟 前面我们使用PyTorch将Tesla M4跑起来之后(成了!Tesla M4Windows 10AnacondaCUDA 11.8cuDNNPython 3.11),一直有个问题,那就是显存容量的问…...

Linux运维_Bash脚本_编译安装FreeRDP-3.3.0

Linux运维_Bash脚本_编译安装FreeRDP-3.3.0 Bash (Bourne Again Shell) 是一个解释器,负责处理 Unix 系统命令行上的命令。它是由 Brian Fox 编写的免费软件,并于 1989 年发布的免费软件,作为 Sh (Bourne Shell) 的替代品。 您可以在 Linux…...

CMake官方教程4--使用表达式生成器

1. 使用表达式生成器产生警告 CMakeList.txt cmake_minimum_required(VERSION 3.15)project(Tutorial VERSION 1.0)add_library(tutorial_compiler_flags INTERFACE) target_compile_features(tutorial_compiler_flags INTERFACE cxx_std_11)set(gcc_like_cxx "$<COM…...

git for windows

记录&#xff0c;git svn混用&#xff0c;检出代码时出错及解决方案&#xff0c; 执行命令&#xff1a; git svn clone svn_project_url 报错&#xff1a; certificate problem.(R)eject,accept (t)emporarily or accept (p)ermanently 解决&#xff1a; 在弹框中 输入P …...

C++实验 面向对象编程

一、实验目的&#xff1a; 掌握类中静态成员的定义方法&#xff0c;初始化方法&#xff0c;使用方法&#xff1b; 掌握类的友元说明方法&#xff0c;理解友元的使用特点 二、实验内容&#xff1a; 1、编写程序&#xff0c;统计某旅馆住宿客人的总数&#xff0c;要求输入客人…...

VC++ 设置网卡接口MTU大小

在 Windows C/C 之中一共有三种方法可以设置网卡的MTU大小。 方法一&#xff1a; SetIpInterfaceEntry 法 static bool SetInterfaceMtu2(int interface_index, int mtu) noexcept{PIP_ADAPTER_ADDRESSES pAddresses NULL;ULONG ulBufLen 0;GetAdaptersAddresses(AF_UNSPEC…...

dpdk-19.11 对向量指令的使用情况分析

不同向量指令识别关键字 __m128i sse uint64x2_t neon __m256i avx2 __m512i avx512 vector altivec dpdk 向量收发包函数 支持 arm neno 向量收发包函数的 pmd 驱动 bnxt hns3 i40e ixgbe mlx5 virtio 支持 sse 向量收发包函数的 pmd 驱动 axgbe hinic fm10k bnxt i40e …...

使用CIP采集欧姆龙EtherNet/IP从入门到精通

本文将会从以下几个方面介绍 1.CIP是什么 2.EtherNet/IP通信是什么 3.CIP通信报文解析 4.使用CIP常用的方法和功能介绍&#xff08;UCMM&#xff09; 5.自己封装了一个类&#xff0c;只要知道标签名称&#xff0c;和数据类型即可读写数据 6.demo展示 1.CIP是什么 CIP通信…...

企业如何高效管理微信里的客户?

对于企业来说&#xff0c;懂得高效管理微信列表的客户是非常重要的一件事&#xff0c;只有把客户管理好了&#xff0c;才能更好地提高客户的满意度和忠诚度&#xff0c;我们的销售业务才能顺利进行。 那么&#xff0c;应该怎样管理才能算是高效管理呢&#xff1f;下面就给大家…...

怎么在windows系统上查看kylinos的md5、sha1、sha256值

背景 当前信创行业正如火如荼进行中,当下载kylinos镜像到windows系统下,如何核对镜像是否有损坏,确保文件不被篡改,需要使用工具计算md5、sha1、sha256、sha512值,并与出库邮件中的md5比对。 QuickHash GUI软件简介 QuickHash GUI是一款开源代码的哈希工具,注意哈希能够…...

Windows中在C#中使用Dapper和Mysql.Data库连接MySQL数据库

Windows中在C#中使用Dapper和Mysql.Data库连接MySQL数据库 在Windows中使用C#连接Mysql数据库比较简单&#xff0c;可以直接使用MySql.Data库&#xff0c;目前最新版本为&#xff1a;8.3.0。 当然也可以结合MySql.Data和Dapper库一起使用&#xff0c;目前Dapper的最新版本为&a…...

大一专科,物联网专业,变态成长偏方!

最近看到一个大一&#xff0c;物联网专业的学生提问&#xff1a; 印象中&#xff0c;物联网专业2011年才有的&#xff0c;正好是我毕业那年。 我大概看过物联网专业要学的内容&#xff0c;总结下来就是&#xff0c;比软件不如计算机&#xff0c;比硬件知识不如电子。 不知道老师…...

MyBatis入门(JDBC规范,MyBatis,连接池,Lombok)【详解】

目录 一、JDBC规范【了解】 1. JDBC介绍 2. JDBC示例 3. JDBC的问题 二、MyBatis入门【重点】 1. Mybatis是什么 2. Mybatis使用步骤 3. Mybatis入门案例 1.创建SpringBoot工程 2.创建Mapper 3.功能测试 三、连接池【了解】 1. 什么是连接池 2. 有哪些数据库连接池…...

Vue3--数据和方法

data 组件的 data 选项是一个函数。Vue 在创建新组件实例的过程中会自动调用此函数。   data选项通常返回一个对象&#xff0c;然后 Vue 会通过响应性系统将其包裹起来&#xff0c;并以 $data 的形式存储在组件实例中。 <!DOCTYPE html> <html lang"en"&g…...

网络编程面试题

一、什么是IP地址 1.IP地址是主机在网路中的唯一标识&#xff0c;&#xff0c;当主机从一个网络切换到另一个网络时&#xff0c;会更改IP地址&#xff0c;同样的IP地址也是路由器进行路由选择的标识 2.IP地址的分类 IPV4&#xff1a;采用4字节无符号整数存储 IPV6&#xff…...

移动端区分点击和长按

为了适配移动端&#xff0c;图片加入touchstart&#xff0c;touchend&#xff0c;并加了 e.preventDefault() 屏蔽默认菜单。 然而突然发现移动端图片的链接无响应了&#xff0c;PC端没问题。 而且功能需要区分点击和长按。 原生js如何判断移动端的tap,dbltap&#xff0c;lo…...

虚拟环境的激活

(此博客仅用于我记录虚拟环境的激活方法) 虚拟环境的激活命令: venv/Scripts/activate 在F:\git repo\Database-Course-Design 这个文件夹中启动命令行 这个文件夹中含有虚拟环境venv 输入命令venv/Scripts/activate&#xff0c;就得到下面的结果: 此时就激活了虚拟环境&…...

GAN训练过程可视化神器对比:GAN Lab和TensorFlow Playground到底怎么选?

GAN训练可视化工具深度评测&#xff1a;从交互设计到教学效果的全面对比 当开发者第一次接触生成对抗网络&#xff08;GAN&#xff09;时&#xff0c;往往会被其复杂的对抗训练机制所困扰。传统的静态图表和数学公式很难直观展示生成器与判别器之间微妙的博弈过程。这正是可视化…...

深入解析Jinja2模板引擎:render与generate函数的实战应用

1. Jinja2模板引擎基础入门 第一次接触Jinja2时&#xff0c;我完全被它的简洁和强大震撼到了。这个由Armin Ronacher开发的模板引擎&#xff0c;最初是为了解决Django模板的局限性而诞生的。经过多年发展&#xff0c;它已经成为Python生态中最受欢迎的模板引擎之一。 安装Jinja…...

Spring Boot 基础学习笔记

Spring Boot 基础学习笔记 一、Spring Boot 概述 1. 定义 Spring Boot 是 Pivotal 团队基于 Spring 框架开发的快速开发脚手架&#xff0c;核心宗旨是简化 Spring 应用的初始化搭建和开发流程&#xff0c;通过「约定优于配置」的思想&#xff0c;大幅减少 XML 配置和繁琐的依…...

HunyuanVideo-Foley成本效益分析:自建服务与使用商用API的对比

HunyuanVideo-Foley成本效益分析&#xff1a;自建服务与使用商用API的对比 1. 引言&#xff1a;音效生成的技术选择困境 在视频制作领域&#xff0c;高质量音效往往能决定作品的最终质感。HunyuanVideo-Foley作为先进的AI音效生成技术&#xff0c;为企业提供了两种主要使用路…...

使用ZLMRTCClient.j实现webRtc流播放

1. 核心播放器组件封装 (WebRTCPlayer.vue)为了在项目中复用播放逻辑&#xff0c;我们首先封装一个 WebRTCPlayer 组件。该组件主要负责&#xff1a;初始化播放器实例&#xff1a;配置 ZLMRTCClient.Endpoint。处理自动播放&#xff1a;解决浏览器禁止带音频自动播放的问题。生…...

Qwen3.5-2B镜像免配置部署:开箱即用WebUI(7860端口)快速上手教程

Qwen3.5-2B镜像免配置部署&#xff1a;开箱即用WebUI&#xff08;7860端口&#xff09;快速上手教程 1. 模型简介 Qwen3.5-2B是通义千问系列中的轻量化多模态基础模型&#xff0c;仅有20亿参数规模&#xff0c;专为低功耗、低门槛部署场景设计。这个版本特别适合在端侧设备和…...

从原理图到实测:手把手打造Ti电量计通讯盒EV2400

1. 为什么需要自制EV2400通讯盒 搞锂电池开发的朋友应该都熟悉Ti的电量计芯片&#xff0c;比如bq系列。这些芯片需要通过I2C/SMBus或者HDQ接口与电脑通信&#xff0c;这时候就需要一个通讯盒作为桥梁。官方EV2400虽然好用&#xff0c;但价格实在不亲民&#xff0c;而且功能上可…...

10分钟掌握全网资源下载神器:res-downloader从入门到精通

10分钟掌握全网资源下载神器&#xff1a;res-downloader从入门到精通 【免费下载链接】res-downloader 视频号、小程序、抖音、快手、小红书、直播流、m3u8、酷狗、QQ音乐等常见网络资源下载! 项目地址: https://gitcode.com/GitHub_Trending/re/res-downloader 你是否遇…...

使用seo站点管理系统需要注意哪些事项

SEO站点管理系统的核心注意事项 在当今数字化时代&#xff0c;SEO站点管理系统&#xff08;Site Management System for SEO&#xff09;是网站运营和推广的关键工具。它不仅能帮助提升网站在搜索引擎中的排名&#xff0c;还能带来更多的流量和转化。要真正利用这一工具&#x…...

实体店有没有必要做门店小程序?

在当前消费行为不断向线上延伸的背景下&#xff0c;实体店是否需要搭建门店小程序&#xff0c;已经成为很多经营者在数字化转型过程中必须面对的问题。实体店是否有必要做门店小程序&#xff0c;取决于其是否需要提升获客能力与用户复购效率。一、为什么会出现这个问题在实际经…...