Rust学习笔记(11)——Option和struct组合带来的所有权问题及总结

【深度学习新浪潮】深度学习特别是大模型在图像配准方面的研发进展 深度学习,尤其是大模型的出现,彻底改变了图像配准的技术范式——从“手工设计特征+几何约束”走向“数据驱动+通用特征学习”。当前,大模型配准已在医学影像、遥感、工业检测等领域实现商业化落地,解决了传统方法难以应对的跨模态、少样本、复杂形变等问题。但大模型配准仍面临推理效率、可解释性、数据隐私等挑战,未来的研发核心将是“精度与效率的平衡”“泛化能力的提升”“场景化适配的简化”。对于开发者而言,从简化版大模型配准代码入手,逐步理解预训练+微调的核心逻辑,是衔接前沿技术的有效路径。 阅读详情

在上一篇的基础上,我们加一层Option的包裹。还是先定义struct:

#[derive(Debug)]
struct Point {
    x: Box<i32>,
    y: i32,
}

下列代码不可编译:

fn main() {
    let a = Some(Point {
        x: Box::new(5),
        y: 5,
    });
    let b = a.as_ref();
    let c = b.unwrap();
    let d = *c; // Error! move occurs because `*c` has type `Point`, which does not implement the `Copy` trait

    println!("c = {:?}", c);
    println!("b = {:?}", b);
    println!("a = {:?}", a);
}

变量b为a调用as_ref()后获得的新Option,类型为Option<&Point>; c 为b unwrap后的值,类型为&Point,d尝试对c进行解引用,违反了所有权规则,编译错误。

如果修改为as_mut(), 会报类似的错误,如下,原因也类似:

    let mut a = Some(Point {
        x: Box::new(5),
        y: 5,
    });
    let b = a.as_mut();
    let c = b.unwrap();
    let d = *c; // Error! move occurs because `*c` has type `Point`, which does not implement the `Copy` trait

直接使用获得的引用或可变引用,是可以的:

fn main() {
    let mut a = Some(Point {
        x: Box::new(5),
        y: 5,
    });
    let b = a.as_mut();
    let c = b.unwrap();
    c.x = Box::new(10);

    println!("c = {:?}", c);
    // println!("b = {:?}", b);
    println!("a = {:?}", a);
}

上述代码对c.x的改变,直接改变了a的值,输出如下:

c = Point { x: 10, y: 5 }
a = Some(Point { x: 10, y: 5 })

或:

fn main() {
    let mut a = Some(Point {
        x: Box::new(5),
        y: 5,
    });
    let b = a.as_mut();
    let c = b.unwrap();
    // c.x = Box::new(10);
    *c.x += 10;

    // or 
    // let d = &mut c.x;
    // **d += 10;

    println!("c = {:?}", c);
    // println!("b = {:?}", b);
    println!("a = {:?}", a);
}

输出:

c = Point { x: 15, y: 5 }
a = Some(Point { x: 15, y: 5 })

最后,对于之前几篇学习的几个主要结论总结一下:

  1. 对于struct类型,如果成员未实现Copy trait,可以将其部分或全部成员的所有权转移出去;
  2. struct类型的(可变)引用,无法转移成员的所有权;(别小看这个,这是不同于C/C++编写链表时的坑之一)
  3. struct类型的(可变)引用,不能解引用;其成员的(可变)引用,如果成员未实现Copy trait,也不能解引用;(参考笔记(10))
  4. Option类型可以通过unwrap、take 分别获取包含对象的值的所有权,通过as_ref/as_mut获取包含对象的引用或可变引用;
  5. 对引用可以继续引用,可变引用类似。这类似于C语言中的指针的指针;(笔记(8)中有实验)
  6. struct支持分别对其不同成员同时进行可变引用,Vec则不支持。(笔记(6)中有实验)
  7. 不可变引用不能改变其指向变量的值,其本身(指针本身)可以通过copy进行复制;(笔记(6)中有实验​​​​​​​)
  8. 可变引用可以改变指向变量的值,可变引用这个变量本身(指针本身)未实现Copy trait,其赋值是move 操作。(笔记(6)中有实验​​​​​​​)

暂时到这里吧,以后如果有新的发现再补充。

 

 

SIMATIC S7-1200, S7-1500 PID 控制[手册] 立即下载

相关推荐

MT9V034摄像头学习笔记(一)_mt9v034摄像头循迹代码(1)

函数名称:uint8_t SCB_RegRead(uint8_t Device,uint8_t Address,uint16_t *Data)* 函数名称:uint8_t SCB_RegWrite(uint8 Device,uint8 Address,uint16 Data)* 函数名称:uint8 SCCB_SendByte(uint8 Data)* 函数名称:uint8 SCCB_ReadByte(void)* 修改时间:2018年3月4日。* 修改时间:2018年3月4日。

