Rust学习笔记:简单练习

news/2024/5/3 0:21:04/文章来源:https://blog.csdn.net/hero82748274/article/details/127098257

最近一个月比较闲,忙碌大半年终于有自己短暂的休息时间。如果不写大的程序,偶尔写写一些小东西,其实用起来也很自在,前提是如果没有太多生活压力。看电视变成奢侈的事情。有时候,我会羡慕老外享受福利待遇非常好,一周只上四天班。我们在忙碌过程其实什么都得不到。他们总是能创造一些有趣的东西出来,造一些轮子出来。像deno,tauri这类的项目。deno 活跃一段时间,虽然目前还不谈不上拿它做大型的项目,在国外也有不少喜欢挑战公司在尝试它的应用。基于Rust底层构建的生态,Deno 也是一个典型大神的杰作。说不上颠覆Npm和Nodejs圈子,至少在编程界,轮子的新闻多了几分精彩故事。
Rust 其实在很多生态已经涉足的,大部分集中对性能要求的基建领域。大前端构建,服务网关,游戏图形与服务器,物联网,嵌入式,Linux驱动等一系列应用领域。可以说在这块领域当中,有它的一块重要的作用。
在这里插入图片描述
今晚,我翻开了之前写的Rust练习。Rust的练习里面在官方网有很多,对着敲代会比较容易记忆,且不说Rust 多有趣,光从语法层面早已劝退不少人。在众多语言来讲,脱离应用场景这种就很难发挥它的作用。下面将几个函数相加,看看效果。Rust 中如果不声明mut的变量是不能变的。

在第一个函数里面,传递一个引用进去计算。
在第二个函数里面,参数声明可变
在第三个函数里面,不加引用,不标记可变。

fn main() {println!("Hello, world");let mut a = 200;let mut b  = 100;let  c  = add(&mut a, &mut b);println!("Hello, world!{}",c);let c = add2(30,30);println!("{}",c);let d = add3(10,20);println!("{}",d)
}// 2个数相加
fn add(a:&mut i32, b:&mut i32) ->i32{*a = *a + 1;*b = *b + 1;return *a + *b;
}fn add2(mut a: i32, mut b: i32) ->i32{a = a + 1;b = b + 1;return a + b;
}fn add3( a:i32,  b: i32) ->i32{return a + b;
}

在这里插入图片描述

以上程序非常简单。但是有趣的地方是如果我把第三个函数修改一下。如下图。你会发现这个程序已经标红了,运行跑不通。
在这里插入图片描述
在这里插入图片描述
进行cargo run 后,编译器也提示建议我们如果对变量发生变化则需要声明变量参数可变。也就是第二个函数。

如果我们改成JavaScript方式:在没有声明类型过程, 传递进去的变量依旧可以操作,在Rust 这个领域里面可变和不可变变量这也很讲究。
在这里插入图片描述

再看看Kotlin的加法,在这段代码中,传递参数试图和JS类似相加。

fun main(args : Array<String>){println("Hello JSRUN     - from kotlin")var a = 2;var b = 3;println(add(a,b))
}fun add( a:Int, b:Int):Int {a = a+1b = b+1return a+b
}

结果在编译输出的时候,这个代码告诉我们传递变量为只读不可变。

x.kt:9:5: error: val cannot be reassigneda = a+1^
x.kt:10:5: error: val cannot be reassignedb = b+1^
Error: Unable to access jarfile h.jar

再看看c语言:在这个代码里面编译可以通过,输出答案7。在c语言里面这个操作是允许。它并没有类似Rust 和Kotlin 出现不可变的特性。

#include <stdio.h>
int main () {printf("%d",add(2,3));return 0;
}int add(int a,int b){a = a+1;b = b+1;return a+b;
}

同理C# 也是编译通过。

using System;public class HelloWorld
{public static void Main(){var obj = new HelloWorld();int c = obj.add(2,3);Console.WriteLine("c:"+c);}public  int add(int a,int b){a = a+1;b = b+1;return a+b;}
}

