MUT
  • 2024-09-28rust交换数组中的两个元素
    不可以直接用std::mem::swap,因为这个函数需要拿两个可变引用,但是不可以同时拿两个这个数组的可变引用。所以要么手写:lettmp=a[i];a[i]=a[j];a[j]=tmp;要么用Vec::swap:a.swap(i,j);其内部实现:fnswap(&mutself,a:usize,b:usize){unsafe{//
  • 2024-09-15LOJ#2885. 「SDOI2010」猪国杀
    对拍器在此。https://www.luogu.com/discuss/81283献忠!AC代码modoiread{usestd::{io::{stdin,Read},ops::{Add,Mul,Neg},};pubfnnext()->u8{letmuta=stdin().lock();letmutc=[0u8];matcha
  • 2024-08-21rust库-ouroboros中文文档
    文档原文:https://docs.rs/ouroboros/latest/ouroboros/attr.self_referencing.html属性宏ouroboros::self_referencing#[self_referencing]此宏用于将常规结构转换为自引用结构。举个例子:useouroboros::self_referencing;#[self_referencing]structMyStruct{int_d
  • 2024-08-190243-RLTK-记住可视区
    环境Time2022-11-30WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标基于前一节的内容,角色只能看见自身周围,这一节将记住探索过的区域。记住打开的地图#[derive(Default)]pubstructMap{pubtiles:Vec<TileTy
  • 2024-08-190244-RLTK-增加地图怪物
    环境Time2022-12-01WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标基于前一节的内容,在每个房间的中间放置怪物。comp.rsuserltk::{console,field_of_view,Point,RGB};usespecs::prelude::*;usespecs_derive:
  • 2024-08-160236-RLTK-渲染动态字符
    环境Time2022-11-29WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标在前一节的基础上,将静止的字符进行移动。Component#[derive(Component)]structPosition{x:i32,y:i32,}#[derive(Component)]st
  • 2024-08-160237-RLTK-控制角色移动
    环境Time2022-11-29WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标使用键盘来控制角色在窗口中进行移动。Component#[derive(Component)]structPosition{x:i32,y:i32,}#[derive(Component)]struc
  • 2024-08-160238-RLTK-生成大地图
    环境Time2022-11-29WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标基于前一节的内容,生成一张可以让角色移动的大地图。地板和墙#[derive(PartialEq,Copy,Clone)]enumTileType{Wall,Floor}计算坐标pub
  • 2024-08-160239-RLTK-分割不同文件
    环境Time2022-11-30WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标基于前一节的内容,随着main.rs文件中的内容越来越多,将其进行分割。comp.rsuserltk::RGB;usespecs::prelude::*;usespecs_derive::Component;
  • 2024-08-160240-RLTK-生成小房间
    环境Time2022-11-30WSL-Ubuntu22.04RLTK0.8.7前言说明参考:https://bfnightly.bracketproductions.com/rustbook目标基于前一节的内容,生成两个小房间,只修改map.rs文件。生成房间函数fnapply_room_to_map(room:&Rect,map:&mut[TileType]){foryinroom
  • 2024-08-120218-地址解析协议
    环境Time2022-11-20VirtualBox7.0.2Rust1.65.0pnet0.31.0CentOS7前言说明参考:https://docs.rs/pnet_packet/latest/pnet_packet/index.html目标使用两台虚拟机,通过IP地址,获取到目标主机的MAC地址。日常使用的时候,都是使用IP连接服务器,需要使用地址解析协
  • 2024-08-120219-使用 TAP 来进行通信
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0tun-tap0.1.3前言说明参考:https://docs.rs/pnet_packet/latest/pnet_packet/index.html参考:https://www.kernel.org/doc/html/latest/networking/tuntap.html目标通过TAP来模拟二层设备,接收之前发送的
  • 2024-08-120220-发送 ARP 回应
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0tun-tap0.1.3前言说明参考:https://docs.rs/pnet_packet/latest/pnet_packet/index.html参考:https://www.kernel.org/doc/html/latest/networking/tuntap.html目标使用TAP后,接收到ARP操作系统不再自动
  • 2024-08-06Rust_learn_1
    变量与可变性变量声明变量使用let关键字,在默认情况下,变量是不可变的(Immutable)。为此解决该问题,声明变量时在前面加上mut,就可以使变量可变常量常量(constant),在绑定值之后也是不可变的,但是与不可变的变量有很多区别:不可以使用mut,常量永远是不变的声明常量用const关键
  • 2024-07-29Rust——引用和借用
    前言在这章我们将开始学习Rust的引用和借用,它们是Rust中重要的概念,它们允许我们创建可变引用,以及创建不可变引用。内容引用和借用在下面的示例中,我们必须将String返回给调用函数,以便在调用calculate_length后仍能使用String,因为String被移动到了calculate_length内。
  • 2024-07-25Rust 中 *、&、mut、&mut、ref、ref mut 的用法和区别
    Rust中*、&、mut、&mut、ref、refmut的用法和区别在Rust中,*、ref、mut、&和refmut是用于处理引用、解引用和可变性的关键字和操作符,它们在不同的上下文中有不同的用法。一、*解引用*属于操作符1.作用用于解引用指针或引用,以访问其指向的值。通过解引用,可以从指
  • 2024-07-240207-pnet 模拟链路层数据
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层的数据交换。Cargo.toml[package]edition="2021"name="network"versi
  • 2024-07-240209-模拟发送多个数据包
    环境Time2022-11-20WSL-Ubuntu22.04Rust1.65.0pnet0.31.0前言说明参考:https://docs.rs/pnet_datalink/0.31.0/pnet_datalink/dummy目标使用pnet_datalink包中的dummy模拟数据链路层发送多个数据包。网络接口letinterface=dummy::dummy_interface(44);创
  • 2024-07-22rust may_minihttp server
    Cargo.toml:[package]name="demo"version="0.1.0"edition="2021"[dependencies]bytes="1.6.1"may="0.3.45"may_minihttp={git="https://github.com/Xudong-Huang/may_minihttp.git"}y
  • 2024-07-160187-实现换行输出
    环境Time2022-11-13WSL-Ubuntu22.04QEMU6.2.0Rust1.67.0-nightlyVSCode1.73.1前言说明参考:https://os.phil-opp.com/vga-text-mode目标使用VGA输出的时候,在一行已经满的情况下,自动换行输出。易失操作对于输出到屏幕,为了避免编译器优化,需要增加一个副作用。v
  • 2024-07-11Rust中为外部类型实现外部trait
    由于孤儿规则(orphanrule)的限制,在Rust中无法直接为外部类型实现外部trait。但是我们可以通过构造一个外部类型的wrapper来间接实现这个目的。一个比较常见的使用情形是,外部类型并没有实现Displaytrait,而我们想为其实现。这里,我们以标准库中的String为例进行介绍。externcr
  • 2024-07-09day2-array-part02-7.4
    taskfortoday1.977.有序数组的平方 2,209.长度最小的子数组 3.59.螺旋矩阵II---------------------------------------------1.977.有序数组的平方 -暴力法raiseeachelementinthearraytothepowerof2,andthensorttheminascendingorder.it
  • 2024-06-21Lru-k在Rust中的实现及源码解析
    LRU-K是一种缓存淘汰算法,旨在改进传统的LRU(LeastRecentlyUsed,最近最少使用)算法的性能。将其中高频的数据达到K次访问移入到另一个队列进行保护。算法思想LRU-K中的“K”代表最近使用的次数。因此,LRU可以认为是LRU-1的特例。LRU-K的主要目的是为了解决LRU算法“缓存污染”的
  • 2024-06-18Rust性能分析之测试及火焰图,附(lru,lfu,arc)测试
    性能测试,在编写代码后,单元测试及性能测试是重要的验收点,好的性能测试可以让我们提前发现程序中存在的问题。测试用例在Rust中,测试通常有两部分,一部分是文档测试,一部分是模块测试。通常我们在函数定义的开始可以看到以///三斜杠开头的就是文档注释发布的时候会将自动生成到docs.
  • 2024-06-12TimerWheel(计时轮)在Rust中的实现及源码解析
    计时器轮(TimerWheel),模拟时钟格式组成的高效计时器TimerWheel算法原理环形数据结构:TimerWheel,即时间轮,是一个环形的数据结构,类似于时钟的面,被等分为多个格子或槽位(slot)。槽位时间间隔:每个槽位代表一个固定的时间间隔,例如1毫秒、1秒等。这个时间间隔决定了定时器的精度。