Rust -- 所有权(Ownership)
所有权(Ownership) 是 Rust 最独特的特性,它使 Rust 能够在不需要垃圾回收器(Garbage collector)的情况下保证内存安全。
因此,理解 Rust 中的所有权如何工作是非常重要的。
这篇文章里,我们将介绍 Rust 中的所有权以及几个相关特性:借用(Borrowing)、切片(Slice)以及 Rust 如何在内存中放置数据。
1. 什么是所有权?Rust 的核心特征是所有权。虽然这个特性很容易解释,但它对 Rust 语言的其余部分有很深的影响。
所有程序在运行时都必须管理它们使用计算机内存的方式。有些编程语言(比如 Java、Go 语言)有垃圾收集(Garbage collection),它在程序运行时不断地寻找不再使用的内存;在另一些编程语言(比如 C/C++)中,程序员必须显式地分配和释放内存。
Rust 使用了第三种方法:内存由所有权系统管理,所有权系统有一系列用来分配和释放内存的规则,编译器会在编译时检查这些规则。所有的所有权特性都不会在程序运行时减慢程序的速度。
对很多程序员来说,所有权是一个比较新的概念,需要一些时间来适应。好消息是,你在 ...
Rust -- 常见编程概念
很多编程语言的核心概念都是共通的,Rust 也一样。这篇文章简单说说 Rust 中的一些常见编程概念,其中很多都与其他编程语言相同或相似。
1. 变量与可变性1.1. Rust 中的变量Rust 中的变量默认是不可改变的(immutable),不过可以加修饰符使其可以修改。
Rust 由编译器保证不可变的变量一定不会被修改。
注意,这里的不可变,与其他语言中的 const 不一样,Rust 自己也有 const 修饰符,区别在 1.3 节说。
下面举一个例子:
123456fn main() { let x = 5; println!("The value of x is: {}", x); x = 6; println!("The value of x is: {}", x);}
执行 cargo run 编译并运行,会得到以下的报错信息
123456789101112131415161718error[E0384]: cannot assign twice ...
Rust -- Cargo - Rust 的构建系统和包管理器
如果你已经阅读过 “快速配置 Rust 开发环境并编写一个小应用“ 这篇文章,关于 Cargo 的内容可能会有少量重复。
Cargo 是 Rust 的构建系统和包管理器。大多数 Rustacean 们使用 Cargo 来管理他们的 Rust 项目,因为 Cargo 可以帮你做很多事,比如构建代码、下载并编译依赖库。
最简单的 Rust 程序,比如 “安装 Rust 然后输出 “Hello, world!” “ 这篇文章编写的输出 “Hello, World!”,没有任何依赖。所以如果使用 Cargo 来构建 “Hello, world!” 项目,就只会用到 Cargo 构建代码的那部分功能。
但在编写更复杂的 Rust 程序时,你就会添加一些依赖项,使用 Cargo 可以让这个事情变得简单。
一般从 rustup 安装的 Rust 自带了 Cargo。如果通过其他方式安装的话,可以在终端输入如下命令检查是否安装了 Cargo:
1cargo --version
如果你看到了版本号,说明已安装!如果看到类似 command not found 的错误,你应该查看相应安装文档以确定如何单 ...
Rust -- 安装 Rust 然后输出 "Hello, world
如果你已经阅读过 “快速配置 Rust 开发环境并编写一个小应用“ 这篇文章,可以直接从 2 开始。
1. 安装 Rust官方推荐的做法是通过 rustup 来安装 Rust。rustup 是一个管理 Rust 版本和相关工具的命令行工具。下载时需要联网。
1.1. 在 Linux 上安装 rustup1$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
这会下载一个脚本,安装 rustup,然后会自动安装最新稳定版的 Rust,成功会提示下面的内容
1Rust is installed now. Great!
另外,你可能需要一个链接器(Linker),你大概率已经有了,如果没有的话,自己尝试安装一个 C 编译器,它通常包括一个链接器。C 编译器也很有用,因为一些常见的 Rust 包依赖于 C 代码。
1.2. 更新或卸载 Rust更新
1$ rustup update
卸载
1$ rustup self uninstall
1.3. 检查是否正确安装了 Rust1$ rustc ...
C/C++ strftime() 与 strptime() -- 时间与字符串的转化
在 C/C++ 中,strftime() 和 strptime() 两个函数用于时间与字符串之间的转化,它们都在头文件 time.h 或 ctime 中。
1. strftime() — 将 tm 时间结构体转为指定格式的时间字符串函数声明如下
123size_t strftime (char *__restrict __s, size_t __maxsize, const char *__restrict __format, const struct tm *__restrict __tp);
__s: 存放转换后指定格式时间字符串的起始地址;
__maxsize: 可以在 __s 写入字符串的最大长度(含末尾的 \0);
__format: 待写入 __s 的格式化字符串;
__tp: 时间 tm 结构体的指针;
返回值(size_t): 在 __s 写入的字符串长度(不含 \0)。
下面用代码说明一下
123456789101112131415161718#include <iostream>#include <ctime>int main ...
写一个小程序在新建 md 文件时添加头部信息
在我用 typecho 写博客之前,曾用过一段时间的 hexo,hexo 在用命令创建 markdown 文件的时候,可以使用模板,然后创建出来的 markdown 就会带了一些模板中预设的内容,比如头部说明,并且 hexo 使用头部说明来辅助解析 markdown。
在 typecho 这里是不需要这个头部内容来辅助解析 markdown 的,但是按很多人写 typecho 的习惯,一般是先在本地写,写完拷贝到 typecho 浏览器后台的编辑器里,设定一下发布时间、类别、标签等信息再发布,并且本地也留一份备份。
问题就在于,我认为本地的这个备份中如果包含头部信息,以后看起来会比较方便,拷贝到 typecho 编辑器里的时候,略过这个头部就好了。
之前每次都是手动在每个 markdown 文档中添加头部,着实有点麻烦,于是就想着写个简单的小程序,稍微减轻一下这个工作量。
适用系统:Unix 系
1. 效果预览先看看效果吧,我这里现在编译好的程序文件名为 createPost
在命令行输入
1./createPost "写一个小程序在新建 md 文件时添加头部信息" ...
在 CentOS 8 下使用 Nginx 从 0 开始配置 Typecho
本文 Linux 系统环境为 CentOS 8.2。
搭建 typecho 开发环境需要安装并配置以下这些
nginx
SQLite
php & php-fpm
typecho
开始前的几个建议,避免踩坑:1. 在系统中单独创建一个具有 root 权限的用户来配置 typecho 环境;2. 安装 php 的时候要格外注意,要安装一些依赖,以及一些扩展,搞错了的话会比较麻烦。
这里仅指导新手第一次成功配置 typecho,具体某些配置项的作用大家后面再自行了解。
下面逐个解决上面列出的,这里假定你已经以一个具有 root 权限的用户登录到 CentOS,如果你直接在 root 用户下操作的话,下面的 sudo 就都不用加了。
1. Nginx1.1 安装 nginxNginx 安装比较简单,直接输入命令安装即可:
1sudo yum install nginx
1.2 配置 nginx 使其支持 php 与 typecho找到 nginx 的安装目录,里面有一个 nginx.conf 配置文件,修改它。我这里是默认安装目录 /etc/nginx,如果你的 nginx 安装 ...
解决服务器 SSH 连接无响应断开时间过短的问题
使用 ssh 连接到阿里云服务器的时候,总是一会儿不动就被断开连接了,有点烦,这里解决一下这个问题。
先编辑 sshd_config 文件
1vim /etc/ssh/sshd_config
找到下面两行
12#ClientAliveInterval 0#ClientAliveCountMax 3
去掉前面的注释符号 #,改成
12ClientAliveInterval 60ClientAliveCountMax 1440
ClientAliveInterval 60 表示当客户端没有向服务端发送消息时,服务器端每 60 秒向客户端请求一次消息,客户端响应以保持连接。默认值为 0,即不服务器端不向客户端请求消息。
ClientAliveCountMax 1440 表示服务器发出请求后客户端没有响应的次数达到 1440,就自动断开 ssh 连接。结合 ClientAliveInterval,刚好是 24 小时。
重启 sshd 服务,之后新 ssh 过来的连接就都生效了
1service sshd restart
解决使用 Nginx 的 Wordpress 修改固定链接后 404 的问题
1. 问题场景在固定链接中选择结构为文章名后,再打开文章页面提示 404。
2. 解决方案编辑 nginx 配置文件,我这里 nginx 安装在 /etc/nginx/ 目录下
1sudo vim /etc/nginx/nginx.conf
找到 server{} 字段,在其中加入
1rewrite /wp-admin$ $scheme://$host$uri/ permanent;
然后再在 server{} 中的 location / {} 字段最后,加入
123456789if (-f $request_filename/index.html){ rewrite (.*) $1/index.html break; } if (-f $request_filename/index.php){ rewrite (.*) $1/index.php; } if (!-f $request_filename){ rewrite (.*) /index.php; }
最后重启 nginx ...
在 CentOS 8 下使用 Nginx 从 0 开始配置 wordpress
本文 Linux 系统环境为 CentOS 8.2。
搭建 Typecho开发环境需要安装并配置以下这些
nginx
MySQL
php & php-fpm
wordpress
开始前的几个建议,避免踩坑:1. 在系统中单独创建一个具有 root 权限的用户来配置 wordpress 环境;2. 在 mysql 中创建一个用作 wordpress 数据库的独立的 database;3. 在 mysql 中创建一个新用户,并赋予操作 wordpress 那个数据库的全部权限;4. 安装 php 的时候要格外注意,要安装一些依赖,以及一些扩展,搞错了的话会比较麻烦。
这里仅指导新手第一次成功配置 wordpress,具体某些配置项的作用大家后面再自行了解。
下面逐个解决上面列出的,这里假定你已经以一个具有 root 权限的用户登录到 CentOS。
1. Nginx1.1 安装 nginxNginx 安装比较简单,直接输入命令安装即可:
1sudo yum install nginx
1.2 配置 nginx 使其支持 php找到 nginx 的安装目录,里面有一个 ngin ...