通过以上的小测试,发现在传递后变量进行改造这里会产生很多有趣的话题。在kotlin看来,传递过去还能变,这是一种不好的风格,在Rust能允许你变,那你先标记这些参数为可变,否则直接编译不过。

以上仅仅几个小测试实验,它还有其他语言参与实验。通过Rust标记,让我们知道传递参数,要让自身变化,这里需要知道会引发变化。在kotlin 直接报错。现代语言的变化也增加了很多安全机制和风格。这也是现代语言的变化。

好了,以上就是一个Rust的小实验,通过对比几种语言的函数参数传递变化的书写。可以看出各大门派也有各大门派的规则。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javaweb|JSTL的下载、配置与原理,解决uri导入时报错的问题

今天在配置jstl时&#xff0c;发现在引入uri时出现了问题&#xff0c;地址直接报红。在尝试了几种方法后&#xff0c;最后成功解决了。 JSTL一、下载1、https://tomcat.apache.org/2、找到taglib标准库3、下载前2个jar包二、配置1、放入web-inf的lib文件夹里2、将Jar包放入tomc…

windows下 解决PHP-CGI 进程崩溃502

PHP是世界上最好的语言&#xff0c;但需要PHP解析器&#xff1b;Apachephp,需要通过mod_php.so和php相连&#xff1b;nginxphp 需要转发给 cgi程序 关于FastCGI&#xff1a; 全称 FastCGI Process Manager&#xff0c;是一种进程管理器&#xff0c;管理 cgi&#xff0c;市面上…

1474_AURIX TC275 WDT的运行模式

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 1. 前面的内容中其实已经看到了&#xff0c;这个看门狗的时钟其实是固定的&#xff0c;SPB的时钟。这样&#xff0c;后面了解时钟树的时候需要注意一下。其实&#xff0c;在功能安全的失效…

ES6--》一文搞懂JS中的Promise

目录 Promise Promise使用 Promise封装Ajax请求 Promise封装读取文件 Promise.prototype.then 方法 Promise多文件读取 Promise.prototype.catch() Promise.prototype.finally() Promise.all() Promise.race() Promise.allSettled() Pomise.any() Promise.resolve…

微信小程序开发入门与实战(Behaviors使用)

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; 微信小程序 &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &#x1f4…

【原创】基于JavaWeb的社区疫情防控管理系统(疫情防控管理系统毕业设计)

项目介绍&#xff1a;后端采用JspServlet。前端使用的是Bootstrap的一个网站模板。开发一个在线的社区疫情防控管理系统。从角色的划分&#xff0c;包括用户、社管员、管理员。功能模块上包括了社区公告发布、高风险地区记录、地区感染信息管理、社区出入登记管理、行程信息管理…

关于maven生命周期的理解

晚上有点无聊&#xff0c;看到了一些东西引发了自己的思路&#xff0c;就想将maven的一些东西总结总结&#xff0c;有从网上抄的&#xff0c;也有自己的思路。 一、生命周期是指什么&#xff08;lifecycle&#xff09; Maven的生命周期就是对所有的构建过程进行抽象和统一。包…

Posix与System V IPC

Posix与System V IPC一、Posix IPC1.概述2.IPC名字3.px_ipc_name函数3.创建与打开IPC通道4.IPC权限二、System V IPC1.概述2.key_t键和ftok函数3.ipc_perm结构4.创建与打开IPC通道5.IPC权限6.标识符重用7.ipcs和ipcrm程序8.内核限制一、Posix IPC 1.概述 三种类型的IPC合称为…

Redux的基本使用过程详解

文章目录Redux的使用过程Redux测试项目的搭建Redux的基本使用步骤Redux目录的结构划分React的三大原则Redux的使用过程 Redux测试项目的搭建 1.创建一个新的项目文件夹:learn-redux # 执行初始化操作 npm init -y或yarn init -y # 安装redux:npm install redux --save或yarn …

自定义View 布局过程(Layout)

目录一、作用二、layout过程详解2.1单一View的layout过程具体使用具体流程源码分析总结2.2ViewGroup的layout过程具体使用具体流程源码分析总结三、细节问题&#xff1a;getWidth() &#xff08; getHeight()&#xff09;与 getMeasuredWidth() &#xff08;getMeasuredHeight(…

