
rust
文章平均质量分 51
skyf**er
北工大计算机本科生
展开
-
寻找小伙伴一起写Rust后端
以下是项目简介:我想要搞一个在线的rust刷题网站, 类似与leetcode那种. 当然功能没有那么多.我的思路是将rust编译为wasm然后运行这个wasm文件wasmer库很好的解决了这一点还需要一些后端开发的内容, 比如说增删改查数据库初步打算用postgresql+actix在线rust支持的功能现在是只有基础的操作(println!..), 不支持文件, 网络和crate啥的.进一步的话需要研究wasi和虚拟化的内容项目地址文档和测试刚开始接近没有,慢慢加吧部署没钱,先原创 2021-09-28 00:27:46 · 371 阅读 · 1 评论 -
Rust vec的内存布局
昨天看到rust中文社区的分析胖指针的内存局部的文章( String是胖指针吗? ).如果只看String结构体的话,看源码也行,不过实际验证一下也不错.这次分析Vec<isize>直接上代码哦#[repr(C)]#[derive(Debug)]struct VS{ ptr:u64, a:u64, b:u64,}fn stack(pa: usize){ let a = 10; let mut v = Vec::with_capacity(原创 2021-07-05 17:06:00 · 571 阅读 · 0 评论 -
Programming Rust 第4章 所有权
要所有权系统干啥? 管理内存…0. Rust的承诺我们决定程序中每个值能活多久, 并控制Rust回收该值拥有的内存和其他资源释放后, 就不能被指针指向.如何做到呢?靠所有权和移动语义以及下章的lifetime所有权MovesindexCopy: Exception of MovesShared Ownership: Rc and Arc1. 所有权 OwnershipRust中每个值只有一个拥有者, 并且拥有者决定值的生命周期.当变量离开其声明的控制块原创 2021-04-18 17:49:27 · 303 阅读 · 0 评论 -
Programming Rust第一章读后感
前言学习Progamming Rust这本书的笔记.首先Rust是一个系统语言, 啥是系统语言? 或者说系统语言针对什么?OS设备驱动文件系统数据库硬件密码学流媒体网络容器,虚拟机等等好多哦,基本上底层的都涵盖了. 或者说系统编程语言在资源有限环境下工作.要榨干内存的每个单元和CPU的每个周期.那Rust能干什么, 解决困扰了工业界多年的问题. 都有啥? 且听本书娓娓道来.本书的组成好好看完前五章: 基本类型, 所有权, 引用六到十章可以跳着看: 表达式, 错误原创 2021-04-06 22:38:01 · 210 阅读 · 0 评论 -
Rust中Struct与`&[u8]`的相互转换
1. Struct转&[u8]struct定义如下#[repr(C)]struct Row { id: u32, username: [u8; 32], email: [u8; 255],}Struct转&[u8], 约束条件是Sizedpub unsafe fn serialize_row<T: Sized>(src: &T) ->&[u8] { ::std::slice::from_raw_p原创 2020-07-31 09:20:42 · 4248 阅读 · 0 评论 -
教你写操作系统(超级详细), 写完你就能甩开竞争者
uCore主要以C语言编写还有点RISCV汇编github地址gitbook地址好好写练习题rCoreRust+RISCVRust写操作系统好好写练习题+1操作系统课程QAQA开发平台我用的是win10, 目前rCore没啥问题, uCore还没开搞win10下安装gcc...原创 2020-07-09 13:43:56 · 453 阅读 · 0 评论 -
Rust中trait的“多继承“?
trait Root { fn print(&self){ println!("i am root"); }}trait LA:Root{ fn print(&self){ println!("i am level 1 A"); } fn la(&self){ println!("lllllllA"); }}trait LB:Root{ fn print(&..原创 2020-07-04 23:34:39 · 2129 阅读 · 0 评论 -
用Rust写操作系统
大佬的链接会遇到的问题asm!宏不能用, 在x86_64文件夹下asm!更改为llvm_asm!该问题是因为rustnightly版本更新导致的.qeum虚拟机无法启动, 记得往下翻呀!!!记得cargo.toml文件下[dependencies]bootloader = "0.9.0"...原创 2020-06-02 22:35:26 · 794 阅读 · 3 评论 -
Rust的Async-await能与Golang的goroutines一较高下吗?
原文Rust的Async-await入门先说结果结果是各有所长.goroutines简洁优雅Rust的Async-await与goroutines大有不同Rust语法相对复杂, 并可能带来更多的问题Rust的Async-await适合高IO延迟但没有长时间负载原文中: Async/Await is a useful paradigm for programs that have heavy I/O wait times but aren’t doing long-runn..转载 2020-05-13 16:24:54 · 1091 阅读 · 0 评论 -
LR(0), SLR(1)到LR(1)语法分析详解
今天讲解LR(0)SLR(1)LR(1)首先是自底向上分析过程: 为一个输入串构造语法分析树的过程LR(k)分析技术:L:从左向右R: 反向构造一个最右推导序列k: 做出语法分析决定时向前看k个输入符号当然在实践中我们只考虑k=0或k=1的情况为啥要用LR语法分析器呢? LL不香吗?几乎所有的程序语言, 只要能写出改语言的上下文无关文法, 就可以构造出相应的LR语法分析...原创 2020-04-27 12:59:07 · 5559 阅读 · 2 评论 -
rust实现lalr(1)分析器
use super::lexer::Lexer;use super::token::{Token, TokenType, FILLER};use std::collections::BTreeMap;use std::collections::BTreeSet;use std::collections::HashMap;use std::collections::HashSet;t...原创 2020-04-27 13:55:44 · 556 阅读 · 0 评论 -
LR0, SLR1,LR1与LALR1分析的构造
前情提要A代表非终结符A代表非终结符A代表非终结符a代表变量a代表变量a代表变量项目集闭包内核项: 初始项S′→.SS' \rightarrow .SS′→.S以及点不在最左端的所有项非内核项: 除了初始项S′→.SS' \rightarrow .SS′→.S以外点在最左端的所有项计算First集算法开始 , 令i=1i=1i=1判断X类型X是终结符, F...原创 2020-04-26 10:30:55 · 4336 阅读 · 0 评论 -
用rust写一个玩具解释器12(eval&object)
好像没啥可写的, 好吧是我太菜了:(eval函数中绝大部分都在eval套娃.那么套娃递归的终结符在哪里呢?是最基本的true,false,数字,字符串...GC: 自己太菜了,不会以后肯定会写的, 奥里给!object该语言不是面向对象而是基于对象其实就是结构体&枚举,如何添加数组对象假设现在我们不支持数组, 那如何添加数组呢?首先明确数组如何创建,赋值,取...原创 2020-03-04 13:23:24 · 329 阅读 · 0 评论 -
用rust写一个玩具解释器11(eval)
今天终于进入到了eval的环节:)我们的玩具解释器也快进入尾声了.我们现在已经有了ast了, 如何获取到值呢?下一步是编译还是直接计算呢?直接计算吧.如何计算呢?我们采取遍历树的方式, 即在树上行走的eval, 还是采用递归的.一般听到递归就会谈虎色变, 但是递归却是用有穷来描述无穷的法宝.程序中递归一定要有一个终止操作, 要不然就是死归了.而且最终一定要到终止操作上.首先看我们...原创 2020-03-01 17:22:41 · 445 阅读 · 0 评论 -
用rust写一个玩具解释器10(parser)
介绍完中缀和前缀表达式那么今天就把parser的代码全部贴出来可跳过use crate::ast::ast::ASTNode;use crate::ast::ast;use crate::mylexer::lexer;use crate::token::token;use std::collections::HashMap;pub enum Pri { LOWEST, ...原创 2020-03-01 13:02:13 · 366 阅读 · 0 评论 -
用rust写一个玩具解释器9(parser-中缀表达式)
复杂警告⚠重要的是操作符之间的优先级1.具体优先级大小,和支持的运算符pub enum Pri { LOWEST, ASSIGN , // 赋值 EQUALS , // ==, != LESSGREATER , // < ,> SUM , //+,- PRODUCT ,//*,/ PREFIX , // !,- ...原创 2020-02-25 21:02:14 · 309 阅读 · 0 评论 -
用rust写一个玩具解释器8(parser-前缀表达式)
前一篇文章讲了如何解析let与return,那么今天就讲如何parse前缀表达式.1.前缀表达式都包含什么变量名数字"!"感叹号"-"减号逻辑值 true,false"("左小括号if关键字fn关键字字符串"{"左大括号"["左中括号 p.prefix_parser_fns.insert(token::IDENT, Parser::parse_ide...原创 2020-02-22 18:41:03 · 1154 阅读 · 0 评论 -
用rust写一个玩具解释器7(parser之let&return)
整个parser文件有550行, 但是大部分是有重复内容的.所以不用担心.对比于刚从SICP学的lisp, 相比来说lisp的parser是不是简单一些, 但是总的工作量是一定的, lisp把parser的心智负担给了代码编写者和阅读者.而其他大部分语言把parser的心智负担给了语言发布者.若代码规模稍稍增长, 那么lisp的方式就不够经济. 就比如写rust的时候,一天想代码怎么写,一天写...原创 2020-02-20 13:56:41 · 472 阅读 · 0 评论 -
用rust写一个玩具解释器5(ast-1)
ast介绍抽象语法树的节点#[derive(Debug,PartialEq,Clone,Eq,Hash)]pub enum ASTNode{ Program(Program), LetStatement(LetStatement), //let name = value BlockStatement(BlockStatement), // {} Boolea...原创 2020-02-16 20:59:25 · 557 阅读 · 0 评论 -
教你五分钟学会快速排序
快排基本思想初始数组20为选定的关键字经过一次比较后转换为二叉树表示即快排是加了关键字交换的二叉树遍历想想快排的兄弟归并排序, 二者都是遍历二叉树.rust代码实现pub fn quicksort<T>( arr : &mut [T])where T:std::cmp::PartialOrd { quick_sorted(arr,0,ar...原创 2020-02-14 13:23:24 · 172 阅读 · 0 评论 -
用rust写一个玩具解释器5(parser&ast-0)
parser与ast先介绍parserparser干什么?将lexer的输出的token组织为ASTAST是啥?Abstract Syntax Tree(AST)-抽象语法树.那AST是二叉树吗? 大部分示例都画为二叉树.但是树其实就是嵌套的list,为啥一个节点不能有多个儿子.不过在我们组建AST过程中很少用到多叉树.然后parser如何工作呢?emmm…我们先区别介绍pa...原创 2020-02-11 13:46:58 · 537 阅读 · 0 评论 -
用rust写一个玩具解释器4(完整的lexer)
完整lexer介绍use crate::token::token; //导入tokenconst CHAR0: char = 0 as char;#[derive(Debug,Clone)]pub struct Lexer { input: String, position: usize,//当前读取的字符 read_position: usize,//下一个字...原创 2020-02-11 12:25:12 · 385 阅读 · 0 评论 -
用rust写一个玩具解释器3
项目目录项目地址画质有点渣其实不应该创建太多的包,因为里面其实只有一个有效文件(mod.rs和test.rs算是辅助) . 所以说目录可以更简单一些.token在上文中提到了把token看为字符串, 而其大致分为两种.我们预先定义的比如 +,-,*,/,if,return,fn和let等留给用户的比如: 变量名,整数//token/token.rs//不想下载第三方包,...原创 2020-02-06 10:00:51 · 373 阅读 · 0 评论 -
用rust写一个玩具解释器2(lexer)
词法分析器输入: 由字符(ASCII码)组成的字符串输出: token任务: 读取输入, 并且按规则输出tokentoken: 想简单点, 就是一个字符串和它的类型(比如说关键字, 变量名,非法字符串…)所以说我们现在需要, read_char, skip_whitespace和next_token函数以及当前字符ch和下标left(position),right(read_posi...原创 2020-02-05 21:20:18 · 548 阅读 · 0 评论 -
用rust写一个玩具解释器1
1.开发环境搭建1. 安装rust-自行百度2. 代码编辑器 我用的是vscode+RLS+TabNine2.语言的定义暂时实现的let x =10;let x1 = 10+10;let x2 = x1-10;let x3 = x2*10;let x4 = x3/10;let t = true;let f = false;let bang = !f;let minus...原创 2020-02-05 11:18:32 · 499 阅读 · 0 评论 -
用rust写一个玩具解释器0
前言假期闲来无事, 看了Thorsten Ball的Writing An Interpreter In Go, 他还有一本写编译器的暂时没看, 跟着书上的代码写了一遍, 想着用rust重写一遍, 现在正在写eval部分.Writing An Interpreter In Gogo&rustgo我对go的感觉如它宣传的一般, 21世纪的c语言, 用go写了一个小web程序, 感觉比...原创 2020-02-04 20:38:53 · 329 阅读 · 0 评论 -
rust笔记1
1. 作用域fn main() { let a = "JOJO"; { let a = "DOI"; println!("{}",a) } println!("{}",a)}2.常用类型[T, N] : 拥有类型T, N个元素的数组数组 arraylet mut array: [i32; 4] = [0; 4];...原创 2019-12-31 20:09:14 · 303 阅读 · 0 评论 -
rust最小堆 + 堆排序
//MinHeapmacro_rules! parent { ($child:ident) => { match $child { 0=>0, _=>($child-1)/2, } };}macro_rules! left_child { ($parent:ident)=...原创 2019-12-28 21:47:20 · 721 阅读 · 0 评论 -
rust使用trait排序
//Sort行为... 类似go的接口, 不过感觉还是泛型在某些方面舒服,虽然代码多一点...trait Sort { fn less(&self,a:usize, b:usize) -> bool; //大小 fn len(&self) -> usize; // 长度 fn swap_by_index(&mut self,a:usiz...原创 2019-12-28 20:15:24 · 635 阅读 · 2 评论 -
rust对结构体排序
use std::cmp::Ordering;use rand::Rng; //导入外部的包... 记得修改toml文件//保证age是可比较的pub struct Person<T : std::cmp::PartialOrd> { age: T,}//注意泛型T的位置impl<T> Person<T> where T:std::cmp...原创 2019-12-28 14:47:49 · 1154 阅读 · 0 评论