
rust
文章平均质量分 74
fpcc
行之苟有恒,久久自芬芳!
展开
-
rust的应用前景分析
对rust未来进行一些分析原创 2022-06-11 16:17:30 · 6658 阅读 · 0 评论 -
webassembly学习——文本格式
一、文本格式WASM有两种格式,今天讲供看的文本格式(以.wat后缀结尾)。这个格式一般是将其抽象语法呈现为S-expressions,也就是常说的S表达式语法。它同样由一系列的属性构成,允许线性的表示函数体。这种文本的格式是一般是UTF-8格式的。为了能够将文本格式和前面提到的二进制格式对应上,就需要一系列的给定来实现这种格式。二、文本格式的表达S表达式,这个如果有编译器的相关经验或者说看过编译器原理实现相关的书籍的话,应该没有什么难度。但是对于没有此类经验的,也可以忽略过去,或者走马观花的看看即可原创 2022-05-11 17:09:40 · 443 阅读 · 0 评论 -
rust中的slice
一、什么是切片(Slice)切片这个概念很形象,也很容易为人理解。正如一个面包,如果一个无法吃掉全部,那么给他切一片不正好么?既不浪费,又不会引起不必要的后果。这样比喻不是很贴切,但其实意思有些类似。切片其实是“一个双字 对象(two-word object),第一个字是一个指向数据的指针,第二个字是切片的长度。这 个 “字” 的宽度和 usize 相同,由处理器架构决定”,不过,切片的大小在编译时是无法固定的。一般可以认为切片是数组的一部分和或者全部的所有权,而且其是动态的,可以随时扩展。其实如果有c/原创 2022-01-27 11:30:41 · 926 阅读 · 0 评论 -
rust的性能测试
一、性能测试在rust中,只有lib.rs才可能进行extern crate的集成测试,二进制形式的测试是不可以的。原因在于rust的设计初衷就是在main.rs中尽量少完成功能,更多的功能转入到库中。这样,在二进制主程序中就不会有过多的性能来测试。在rust中,针对性能测试也提供了专门的属性#[bench]支持,这样就可以快速的在指定的场景资源情况进行资源测试,这在一门语言中还是比较少见的。二、rust中如何进行性能测试看下面的代码:#![feature(test)]extern crate t原创 2022-01-19 16:09:49 · 2309 阅读 · 0 评论 -
rust的测试
一、测试软件测试越来越受到所有开发人员的重视,当然,很多人也不重视。只是相对于以前来说。至少,现在技术型公司都安排了测试部门,以前可都是开发人员自己测试一下就OK了。Edsger W. Dijkstra 说“Program testing can be a very effective way to show the presence of bugs, but it is hopelessly inadequate for showing their absence.”可见软件测试多么重要又多么让人绝望。原创 2022-01-12 12:13:18 · 1419 阅读 · 0 评论 -
rust的高阶函数
一、高阶函数头等函数,高阶函数,基本上算是一回事儿。细节上可能头等函数更丰富一些,比如可以赋值给变量,其它的如作参数和返回值,二者就基本一样了。所以说Higher-order function(HOF:高阶函数)和First-class Function(头等函数)就是可不可心变量化的区别。在rust中是支持高阶函数的。functional函数式编程,也是目前几乎所有语言都支持的一个发展方向,比如c++和JAVA、js 和python等,都支持的很不错了。当然和纯粹的函数式编程的语言Lisp、Haske原创 2022-01-06 13:56:49 · 819 阅读 · 2 评论 -
rust的运算符的重载
一、运算符重载运算符重载其实不是什么新鲜的东西,而且这个语法其实争议非常大。一些支持这类语法的语言其实也有不少的痛脚在其中。举一个例子,比如c++,左值和右值的问题,本来一个轻松的回答,“等号左面是左值 ,右面的是右值",但由于有了运算符重载,这玩意儿就不敢说对了,是吧?所谓重载,其实就是把常见的允许重新定义其它含义的运算符,用语法层次固定一下。举一个常见的例子,一头牛和一查树怎么比较大小,没有可比性啊。但是如果我们把牛和树的年龄重新定义为比较大小的含义,那么不就有了可比性么?就酱。没啥!二、rust原创 2021-12-21 11:55:18 · 2631 阅读 · 0 评论 -
rust的虚类型参数
一、虚类型参数有过编程经验的同学可能知道,在一些程序的函数参数里有哑元一说,在c++的一些std::function这个函数类型中,也有占位符一说。这也就是说,在实际的编程中,可能会遇到一些参数必须有,但又没有实际意义,而又不能占用空间。这其实如果最简单的处理方法是直接告诉编译器配置一下,但一些代码不可能在一个平台,一个编译器下使用,这就使得复杂性无形变得增加不少。在Rust中,为了处理这种情况,使用了虚类型参数或者有的叫做幽灵数据,虚类型(phantom type)参数和上面描述的一致,是需要编译器做原创 2021-12-06 15:07:14 · 964 阅读 · 0 评论 -
Rust发散函数
一、发散函数(diverging function)Rust搞了这个么一个发散函数(diverging function),确实是被撞了一下腰。翻了下文档,发散函数就是用!作为返回类型收尾,不再返回的一种函数。需要注意的是,函数中不返回的函数有很多,但只有发散函数这种不返回,也不会向下执行,或者说当前线程就崩溃了,退出了。而其它不返回的函数,程序仍然会继续向下执行。最简单的例子就是在loop循环中调用一些不返回的函数来反复监听或者执行某项任务。在发散函数后面,如果仍然有一些其它的代码,编译器会报类似下面原创 2021-12-03 10:25:28 · 2525 阅读 · 2 评论 -
Rust的标准输入输出
一、标准输入和输出在谈文件读写时提到,它也算是IO的一种,这次谈一下标准的输入输出。什么是标准的输入输出?其实简单理解一下就是IO读写操作到stdin 和stdout上的输入和输出,其实还有类似的stderr等。这些可能是屏幕也可能是其它显示单元,甚至可能是一个“黑洞”。二、Rust中的对其的支持在Rust的std::io中也提供了相关的IO标准输入和输出,在其它一些语言中也有叫做输入输出流的,意思基本都是一个意思,只要不是过于严格的场景声明基本可以当成一回事。在Rust中,其实这些操作是实现了Tra原创 2021-12-02 11:12:33 · 2145 阅读 · 0 评论 -
rust的数据类型转换
一、数据类型系统任何语言一定会存在两种类型,一种是原生的数据类型,比如常见的整形,双精度啥的;另外一种就是自定义的数据类型,这个就更好理解了,比如自定义的类和结构体等。对于有过C/C++编程经验的人都有过这种经验,比如把short转成int类型,或者把long 转成int类型。在后者的转换过程中,编译器会给一个警告,说会有裁剪导致数据丢失的问题。另外就是指针类型的转换使用reinterpret_cast,其它还有一些类似于static_cast、dynamic_cast等强制类型转换。类型转换有显示的也原创 2021-12-01 12:20:34 · 2985 阅读 · 0 评论 -
Rust对文件的操作
一、文件IO操作在类unix系统中,一切都是文件,所以说广义的文件操作,其实包括很多:Socket、管道、内存映射等等。其实文件操作无论怎么变化,主流仍然是对外设的访问。计算机本身的组成,是一系列的硬件整合在一起的,单纯的只有CPU和内存是搞不动事情的。所以,一谈到文件操作,一定要清晰的看穿是哪类文件操作。文件操作,其实就是对IO操作的一种的抽象。这种抽象隔离开了不同设备的不同之处,由具体的设备驱动来解决这种抽象的不同。所以,读写文件的API,有read,write,也有send和recv,其实就是演进原创 2021-11-29 16:04:35 · 3564 阅读 · 0 评论 -
rust的错误和异常
一、错误和异常在所有语言中,对程序运行不按照设计的“套路”出牌,都是错误。异常可以理解成程序的错误引发了运行的故障,甚至导致程序崩溃。正因为如此,对错误和异常的处理是所有语言都必须拥有的一个行为,无论是从语法层面还是从运行检查层面,都是无法回避的。同样,Rust也不能例外。二、Rust中对错误的处理在前面分析Result和Option时,分析过返回值和错误的处理。在Rust中,没有异常这一说,但为了和其它语言的描述保持一致,这里也叫做了异常的处理。Rust语言中有可恢复错误(recoverable)和原创 2021-11-25 15:46:56 · 1844 阅读 · 0 评论 -
Rust的模式和匹配
一、模式和匹配模式和匹配可以理解成一个模型一个路径结果,举一个不太恰当的例子,你的电脑上有很多种U盘的接口,你拿着一种线缆去插,插进去哪个,就用哪个,那个U口就是一个模型,那个线缆就是一个结果。或者有如小时候儿玩儿的泥板模范,把泥装上去,用力一按,就出来一个图形的泥块,在rust中也是如此。二、rust中的模式和匹配模式是 Rust语言中的一种特殊的语法,主要用来和相关类型中的结构,它和 match 表达式以及其他结构可以提供更多对程序控制流程的控制权。模式主要由以下组成:字面值、解构的数组、枚举、结原创 2021-11-23 11:55:06 · 1392 阅读 · 0 评论 -
Rust的集合
一、Rust中的集合集合这个概念和数学的本质是一样的,就是一群类似的数据放到一起。在Rust中主要有三种集合:1、字符串这个应该不用过多解释,就是一串字符组合在一起。2、Vec学过c++的STL的同学可能一下子就会明白,一个动态数组,平坦空间上的。3、HashMap这个其实是两个数据结构Hash和Map组合在一起。二、集合的应用1、Vec的应用vec是一个动态增删数据的数组,平均的时间复杂度是O(1)。换句话说,它可以随机的访问数据内容;同时,对首尾的写操作也是O(1)。看下面的例程:原创 2021-11-18 11:09:02 · 800 阅读 · 0 评论 -
Rust的条件编译
一、条件编译条件编译其实是从名字就可以知道意思,通过控制预设的编译条件来通知编译器按照指定的条件来编译当前程序。注意,它是一种静态编译的手段。学过c/c++的应该都非常清楚。条件编译一般在语言中会有条件编译指令。比如在c++中有#ifdef等等。条件编译一般都不会特别复杂,可以理解成一个编译器的编译开关即可。二、Rust中对条件编译的支持在Rust中,同样支持条件编译。它使用的其实是上节中的属性来实现条件编译的,主要是cfg这个配置属性。其实常见的编译条件就是不同的平台和不现的发布版本。比如Windo原创 2021-11-15 16:57:47 · 3706 阅读 · 0 评论 -
Rust的属性
一、什么是属性Attributes,属性,这个名词可在不少的语言中都有。属性有不同的表述的含义,比如常见的Getter和Setter,此类属性在Java、c#等语言中都广泛存在。另外一种就是将要讨论的作为一种元数据(Meta)的表述,是一种通用的用于表达元数据的特性,借鉴ECMA-334(C#)的语法来实现ECMA-335中描述的Attributes。在Rust中,属性只能应用于Item(元素、项)。二、Rust属性Rust属性的基本格式如下:#[name(arg1, arg2 = "param")原创 2021-11-10 10:57:43 · 2554 阅读 · 0 评论 -
Rust的FFI
一、开放应用多平台,不同语言之间的互相调用,这是任何一门想流行的语言都不能绕过去的坎儿。光想自己玩,不带大家玩,最后大家就都不和你玩儿了。在前面搞过安卓,里面有JNI;后来又搞过c#,里面也有相关调用的开发约定。再后来,又有Python、Golang等等吧。反正都接触过。正所谓在一个优秀的统帅的面前没有一个不行的将军,要因材而用。语言亦是如此,各用所长,最后大家一起搞定工程即可。正如菜刀,你看看专业的厨师那有多少种?有砍骨头的,有切肉的,有切菜的,有切鱼的。这样就明白了吧。二、FFIRust当然也有自原创 2021-11-09 15:31:10 · 441 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-泛型
一、泛型啥是泛型,啥是泛型编程?泛型,说得通俗一些,就是类型无关的编程。更严格的定义可以去软件相关的书籍去学习。泛型的优势在于,开发人员可以不用考虑具体的数据类型而注重于数据结构和逻辑的开发,减少重复代码逻辑的开发,提高开发效率。用一个常用的例子,如果你比较两个整数的大小,写好代码后,客户又提出比较两个长整型的数大小,然后又提出两个单精度的比较,然后又是双精度,然后又…,其实对你来说,可能好多的代码除了类型,完全都是一样的。泛型有泛型的好处,也有它的不好之处,比如代码比较晦涩;出现问题不好调试定位;会产原创 2021-11-05 11:09:32 · 226 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-库的使用
一、库学习过当前主流的开发语言的同学们,一定会接触过库,无论是火得不行的Python还是老的掉牙的VB,老当益壮的C/C++,还是互联网的Java,go,离开库,他们啥都不是。一定要把库和框架分清楚,库和框架有时候儿就是不好说明白。库一般来说是组成框架的一个单元或者说一个基础模块,而有些中小的框架可能就是一个库或者几个库。另外还要把包、模块和库分清楚,包和模块是一个逻辑上的概念,而库可能是包和模块的组合体。可以把库理解成一个应用编程上的单元或者从开发角度上的一个基础程序。在Rust中,包是老大,库是老二原创 2021-10-27 15:53:59 · 1038 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-宏库
一、常用过程宏库一般来说,一个好的语言一定会提供一些强大的基础库,如C和C++,都有标准的库,这些库久经风雨。而Rust做为一门新语言,当然也必须有,同时,如果能发展一批第三方或者说爱好者提供的强有力的库,那么整个生态的建设也会迅速的展开,保证语言快速的向外溢出。比如c++的Boost库就号称标准库的预备队。第三方的库也是比比皆是。对于宏编程,Rust中提供了几种过程宏的库操作支持,这个在前面提到过,即:1、Syn它是基于TokenStream的一种语法分析过程,它并不很强大,需要自定义扩展一些宏,原创 2021-10-19 14:45:27 · 485 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-宏展开
一、宏的说明在总览了宏在Rust中的情况后,本篇分析一下Rust中的宏应用的一些细节,而这些细节可能就是在其后使用宏时,填坑的必备知识,一起来吧。二、宏定义Rust中宏定义格式是:macro_rules! macro_name { macro_body }macro_rules就是声明宏,它是定义宏的一类。它又被称为“macros by example”。macro_name 就比较简单了,是一个宏的名字或者说是一个函数名称。而 macro_body就是宏的真正的定义部分,Rust的相关书籍都说原创 2021-10-16 10:50:24 · 948 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-宏
一、宏看到宏,学过C/C++的小牛们都会嗨起来,这玩意儿不好使啊。基本上在c++编程中,都不推荐使用宏来进行编程,为啥?这玩意儿出了错不好调试不好定位。强大归强大,一个不留神就把自己给掉打一顿,真心没啥人用。不过,看一些有名的框架其实都在大量使用宏。用宏编程有优势,一个是可重复高效使用,第二个是可以动态生成代码。特别是后者,对于C/C++这种不支持反射的语言,简单就是一种额外的Bug啊。看过MFC源码的人估计都明白用宏搞类的自动生成有多么强大,当然,也有多么的难懂。其实在Rust中,就是复用了这两个特点原创 2021-10-14 12:11:16 · 319 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-Box
一、Box在Rust语言中,堆和栈的操作一定是离不开的。这玩意儿是老生常谈。许多人,甚至包括一些老鸟,其实都分不清数据结构里的堆和栈与操作系统中的堆和栈有什么不同。这里不对堆和栈进行分析,只要明白堆需要自己控制分配和释放而栈是自动的就可以了。像一些书上讲的啥栈是由高到低的地址顺序,其实这都不严谨,所以要多看一些资料。自己管理堆内存就意味着可能会有内存泄露,这是所有没有GC的语言都无法回避的问题,也是所有人对指针的一种恐惧,这就是根源。Rust本身会通过生命周期和所有权对类似局部变量引用的返回之类的方式进原创 2021-10-13 10:39:26 · 412 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-Result
一、Rust中的Result前面提到了Rust中对返回结果的处理有两个,一个是Option,那么另外一个就是本文中的Result了,Result比Option提供的内容更充分。这也是它的一个重要的优点。从这个角度来看,可以把Result看作Option的一个更高层次的版本。看一下在库中的定义:#[derive(Copy, PartialEq, PartialOrd, Eq, Ord, Debug, Hash)]#[must_use = "this `Result` may be an `Err` va原创 2021-09-29 09:40:21 · 238 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-反射
一、反射反射这个术语,现在基本烂大街了,可是当初刚刚出来时,可是一个令人眼前一亮的好东西啊。特别是在Java和c#上,它起到了一种非常棒的设计体验。相比之下,c++和C简单就是设计实现上的一种不友好的朋友。那么什么是反射呢?说直白一点就就是在运行时可以动态获得类的信息或者说动态调用类的对象的一种机制。Rust看来也想在一方面分一杯羹,可惜的是,它的替代对象是C/C++,所以支持的不能很全面,或者说一个蹩脚的支持。它只支持编译时反射即对 'static 生命周期的变量(常量)进行反射!二、Rust对反射原创 2021-09-28 09:39:47 · 1452 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-Option
一、Rust返回值处理在几乎所有的语言中,都有两个问题需要处理。一个是返回值,特别是错误的返回值;另外一个是异常。而有过开发经验的都知道,在低级语言中,如C/c++中,大多数异常,往往意味着整个线程甚至整个进程的崩溃。所以一般都是使用错误返回值来处理程序的问题。而Rust号称是要搞定c++的,所以它也得面临这两个问题。这次先说一下Rust返回值,返回值有两个处理方式,一个是Option,一个是Result。这次只谈Option,下一次再谈Result。二、Option在Rust中,Option的定义原创 2021-09-25 13:43:13 · 326 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-协程
一、协程首先说明的是,Rust对协程的支持是一波三折,对RUST的相关技术还是了解的有所欠缺,所以对RUST认知是现在原生是不支持协程的。但可以通过一些库或者自己编写来实现协程。比较有名的TOKIO这个库。可以把其中的Task当作是协程。理解是理解,其实它不是协程,要明白这一点。早先RUST有runtime机制和协程,后来大佬们觉得可能这玩意儿和RUST设计的初衷有所违背,所以就砍了。不服不行,真的。RUST原来有一个绿色线程,其实就是协程模型。二、Rust对协程的支持绿色线程,也可以按经典的协程的原创 2021-09-23 16:24:37 · 1265 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-智能指针
一、智能指针一般来说,有过C/C++语言编程的人来说,对智能指针并不陌生。所谓智能指针,并不是普通人想象的指针是智能的,它其实是对原生指针的一种封装,这种封装通过引用计数器的方法来判断指针是否还在使用,从而自动的管理指针对应的内存资源回收。之所以叫智能,应该是和原生指针的手动处理对应的称谓。不过智能指针并不是万能的,这个有兴趣可以参看以前的C/C++相关的博客文章,使用不当,仍然会有内存资源的泄露。在Rust中,做为号称要取代c++的一种语言,没有智能指针那是说不过去的,既然谈到了智能指针,就不得不提到原创 2021-09-17 14:59:47 · 387 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-所有权和借用
一、资源的管理在几乎所有的语言中都存在一个根本的问题,那就是资源的管理问题,特别是内存资源和IO资源的管理,尤其是前者,人们对C/C++意见最大的就是指针的随意应用造成的悬垂指针和空指针的问题。而一旦出现这种问题,最终的体现就是整个程序的直接挂掉。特别是悬垂指针引起的程序异常崩溃,由于出现时机的不同以及C/C++对一些内存处理机制的限制(比如数组越界应用没问题但一旦释放就崩溃),导致问题异常的定位非常困难。之后Java异军突起,打得就是垃圾回收机制,这直接从前者嘴中掏走了半边的天空。之后在资源管理上的竞争原创 2021-09-15 11:54:16 · 199 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-Pin介绍
一、PIN和Safe其实PIN这个东西,和Safe你说关系大也不多大,你说小也不多小。其实Rust语言搞得声势这么大,就出来一个问题,很多小细节和它所说的一些安全是无法自然衔接的(请注意,是自然)。那么为了解决这些问题,就必须出现 一系列的各种小技巧或者说小办法,这个Pin其实就是其中的一类。在c++或者其它一些语言中,是有深拷贝和浅拷贝之说的,在Linux中有Cow一说,这些内存处理的情形,或多或少和这个Pin有一些相通之处。在Rust中,很多情况下,其实Pin是用不到的。因为大多数情形下,都实现Un原创 2021-09-04 14:57:07 · 847 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-关联类型
一、泛型(Generic Types)和关联类型(generic associated types)泛型编程对任何一种语言来说,都是一种追求的目标,如果不支持泛型,那一定会被骂,比如Golang,比如早期的Java。Java是改过自新了,而Go还在独善其身。这里不要谈泛型的优缺点,毕竟仁者见仁,智者见智。但在Rust中支持泛型,这肯定是的了。学过c++的人知道,在c++的模板编程(泛型编程)中,在特化过程中,是有偏特化、全实例化(不是全特化)的技术实现的。不明白就回去翻一下,如果你理解了全实例化,就基本明原创 2021-08-24 09:35:13 · 562 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-动静态分发
一、Rust中的多态和泛型在c++中多态是动态多态和静态多态的,静态多态基本是使用泛型或者宏来实现。而动态多态就是常见的虚表实现。在Rust中,也有类似的实现。它有两种分发 (dispatch) 机制:静态分发和动态分发。这就和c++中的模板和宏实现类似 ,优点是速度快但可能会导致代码膨胀(code bloat);动态当然就是利用虚表来实现了,这个的缺点是执行速度会受到影响,特别是在工程很大的情况下,确实是一个不小的 问题。需要说明的是,在早期,动态分发和静态分发,采用的形式基本差不多,不同的在于编译器原创 2021-08-18 09:37:31 · 456 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-trait
一、Rust中的Trait学习c++的人都知道Traits,萃取技术,它主要是用来得到具体的数据类型。在Rust中,这个Trait,当做了一种“特性”,更类似于接口这个概念。从宏观上讲,接口比c++的Traits更高级更广大了一些。不过本质上,仍然是对一些具体的性质的处理和获取。如果单纯的从Rust来看,可能Trait更像是函数的“萃取”。用Rust的表述来说,就是函数的签名。看一下《RustPrimer》中的例子:trait HasArea { fn area(&self) ->原创 2021-08-14 16:23:59 · 440 阅读 · 1 评论 -
RUST网络客户端的基本技术说明-闭包的实现和高级用法
RUST网络客户端的基本技术说明-闭包的实现和高级用法一、闭包中的Move在Rust,生命周期和所有权一个非常重要的实现。在闭包中,一般变量就像是小天体掠过大天体时被捕获,再也无法离开。那么要想离开怎么办?只有继续提供能量,能冲出大天体的束缚。你可以想象一下,有一个上帝之手,轻推了一下一颗小天体(比如流浪地球中的地球),然后整个小天体就犹如一个子弹飞出了大天体的范围,向着未知继续前进。那么在Rust的闭包里,提供这个能量的是什么?是Move这个关键字。看一个例子:let mut n = 8;let原创 2021-08-10 14:53:11 · 439 阅读 · 1 评论 -
RUST网络客户端的基本技术说明-函数和闭包
一、函数在朴素的计算机语言中,函数几乎是整个程序编写的最小的单元,如果扣除对一些大型数据结构的认知,几乎要完成的所有的动作,都需要函数做底层的支持。发展到今天,仍然是如此。Rust必然也必须是把函数当成一个极其重要的环节来操作整个应用的实现。那在Rust中的函数和其它语言的函数应用有什么异同呢?1、函数的声明函数的声明如下形势:fn FuncName()->() { //statements}整个函数以fn声明开始,后面跟函数名称和小括号包裹的参数定义,其后跟随的是返回值。2、函数原创 2021-08-07 14:01:08 · 344 阅读 · 2 评论 -
RUST网络客户端的基本技术说明-裸指针和unsafe
一、unsafeunsafe这个英文单词,几乎可以让人明白这种用法是为了兼容其它“低级”语言的用法的,意味着这种作法是不推荐不安全的。这种作法在c#等其它语言都有类似的形制。比如c#在操作指针时,也会有类似的操作。这也是后发的高级语言的一个痛点,如果想在某个领域尽快的扩大影响,就不可避免的已经在这个领域已经占据有广泛的影响力的语言。从某种意义上来讲,在C/C++语言中直接操作汇编语言,也可以划到这种unsafe的用法中。换句话说,新的高级语言提供了一系列的高级的安全用法,但是在某些情况下又必须使用一些原创 2021-08-01 12:45:01 · 1051 阅读 · 0 评论 -
RUST网络客户端的基本技术说明-多线程
一、多线程上文中的网络客户端中实现了一个基本的线程应用。线程,几乎在所有的高级编程语言中都是不可避免的难点和重点。那么到底什么是多线程?这就需要说明什么是并行什么并发?并发的意义就是在于多个事件在同时(或者说接近同时)发生;并行是只多个事件完全在不同处理单元上同时进行;映射到计算机上,并发更接近于多线程在单CPU上的的应用而并行更接近于多核甚至是多CPU的执行应用。但是无论是并发还是并行编程,都是多线(进)程的广义上的应用。做为新出现的一门高级语言,RUST当仁不让的要支持并发和并行的编程,也就是说一原创 2021-07-31 15:08:56 · 773 阅读 · 0 评论 -
RUST网络客户端的基本技术说明
一、客户端的说明上文中的网络客户端,其实就是一个比较简单的TCP通信客户端,原来为了实现和服务端的通信,增加了相关的通信协议的相关内容,在这里分析时,可以忽略掉,毕竟它和RUST本身的内容没有什么太大关系。用一个实际的例子讲解分析RUST可能更容易理解和进一步的掌握实际应用的形式和特点,不会为了学而学,导致学而不会用的现象出现。二、主要技术在这个客户端里,应用到的主要技术有:1、变量声明和使用2、二进制数据的操作3、分支匹配跳转4、线程应用5、Socket的应用下面就按照这几个方向的内容原创 2021-07-09 10:43:27 · 624 阅读 · 0 评论 -
RUST网络客户端的基本框架
一、说明在前面介绍了Rust的基础环境,今天就开始学习RUST的一个基本的网络客户端架子(不是框架),并从这个基本架子开始,开始学习RUST的基本知识和各种用法。鉴于RUST现在区块链领域的应用趋势是越来越广泛,搞一搞RUST也是势在必行。二、应用照老样子,先看一个基本的例子:mod datacontrol;mod server;mod databuild;use std::net::{TcpListener, TcpStream};use std::thread;use std::io原创 2021-07-03 11:35:09 · 979 阅读 · 4 评论