Java高级——编译JDK

编译JDKJDK是什么&#xff1f;编译环境搭建JDK下载编译参数编译在IDE中调试源码JDK是什么&#xff1f; Java Development Kit&#xff0c;用于执行和开发java程序 编译环境搭建 本文采用Ubantu 18.04 执行以下命令安装依赖 apt-get install build-essential apt-get instal…

Transformer

参考 https://www.ylkz.life/deeplearning/p12158901/ https://zhuanlan.zhihu.com/p/396221959 模型结构 Input Embedding 将文本中词汇的数字表示转变为向量表示, 希望得到其在高维空间中的特征表示向量。 # 导入必备的工具包 import torch import torch.nn as nn import …

Qt5开发从入门到精通——第九篇一节( Qt5 文件及磁盘处理—— 读写文本文件)

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 欢迎小伙伴的点评✨✨&#xff0c;相互学习c/c应用开发。&#x1f373;&#x1f373;&#x1f373; 博主&#x1f9d1;&#x1f9d1; 本着开源的精神交流Qt开发的经验、将持续更新续章&#xff0c;为社区贡献博主自身的开源精…

esp32-C3 CAN接口使用

esp32-C3 CAN接口使用功能概述CAN协议关注点接收过滤器单过滤器模式双过滤器模式关键函数说明配置和安装驱动获取TWAI状态信息发送/接收消息使用示例CAN控制器自回环测试CAN收发带过滤测试功能概述 ESP32-C3具有1个CAN控制器支持以下特性&#xff1a; 兼容ISO 11898-1协议(CA…

伟大的micropython smartconfig 配网它来了!!!

我这其实只是实验和搬运&#xff0c;还是感谢伟大的walkline群主&#xff0c;他弄好的&#xff0c;我只是负责搬运发布给新手看。 之前一大堆人问我配网的事儿&#xff0c;输入下wifi名称密码这么麻烦吗&#xff0c;好吧&#xff0c;有求必应&#xff0c;之前的配网是通过ap模式…

PICO高管专访:关于PICO 4硬件、内容、定价、海外布局的一切解答

PICO 4昨天正式在国内发布&#xff0c;简单来说这是一款相对均衡的VR一体机&#xff0c;在硬件素质、内容生态建设上都可圈可点&#xff0c;对于国内还未入手VR的朋友们来说是非常好的选择。相关阅读&#xff1a;《PICO 4评测&#xff1a;Pancake光学新标杆&#xff0c;VR娱乐V…

20【访问者设计模式】

文章目录二十、访问者设计模式20.1 访问者设计模式简介20.1.1 访问者设计模式概述20.1.2 访问者设计模式的UML类图20.2 访问者设计模式的实现20.3 访问者设计模式的优缺点二十、访问者设计模式 20.1 访问者设计模式简介 20.1.1 访问者设计模式概述 访问者设计模式&#xff0…

计算机网络基础 VLSM----可变长子网掩码;CIDR技术----无类域间路由;

VLSM----可变长子网掩码&#xff1a; 概述&#xff1a; 通过网络位向主机位借位的方式&#xff0c;延长子网掩码&#xff0c;从而达到将一个大网络划分为多个小网络&#xff1b;借出的位数称之为子网位&#xff0c;决定了能划分网络的个数。 优点&#xff1a; 更高效的利用…

记一次导入下载好的源码工程到本地工程异常解决方案

今天在学习okhttp相关视频时&#xff0c;安装视频的操作在自己的工程中引入三方的模块&#xff0c;但是发现引入后和预期的不一致。不一致指的是&#xff0c;视频中以module方式引入sample-okhttp并解决冲突后&#xff0c;sample-okhttp能够被android stuidio识别为applicayion…

Style样式设置器

构成Style最重要的两种元素&#xff1a; Setter类帮助我们设置控件的静态外观风格 Trigger类则帮助我们设置控件的行为风格。 Setter,设置器&#xff0c;我们给属性赋值的时候一般都采用“属 性名属性值”的形式 上面的例子中针对TextBlock的Style&#xff0c;Style中使用 若…