rust入坑小记-02-基础语法
1 常量 使用const声明常量,通常情况下,常量命名是全大写字母,可以用下划线_分隔单词。 123456const PI:f64 = 3.1415926;fn main() { let x = 5; println!("{}", x); println!("{}", PI);} 常量可以声明在任何作用域,且在声明的作用域内一直有效 声明常量需要指定类型 常量不可以使用mut关键字 常量只可以绑定到常量表达式,而不能绑定到函数的调用结果或者是运行时才计算出的值上 2 变量 2.1 声明变量 与ts类似,我们使用let声明变量。 1let a = 5; rust是强类型语言,由于编译器带类型推断功能,我们可以不显式指定类型,但有些情况需要显式指定: 1let b: i32 = 5; 在rust中,还可以直接在数值后直接标注类型,或使用下划线_隔开: 12let c = 5i32;let d = 15_u32; 2.2 可变与不可变 在默认情况下,rust的变量是不可变的。 123456789101112131415let a = 5;a = 6;// car ...
rust入坑小记-01-安装与环境
一、安装和配置 rust安装(linux) 1curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh cargo创建项目 123cargo new hello_worldcd helloworldcargo run cargo创建的项目分为: bin项目:可直接运行的二进制项目 lib项目:库类型项目,不可以直接运行,而是作为第三方库被引用 当我们使用cargo new project时,默认创建的项目为bin项目。 helloworld 约定俗成地,需要写一个helloworld: 123fn main() { println!("Hello, world!");} 入口 以cargo创建的bin项目入口为src/main.rs内的main函数。 123fn main() { println!("Hello, world!");} 在项目根目录使用cargo run即可运行项目。 二、rust基础篇
2022年终阅读总结
本来一点思路也没有,看到大家陆陆续续都写了,我也来跟风写写,主要就总结一下读了什么吧,今年读了不少书,值得记录一下。 一、人文社科类 1 《希腊罗马名人传(全二册)》 ISBN:9787502077518 豆瓣:https://book.douban.com/subject/35065964/ 简评:翻译不好,读起来不流畅。所以就粗略地读了读。 2 《古诗词里的快意人生:瞧,这才是风流!》 ISBN:9787514382471 豆瓣:https://book.douban.com/subject/34982326/ 简评:好书。诙谐幽默的诗人传记,最喜欢的是屈原的部分。 3 《动物农场》 ISBN:9787532741854 豆瓣:https://book.douban.com/subject/2035179/ 简评:强烈推荐,奥威尔的代表作之一。讽喻小说的经典,猪果然是智商很高的动物。 4 《历史学是什么》 ISBN:9783010553933 豆瓣:https://book.douban.com/subject/1432627/ 简评:这一系列丛书写得都不错。拿来作为历史学的入门通 ...
linux文件操作
一、介绍 1 一切皆文件 “一切皆文件”是linux系统中非常重要的概念,例如将文档、目录、硬盘驱动器、调制解调器、键盘、打印机,甚至是进程、网络通信(socket)都抽象成文件,这样做的好处是可以在广泛的资源上使用同一组工具、程序和API,对它们的操作可以统一起来,只需要使用一些文件操作接口就可以完成绝大部分操作。 因此,了解文件操作是基础,同时也是极其重要的。 2 头文件的引用路径 在这里介绍头文件的引用,是鼓励读者去头文件源码里寻找声明,例如stdio.h、fcntl.h等等,本节就是介绍寻找这些头文件路径的方法。 include后的文件名可以用双引号括起来,也可以用尖括号括起来。例如以下写法都是允许的: 12#include "..."#include <...> 前者是从当前的目录来搜索。 关于后者,这里主要讨论在linux系统gcc的头文件搜索路径,可以通过以下方法查看: 1cpp -v 不同的机器可能有不同的结果,但都大同小异,我这里的一台机器的结果如下: 123456789101112131415161718Using built-in specs.CO ...
哈,有趣的文学常识和典故
1.阡陌 “阡陌交通,鸡犬相闻。”——《桃花源记》 “阡陌”古时指田间的小路,南北为阡,东西为陌。由此引申下来又有街道、道路、田野的意思。 例如: “陌上花开,可缓缓归矣。”这里“陌上”指田野上。 “斜阳草树,寻常巷陌。”这里的“陌”指街道的意思。 2.相如赋 “千金纵买相如赋,脉脉此情谁诉?君莫舞?君不见、玉环飞燕皆尘土。”——《摸鱼儿·更能消几番风雨》 字面意思是“纵然用千金买了司马相如的名赋,这一份脉脉深情又向谁去倾诉?”这里的“相如赋”指《长门赋》,相传是司马相如所作。 “金屋藏娇”讲述汉武帝与陈阿娇的爱情故事已经脍炙人口。传闻陈阿娇失宠被贬至长门宫时,每天郁郁寡欢,听闻司马相如作文最工,便携百两黄金请求作赋,写自己深居长门的闺怨。武帝读此赋后,大为感动,陈皇后遂复得宠。 至于序言提及武帝的谥号,司马相如不可能知道,且史书上也没有记载汉武帝对陈皇后复幸之事。所以有人认为《长门赋》并不是司马相如所作。但无论是谁所作,“相如赋”这个典故已经流传开来了。 3.五花马 “五花马,千金裘,呼儿将出换美酒,与尔同销万古愁。”——《将进酒》 当初背的时候一直有疑问,“五花马”是什么马?后在网 ...
编译原理
持续更新… 一、概述 一个编译器的结构 词法分析:词法分析(lexical analysis)是编译器的第一个步骤,它负责读入组成源程序的字符流,并将它们组织成为更有意义的词素(lexeme)序列,对于每个词素,词法分析器产生一个二元组形式的词法单元(token)作为输出 语法分析:语法分析(syntax analysis)使用由词法分析生成的词法单元来构建树形的中间表示,通常为一个语法树(syntax tree) 语义分析:语义分析器(semantic analyzer)使用语法树和符号表中的信息来检查源程序是否和语言定义的语义一致。 它可时也收集类型信息,并提这些信息存放在语法树或符号表中,以便在随后的中间代码生成过程中使用 中间代码生成器 代码优化器 代码生成器 二、词法分析 1 词法分析介绍 1.1 词法分析的主要任务 词法分析是编译的第一个阶段。它的主要任务是读取源程序的输入字符,识别出各个单词,将它们组成词素,生成并输出一个词法单元(token)。词法分析器通常要和符号表进行交互,当词法分析器发现了一个标识符的词素时,它将这个词素添加到符号表中。在某些情况下,词法分 ...
c指针杂谈
一、基础概念 1 变量 关于C语言的变量,在我的另一篇文章redis源码分析第一章有介绍,由于本文的主要内容是指针,因此对于C语言的基本数据类型,请参考上述链接文章中的内容提前了解。 2 C语言程序内存布局 了解C程序的内存布局,有助于从宏观上理解变量和常量在内存中的存储。 C程序的典型内存表示包括以下部分,分别是STACK(栈段),HEAP(堆段),BSS(以符号开头的块),DS(数据段)和TEXT(文本段): 123456789101112131415161718192021222324252627High Addresses ---> .----------------------. | Environment | |----------------------| | | Functions and variable are declared | ...
clion远程gdb调试配置
1 安装cmake gcc gdbserver 首先安装所需工具: 1yum install cmake gcc-c++ gdb-gdbserver wget -y 2 源码编译gdb 由于yum安装的gdb版本较低,这里我选择的是源码安装: 首先去这个网址找到所需的gdb版本,我这里选择的是9.2,然后下载: 1wget http://ftp.gnu.org/gnu/gdb/gdb-9.2.tar.xz 解压并进入目录: 1tar -xvf gdb-9.2.tar.xz && cd gdb-9.2 安装所需依赖: 1yum install texinfo libncurses5-dev -y 确认安装目录,编译安装: 1234mkdir buildcd build../configure --prefix=/usr/local/gdb9make && make install 等待编译完成后,删除旧版本,给新版本建立软连接: 12rm -f /usr/bin/gdbln -s /usr/local/gdb9/bin/gdb /usr/bin/ ...
爬虫技术基础
前言,本篇文章是我几年前开始陆陆续续记录最初学爬虫时的笔记,现在发出来(水一篇文章)。较为基础,有些地方也比较简陋,仅供参考。如有纰漏之处,欢迎指正。 一、基本介绍 1 爬虫的基本流程 模拟浏览器发送请求->下载网页代码->只提取有用的数据->存放于数据库或文件中 对每一个步骤进行分析: 12345678910111213141516#1、发起请求使用http库向目标站点发起请求,即发送一个RequestRequest包含:请求头、请求体等#2、获取响应内容如果服务器能正常响应,则会得到一个ResponseResponse可能是:html,xml,json,图片,视频或者加密格式#3、解析内容解析html数据:正则表达式(re),第三方解析库如Beautifulsoup,pyquery等解析json数据:json模块解析二进制数据:以b的方式写入文件#4、保存数据数据库文件 2 robots协议 Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些 ...
numpy快速入门
安装 1pip3 install numpy numpy快速入门 数组是 NumPy 库的核心数据结构。创建数组的最简单方法之一是使用array函数。 1 创建数组 123456789import numpy as np x = np.array([[1,2,3],[2,3,4]]) print(x)"""输出:[[1 2 3][2 3 4]]""" array函数可以在列表甚至嵌套列表上调用。 由于此处输入的嵌套级别是2,因此生成的数组是二维的。 这意味着可以使用两个整数集对数组进行索引。 计算数组维数的最简单方法是检查数组的ndim属性,也可以通过检查数组的shape属性,数组中的元素总数使用size查看: 123456789print(array.ndim)print(array.shape)print(array.size)"""输出:2(2, 3)6""" 创建初始值为0、为1、空值(随机值)的数组: 123456789101112array=np.zeros(2)print(array)array=np.ones(2)print(array)array=np.empt ...