- 博客(266)
- 资源 (6)
- 收藏
- 关注
原创 windows下c++调用Rust库的例子
环境准备安装mingw,我的安装的mingw64,目录为: D:/tools/mingw64/安装rust,此步需要注意,不要选择默认安装,应该如下:Current installation options: default host triple: x86_64-pc-windows-msvc default toolchain: stable ...
2020-04-27 16:02:21 3405
原创 Rust编程知识拾遗:Rust 编程,Option 学习
视频地址头条地址:https://www.ixigua.com/i6765442674582356483B站地址:https://www.bilibili.com/video/av78062009?p=1网易云课堂地址:https://study.163.com/course/introduction.htm?courseId=1209596906#/courseDetail?tab=1g...
2020-04-08 14:05:19 2247 2
原创 用Rust编写web server,实现线程池的清除
在之前用线程池实现的web server中,每个工作线程中通过loop进行循环,从channel的接收端等待任务,然后执行。但是代码中没有提供一种机制,来通知这些工作线程结束。本节就是在之前的基础上,来实现线程池对象的正确清除。通过为ThreadPool实现Drop trait来实现线程池对象清除修改Worker如下:struct Worker { id: usize, ...
2020-04-05 12:40:30 1556
原创 用Rust实现一个多线程的web server
在本文之前,我们用Rust实现一个单线程的web server的例子,但是单线程的web server不够高效,所以本篇文章就来实现一个多线程的例子。单线程web server存在的问题请求只能串行处理,也就是说当第一个连结处理完之前不会处理第二个连结。考虑如下例子:use std::net::{TcpListener, TcpStream};use std::io::{Read,...
2020-03-31 08:34:31 1312
原创 用Rust创建一个简单的webserver
目的本节的例子教大家用Rust语言创建一个简单的web server程序。web server 中涉及到的两个主要协议是 超文本传输协议(Hypertext Transfer Protocol,HTTP)和 传输控制协议(Transmission Control Protocol,TCP)。这两者都是 请求-响应(request-response)协议,也就是说,有 客户端(client)...
2020-03-24 20:21:08 1444
原创 Rust 编程视频教程地址、源码 GitHub 地址说明
视频地址基础部分地址头条地址:https://www.ixigua.com/i6765442674582356483B站地址:https://www.bilibili.com/video/av78062009?p=1网易云课堂地址:https://study.163.com/course/introduction.htm?courseId=1209596906#/courseDetail?...
2020-01-27 18:54:01 385
原创 关于区块链的一些澄清
缘起从开始研究比特币源码算起,我接触区块链技术已经两年多了,某种程度上也算是区块链技术的老鸟了。一直专注于技术,所以对有些关于区块链的表述不怎么在意,昨天偶尔的和别人讨论,我觉得我有必要总结一下,以便在以后关于区块链进行更好的表述。关于防止篡改各种新闻媒体关于区块链提的最多的,估计就是防止篡改了,针对防篡改,我主要想说明以下两点:源头问题但是我们在一些设计方案中,应用区块链记录数据时,可...
2019-12-27 10:02:39 573
原创 为什么要学习 Rust
缘起为什么学习 Rust?于我而言,也许是两年前当我迈入区块链的第一脚时就已经决定了。选择一门编程语言是很困难的,但却又是重要的,其重要程度绝对不亚于你选择在哪个地方买房子或者是你选择在哪个地方扎根发展。因为当你开始学习一门编程语言的时候,不仅仅是你选择了这么编程语言,同时还选择了编程语言相关的技术领域。我和 Rust 的缘分来自于对 libra 的学习,然后就被它吸引了。虽然很多时候选择编...
2019-12-12 20:05:19 672
原创 004 Web Assembly康威游戏之优化
0 介绍视频地址:https://www.bilibili.com/video/BV1eg411g7c8相关源码:https://github.com/anonymousGiga/Rust-and-Web-Assembly1 说明在上一节的实现中,我们是在Rust中实现了填充的内容,然后让wasm bindgen转换为一个有效的js字符串,这样就产生了不必要的副本。因为js代码已经知道宇宙的宽度和高度,因此可以直接读取构成cell的web assembly内存。另外我们将切换到Canvas API,
2022-03-11 08:43:52 239
原创 003 Rust Assembly之实现康威生命游戏
0 介绍视频地址:https://www.bilibili.com/video/BV1eg411g7c8相关源码:https://github.com/anonymousGiga/Rust-and-Web-Assembly本节,我们就用WebAssembly实现一个简单的游戏。1 游戏规则在一个二维方格中,每个方格的状态都为“生”或者“死”。每个方格对应的就是一个细胞,每个细胞和它的周围的八个方格相邻。在每个时间推移过程中,都会发生以下转换:1、 任何少于两个活邻居的活细胞都会死亡。2、 任何
2022-03-08 08:28:46 291
原创 002 安装Rust和WebAssembly工具链和helloworld
0 介绍视频地址:https://www.bilibili.com/video/BV1eg411g7c8相关源码:https://github.com/anonymousGiga/Rust-and-Web-Assembly1 环境安装1、安装Rust工具链,可以参考https://www.rust-lang.org/tools/install为了很好的使用Rust和WebAssembly,我们需要Rust 1.3以上的稳定版。2、安装wasm-packcurl https://rustwasm
2022-03-07 09:52:31 508
原创 让代码丝滑般跳转,rust-analyzer,你值得拥有
1 RLS触怒了我我是一个专一的人,从学习Rust起就在vscode中使用rls作为跳转插件(主要原因其实是懒),如果不是今天它彻底触怒了我,恐怕我还会对它继续钟情下去。事情的原委是这样的,今天下载了某开源项目的代码,使用vscode打开其工程,点击rls安装的时候发现安装总是失败。本来这是一件小事,但是想起这些年来使用rls受的委屈,终于促使我决定将它换掉。听到大家都非常推荐rust-analyzer,于是我决定试试,不过真是不试不知道,一试吓一跳。2 使用rust-analyzer,构建丝滑般跳
2022-03-05 17:32:29 7545 3
原创 001 Rust和WebAssembly初体验
0 介绍视频地址:https://www.bilibili.com/video/BV1eg411g7c8相关源码:https://github.com/anonymousGiga/Rust-and-Web-Assembly1 为何是Rust和WebAssembly?低水平控制与高水平的人体工程学JavaScript Web应用程序很难获得和保持可靠的性能。Rust为程序员提供了低级别的控制和可靠的性能。较小的.wasm代码大小非常重要,因为 .wasm必须通过网络下载。Rust没有运
2022-02-23 18:59:12 347
原创 025 通过链表学Rust之使用栈实现双端队列
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们使用栈来实现双端队列。实现栈栈的实现基本上和最开始的单链表的实现差不多,如下:pub struct Stack<T> { head: Link<T>,}type Link<T> = Option<Box<Node<T&g
2022-02-17 08:50:48 257
原创 024 通过链表学Rust之非安全方式实现链表2
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节实现剩余的迭代器、Drop等。IntoIter实现代码如下://实现IntoIterpub struct IntoIter<T> (List<T>);impl<T> List<T> { pub fn into_iter(self
2022-02-14 08:41:33 125
原创 023 通过链表学Rust之非安全方式实现链表1
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list链表定义我们重新定义链表如下:pub struct List<T> { head: Link<T>, tail: *mut Node<T>,}type Link<T> = Option<Box<Node<T>>&
2022-02-07 08:23:40 425
原创 022 通过链表学Rust之为什么要非安全的单链表
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容前面我们都是使用安全的Rust编程来实现链表,但是实现的时候难度确实比较大。从本节开始,我们开始用非安全编程的方式来实现链表。栈和队列的区别是,栈是先进后出,队列是先进先出。对应到两者的push和pop函数,区别如下://栈input list:[Some(ptr)] -> (A
2022-02-03 10:02:10 2013
原创 021 通过链表学Rust之实现迭代器
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们来为我们的双链表实现迭代器。IntoIter实现代码如下://实现IntoIterpub struct IntoIter<T>(List<T>);impl<T> List<T> { pub fn into_iter(self
2022-02-02 11:25:53 240
原创 020 通过链表学Rust之push_back和pop_back等
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容之前我们实现了push_front、pop_front、peek_front,本节将实现push_back、pop_back、peek_back。这些函数的实现和之前的实现都差不多太多,只需要进行如下替换即可:tail <-> headnext <-> prev
2021-12-26 18:01:54 483
原创 019 通过链表学Rust之双链表实现Peek
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们实现双链表的Peek。实现peek根据我们在之前实现单链表的经验,我们很容易想到我们的peek函数怎么实现,如下: pub fn peek_front(&self) -> Option<&T> { self.head.as_ref().map
2021-10-31 14:57:48 275
原创 018 通过链表学Rust之实现pop front
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容pop front上一节,我们给双链表实现了new和push front方法,本节我们实现pop front,代码如下: pub fn pop_front(&mut self) -> Option<T> { self.head.take().map(|node
2021-10-31 14:56:21 290
原创 017 通过链表学Rust之实现元素添加
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容在上一节我们定义了我们的双链表,本节我们来给双链表创建new函数和pushfront函数。newimpl<T> Node<T> { fn new(elem: T) -> Rc<RefCell<Self>> { Rc::new(Re
2021-10-22 22:40:49 316
原创 016 通过链表学习Rust之安全的双链表布局
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节开始,我们将设计一个安全的双端队列。双端队列的布局我们主要使用到Rc和RefCell。RcRc: 通过Rc指针可以共享数据。Rust语言因为有所有权的概念,所以,数据失去了所有权之后,后面就无法使用该数据,而Rc就是解决此类问题的。而Rc指针指向的值是只读性质的,不能够修改。RefC
2021-10-10 10:15:16 202
原创 015 通过链表学习Rust之使用Arc
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容上节我们实现的链表是非线程安全的,因为Rc引用计数的修改不是原子的,如果要修改成线程安全的,我们需要使用Arc,同时类型必须实现Send和Sync两个trait。我们需要将Rc修改成Arc即可。...
2021-10-09 22:53:31 267
原创 014 通过链表学习Rust之持久化链表的Drop
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们实现可持久化链表的Drop。我们在之前实现可变链表的Drop的时候,我们是使用循环来进行回收的。这里我们如果采用统一的方法,是行不通的,因为我们此处通过Rc进行共享,必须等待引用计数为0 才能将数据从Rc中移除。Drop的实现Drop实现如下://实现Dropimpl<T
2021-10-07 09:26:37 186
原创 013 通过链表学习Rust之实现链表的通用函数
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们就在上一节定义的链表的基础上来实现链表的通用函数。因为本章的链表更多的操作链表的头尾和尾,所以我们在通用函数中不提供push和pop,而是提供append和tail函数。appendappend函数类似于之前我们实现的push,但是因为现在我们使用的Rc而不是Box,所以代码上略
2021-10-06 09:11:00 203
原创 012 通过链表学习Rust之持久化单链表
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容在之前我们已经实现了一个单链表,从这节开始,我们将实现一个持久化的单链表。通过持久化的单链表,可以让其他人来共享使用链表的数据。布局考虑如下例子:list1 = A -> B -> C -> Dlist2 = tail(list1) = B -> C ->
2021-10-05 09:16:41 144
原创 011 通过链表学习Rust之IterMut
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们为链表实现IterMut,既可以对元素进行可变引用的迭代器。iter_mut实现的代码如下://实现IterMutpub struct IterMut<'a, T> { next: Option<&'a mut Node<T>>,
2021-09-23 21:36:45 280
原创 010 通过链表学习Rust之Iter
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们为链表实现Iter,Iter主要是对元素的引用,因此本部分内容涉及到的Rust的知识点主要是生命周期。关于生命周期相关的知识点请看B站Rust进阶部分的讲解。Iter代码如下://实现Iterpub struct Iter<'a, T> { next: Opti
2021-09-22 19:59:55 307
原创 009 通过链表学习Rust之IntoIter
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们为链表实现迭代器。迭代器Trait的定义如下:pub trait Iterator { type Item; fn next(&mut self) -> Option<Self::Item>;}对于我们来说,我们要实现以下三个迭代器:
2021-09-18 21:49:27 368
原创 008 通过链表学习Rust之实现Peek函数
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容在之前的链表实现中,我们没有实现获取表头元素的peek方法,本节尝试去实现它。peek根据我们之前学习的知识,可以快速的写出代码如下: pub fn peek(&self) -> Option<&T> { self.head.map(|node| {
2021-09-16 21:01:55 209
原创 007 通过链表学Rust之支持泛型
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们让我们的链表支持泛型。首先修改我们的定义如下:pub struct List<T> { head: Link<T>,}type Link<T> = Option<Box<Node<T>>>;struc
2021-09-12 22:02:03 119
原创 006 通过链表学Rust之使用Option
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list微信公众号:令狐一冲详细内容在之前的章节中,我们实现了一个最小的可运行的单链表,然而这仅仅只是一个最小的可运行的链表。从本节开始,我们将创建一个更加完善的链表,这个链表能处理任何类型的元素,并且支持迭代器。使用Option在之前的章节中,我们定义Link如下:enum Link { E
2021-09-09 21:09:49 317
原创 005 通过链表学Rust之实现Drop
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容本节我们为链表实现Drop函数。按照我们常规的方式,我们可能的实现方式如下:impl Drop for List { fn drop(&mut self) { // NOTE: you can't actually explicitly call `drop`
2021-09-07 13:01:37 185
原创 004 通过链表学Rust之测试
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容上一节我们已经完成了链表的基本功能。本节就对上一节的例子进行测试。步骤如下:cargo new mylist --lib在mylist/src/lib.rs中写入如下代码:use std::mem;#[derive(Debug)]pub struct List{ hea
2021-09-05 09:56:33 125
原创 003 通过链表学Rust之给链表添加函数
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-list详细内容在上一节,我们基本确定了链表的布局方式,下面我们就来实现链表的响应的函数。对于链表来说,最基本的几个函数就是:New //new函数为创建链表的函数Push//添加元素的函数Pop //弹出元素的函数New实现如下:impl List { pub fn new() ->
2021-09-04 11:42:52 163
原创 002 通过链表学习Rust笔记之链表布局
介绍视频地址:https://www.bilibili.com/video/av78062009/相关源码:https://github.com/anonymousGiga/Rust-link-listRust中最常见的链表用函数式的语法定义一个链表如下:List a = Empty | Elem a (List a)一个链表要么是空的类型,要么是一个值后面跟着一个链表,这种被称为递归定义类型,表示为和类型。Rust中的enum就是类型系统的和类型。所以最常见的Rust的链表的定义如下:#
2021-09-03 15:16:42 333
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人