2401_87555661的博客 908

Rust基本语法整理(三)

通道的发送端有一个 send 方法用来获取需要放入通道的值。send 方法返回一个 Result<T, E> 类型,所以如果接收端已经被丢弃了,将没有发送值的目标,所以发送操作会返回错误。在这个例子中,出错的时候调用 unwrap 产生 panic recv,它是 receive 的缩写。这个方法会阻塞主线程执行直到从通道中接收一个值。一旦发送了一个值,recv 会在一个 Result<T, E> 中返回它。当通道发送端关闭,recv 会返回一个错误表明不会再有新的值到来了 try_

JIYILANZHOU的专栏 1059

在ROS中使用行为树

在ROS中使用行为树 我提供的工程示例文件: demo链接 文章目录在ROS中使用行为树0、 学习本教程的前提1、 behaviorTree 库安装(ROS使用下的安装方式)2、 处理 behaviortree 库并准备好 service 和 ros action2.1 对ROS 的 service 和 action 进行封装,使其在 behaviortree 上使用更加方便。2.2 创建一个 service 和一个 action2.3 创建与决策树相关的数据类型2.4 修改`package.xml`文件2

qq_37416258的博客 6376

Rust学习笔记007-所有权

什么是所有权 Rust的核心功能(之一)就是所有权,其令 Rust 无需垃圾回收即可保障内存安全。 所有运行的程序都必须管理其使用计算机内存的方式: 一些语言中具有垃圾回收机制,在程序运行时不断地寻找不再使用的内存; 在另一些语言中,程序员必须亲自分配和释放内存。 Rust 则选择了第三种方式:通过所有权系统管理内存,编译器在编译时会根据一系列的规则进行检查。在运行时,所有权系统的任何功能都不会...

MARATRIX BLOG 1352

yakit 验证码识别 进行webfuzzer

在渗透测试的过程中,我们可能需要对管理员密码进行枚举,或者密码喷洒的时候,遇到验证码就很烦。有没有自动化识别验证码的办法呢?有的,兄弟,有的。验证码的识别率很低,captcha-killer-modified对算术验证码识别正确率非常低,还会识别成乱七八糟的结果,这就非常麻烦。因为你不知道到底是验证码不对,还是密码不对。这是 ddddocr 识别率的问题,如果师傅们找到准确度更高的工具,完全可以替换上去。

Arkmornings的博客 1666

llama.cpp部署大模型

llama.cpp如何部署大模型

Eddy的博客 980

move occurs because `arr[_]` has type `T`, which does not implement the `Copy` trait

【代码】move occurs because `arr[_]` has type `T`, which does not implement the `Copy` trait。

826

51单片机定时器的原理、应用与编程实现

本文系统介绍了51单片机定时器的基本原理与应用。首先阐述了定时器的工作原理,包括定时模式和计数模式的区别。然后详细讲解了定时器的四种工作模式(方式0-方式3)及其适用场景,并分析了相关寄存器(TMOD、TCON、THx/TLx)的功能设置。文章还给出了定时器编程的具体步骤,包括初始化、计数初值计算和示例代码。最后通过LED闪烁、PWM波形产生、脉冲计数等实际应用案例,展示了定时器的多样化应用。掌握这些知识对嵌入式系统开发具有重要意义。

2501_91227323的博客 1524

Rust中的所有权、引用、借用与slices

所有权 Rust 中的每一个值都有一个被称为其 所有者(owner)的变量。 值在任一时刻有且只有一个所有者。 当所有者(变量)离开作用域,这个值将被丢弃。 对于规则二: // 此时"hello"的所有者为 a let a = String::from("hello"); // move occurs // because `a` has type `String`, which does not implement the `Copy` trait // 因为 String 没有实现`C

朕与将军解战袍的博客 669

Python 上位机开发

首先,什么是上位机?上位机通常是指可以与下位机(如单片机、传感器等硬件设备)进行通信和交互,实现数据采集、控制指令发送以及数据处理和展示的计算机程序。 Python 作为一种高级编程语言,在开发上位机方面具有诸多优势。它拥有丰富的第三方库,使得开发过程变得相对简单和高效。

weixin_46807151的博客 4303

Paypal开发者中心获取“ClientId”和“ClientSecret”参数

正式环境设置 1、登录到 paypal开发者中心 网址:https://developer.paypal.com/developer/ 点击右上角登录按钮登录 2、左侧栏 - 我的应用程序和凭证 - 点击“创建新应用” 新注册的paypal账号,需要进行邮箱验证,验证通过后,需要等待一段时间(或重新登录),才会出现相关设置项位置 验证邮箱通过后,点击创建新应用 3、按提示填写,保存创建应用 4、点击刚创建的应用进入应用详情页 5、应用详情页获得网站开发人员所需要的“ClientId”和“Client

龚清林的博客 1万+

RUST语言的编程范式

总是有很多很多人来问我对Rust语言怎么看的问题,在各种地方被at,其实,我不是很想表达我的想法。因为在不同的角度,你会看到不同的东西。编程语言这个东西,老实说很难评价,在学术上来说,Lisp就是很好的语言,然而在工程使用的时候,你会发现Lisp没什么人用,而Javascript或是PHP这样在学术很糟糕设计的语言反而成了主流,你觉得C++很反人类,在我看来,C++有很多不错的设计,而且对于了解编程语言和编译器的和原理非常有帮助。但是C++也很危险,所以,出现在像Java或Go 语言来改善它,Rust本质上

Peter的博客 2310

【RT-DETR涨点改进】全网独家首发、特征融合改进篇 | AAAI 2026 | 引入CDEM交叉动态增强模块,双向引导和融合,在低光图像增强中有效提升了图像的亮度,提升小目标和暗目标的检测准确率

本文提出了一种基于CDEM(交叉动态增强模块)改进的rtdetr网络模型,有效提升了在低光和复杂环境下的目标检测性能。CDEM模块通过动态增强亮度与色彩特征,改善图像输入质量,增强细节和对比度。该模块具有轻量级结构,易于集成到现有模型中,能够显著提升小目标和暗目标的检测准确率与鲁棒性。文章详细介绍了CDEM模块的结构原理、实现方法,并提供了完整的代码实现和配置指南,包括三种改进版本的YAML配置文件。实验结果表明,该方法在图像增强和目标检测任务中均取得了优异性能。

Ai缝合怪、助力小伙伴高效发论文 145

Rust学习笔记(13)——struct、Option和Box组合应用实现单向链表

前面深入学习了struct、Option和Box的所有权约束及各种场景的使用,现在用struct、Option和Box组合来实现一个单向链表,并实现链表常见的头部插入、删除,尾部插入、删除,中间插入、删除,链表反转,遍历等操作。 一、链表和节点定义 为了方便演示,我们先定义节点,以及节点的new 和link操作,然后再定义一个链表结构体,其中仅有一个头指针成员。 1.1 先定义节点及节点的new / link 操作 #[derive(Debug)] struct Node { val: i

Konquerx的博客 1480

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

从leetcode-rust学习Rust错误处理:Result和Option的实战应用指南

Rust语言以其强大的内存安全和错误处理机制而闻名,其中`Result`和`Option`类型是Rust错误处理的核心。通过分析leetcode-rust项目中的实际代码,我们可以深入理解这些机制如何在实际编程中应用。本文将带你从实战角度掌握Rust错误处理的最佳实践,帮助你编写更安全、更健壮的代码。🚀 ## 为什么Rust错误处理如此重要? 在传统编程语言中,错误处理往往依赖于异常机制或返

gitblog_01022的博客 483

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Rust语法核心机制解析:从所有权到并发编程的实战指南

在系统编程领域,内存安全和并发控制是开发者面临的核心挑战。传统语言如C++依赖开发者手动管理内存和同步,容易导致悬垂指针、内存泄漏和数据竞争等问题。Rust通过独特的所有权系统和借用检查器,在编译期强制执行内存安全规则,从根本上杜绝了这类错误。其核心机制包括所有权、借用与生命周期,这些概念共同构成了零成本抽象的基础,使得开发者无需运行时开销即可编写高效安全的代码。在并发编程方面,Rust的类型系统通过Send和Sync trait保障线程安全,配合通道和互斥锁等原语,让编写无数据竞争的并发代码成为可能。这些

weixin_30606461的博客 806

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Rust中的Enum与Struct详解

unit struct

飞鹰技术 711

Rust编程手册:从所有权到工程化实践全攻略

内存安全是系统编程语言设计的核心挑战之一。Rust 通过所有权系统在编译期保证内存安全,无需垃圾回收,同时兼顾高性能与并发安全。掌握 Rust 的关键在于理解所有权、借用与生命周期规则,以及运用 Cargo 工具链管理项目与依赖。从命令行工具到 Web 服务,Rust 正被广泛应用于嵌入式、音视频处理等场景。本文梳理了一本面向工程实践的 Rust 编程手册的核心内容,涵盖环境搭建、语法基础、错误处理、测试与常见编译错误排查,帮助开发者建立从入门到实战的完整路径。

weixin_34126557的博客 296

Rust学习笔记(14)——struct、Option和Box组合应用实现单向链表之二

在上一篇学习了链表的头部插入和删除,今天尝试一下尾部的插入和删除。 一、尾部插入 在链表的尾部插入,分几种情况: 链表为空:直接将头指针指向新节点;否则进入第二步: 从头结点开始向后一直找到尾节点,将新节点挂到尾节点上。 实现时的与C的区别在于向后的遍历找到尾部节点,因为所有权的限制,不能像C语言那样写: curr = curr->next; 完整代码如下: impl BoxedLinkedList { fn push_back(&mut self, value: i

Konquerx的博客 640

Rust核心语法精讲:从所有权、生命周期到零成本抽象

在系统级编程领域,内存安全与高性能是开发者面临的核心挑战。传统语言如C/C++依赖程序员手动管理内存,易引发内存泄漏、悬垂指针等问题;而带垃圾回收的语言则牺牲了实时性与资源控制精度。Rust通过其独特的所有权系统与借用检查器,在编译期静态保障内存安全,实现了无需运行时垃圾回收的零成本抽象。这一机制要求变量默认不可变,并通过所有权、借用、生命周期等语法规则,强制开发者建立安全的资源管理思维。其技术价值在于从根本上消除了数据竞争,为构建高并发、高可靠系统提供了坚实基础,广泛应用于操作系统、浏览器引擎、区块链基础

weixin_34082854的博客 347

Rust语法精要:从所有权到并发编程的实战指南

在系统编程领域,内存安全和并发控制是构建可靠软件的核心挑战。传统语言依赖垃圾回收或手动管理内存,常导致运行时错误和数据竞争。Rust通过独特的所有权系统、借用检查器和生命周期注解,在编译期静态保障内存安全,实现零成本抽象。其强类型系统、模式匹配和Trait机制,为编写高效、健壮的代码提供了坚实基础。这些特性使Rust在操作系统、嵌入式系统、网络服务等对性能和安全性要求极高的应用场景中表现出色。本文结合项目实战,深入解析Rust语法的设计哲学与常见陷阱,帮助开发者跨越学习曲线,掌握这门现代系统编程语言。

weixin_30596165的博客 344

Rust数据类型与所有权机制详解

数据类型是编程语言的基础概念,决定了数据的存储方式和操作规则。Rust作为系统级语言,其类型系统通过编译期静态检查确保内存安全,同时支持零成本抽象。在工程实践中,Rust的所有权机制通过编译时规则管理内存生命周期,无需垃圾回收即可避免数据竞争和内存泄漏。这种设计特别适合高性能网络服务、嵌入式开发等场景。通过标量类型、复合类型以及独特的借用检查器,Rust在保证安全性的同时实现了与C++媲美的执行效率。理解Rust的String与str区别、Option枚举等核心概念,是掌握现代系统编程的关键。

weixin_32183107的博客 155

Kornia 特征提取器迁移 012:`extract_patches_from_pyramid` / `extract_patches_simple` 的重写、精度策略与内存边界

本篇指南围绕 Kornia 迁移变更 [changelog.d/+migration-012.breaking.md](https://pre-link.gitcode.com/i/6f90243e1862f2cff5ca3b2d2120e3f0) 展开,系统梳理 `extract_patches_from_pyramid` 与 `extract_patches_simple` 两个 LAF 特征

gitblog_00726的博客 369

Comprehensive Rust 教程:深入理解 `for` 循环与 Rust 的迭代机制

`for` 循环是 Rust 控制流体系中最常用、也最具 Rust 风格的循环结构:它既能遍历数值区间(range),也能遍历数组、切片、`Vec` 等集合。本文以 Google Android 团队维护的开源课程 Comprehensive Rust 中 [for 循环](https://link.gitcode.com/i/0e4fca7ae6ff19fba19c3350cf8bc689) 一

gitblog_00651的博客 969

Rust学习笔记(15)——struct、Option和Box组合应用实现单向链表之三

本次学习实现链表中间的插入和删除。插入按照从小到大的顺序插入,删除则为找到要删除的值,删除节点。 一、插入 首先我们假设链表是有序的。插入的值为value,插入操作也是从头开始向后遍历链表,找到符合以下条件的节点curr: curr.val < value; curr.next.val >= value; 要考虑几种特殊情况: 链表为空; 插入的值小于头结点的值; 插入的值大于尾节点的值; 实现代码如下: impl BoxedLinkedList { fn inser.

Konquerx的博客 489

OpenTelemetry-Go 可观测性 SDK 实践指南:从插桩、导出到 CRI-O 分布式追踪落地

OpenTelemetry-Go 是 OpenTelemetry 官方在 Go 语言上的实现,为 Go 应用提供统一的 API 来采集性能与行为数据(分布式追踪、指标、日志)并送往可观测性平台。本文以仓库中 [vendor/go.opentelemetry.io/otel/README.md](https://link.gitcode.com/i/522f7bb8d866ce08d8bbbd3b0

gitblog_00963的博客 400
上一篇: Rust学习笔记(10)——引用和解引用的所有权问题
下一篇: Rust学习笔记(12)——Box智能指针
Codevalley
博客等级 码龄9年 22粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值