Rust 自引用结构

今天和朋友交流的时候遇到了自引用问题,之前就在看 Rust Bible 的时候看到过,但是一直没用 Rust 写过什么数据结构,所以没有使用这个的机会,所以今天就来尝试一下。 ...

2023 2月 23 · 1 分钟 · vaaandark

Lua 中的三目运算

在看 skywind3000 大神写的 z.lua 时发现了神秘写法: os.argv = arg ~= nil and arg or {} os.path.sep = windows and '\\' or '/' 不需要怎么思考就能知道这个是三目运算。但是在我认知中,Lua 是不支持三目运算符的,定睛一看才发现这个是通过 Lua 布尔运算中的短路特性模拟的三目运算。 ...

2023 2月 09 · 2 分钟 · vaaandark

用 Rust 重写星际译王

我经常有在终端查单词的需求,之前使用的是自己写的网络爬虫,原理是构造网址 “https://www.youdao.com/result?word={}&lang=en" 并访问,再通过解析 Html 文件获得单词解释。一个朋友说他用的是 sdcv ,星际译王的终端版本,可以支持离线词典。我也时常脱机工作,对离线词典的需求也不小,所以打算自己写一个支持 StarDict 格式离线词典的软件。 ...

2023 1月 25 · 5 分钟 · vaaandark

内联汇编

高中第一次看到在 C 语言中嵌入汇编语言时,我就觉得它非常好玩,到大学刚开学的时候,我甚至有使用它的需求,可惜直到现在我才抽出时间开始学习它。 分类 在 GNU 的 GCC 中,内联汇编被分为两类:Basic asm 和 Extended asm 。 ...

2023 1月 02 · 6 分钟 · vaaandark

ARM与80X86的异同

今天初步认识了 ARM 汇编。 CPU 内寄存器 aarch64 有 31 个 64 位通用寄存器,它们的名字是为 xn(n 为 0-30 的整数),不像 80X86 一样暗示了它们的用途。 类似 rax 和 eax 的关系,它们对应的 32 位寄存器叫做 wn(n 为 0-30 的整数)。 ...

2022 11月 08 · 2 分钟 · vaaandark

稍微深入VLA

最近在学习汇编语言,和朋友聊天时聊到了 C 语言中的变长数组,想知道在汇编后是什么样子的。 变长数组(Variable-length array) 可变长数组是指在计算机程序设计中,数组对象的长度在运行时(而不是编译时)确定。 ...

2022 10月 20 · 1 分钟 · vaaandark

80X86汇编语言学习

汇编语言学习笔记 预备知识 Intel 机器 微型计算机的构成 80X86 微处理器的基本结构 数据寄存器组 段寄存器组 80X86 的三种工作方式 实地址模式 保护模式 虚拟 8086 方式(V86方式) 数据在计算机内的表示形式 有符号数、无符号数、浮点数等相关知识见 CSAPP ...

2022 9月 27 · 3 分钟 · vaaandark

C语言异常处理

C 语言没有原生支持异常处理,但是可以使用setjmp和longjmp函数实现类似try ... except的功能。 本文主要参考: C Interfaces and Implementation Implementing exceptions in C setjmp.h setjmp.h是 C 标准函数库中提供“非本地跳转”的头文件:控制流偏离了通常的子程序调用与返回序列。互补的两个函数setjmp与longjmp提供了这种功能。 ...

2022 5月 03 · 4 分钟 · vaaandark

Rust闭包

Rust 支持函数式编程,因此高阶函数、闭包等特性都不可或缺。 本文主要参考了 Rust Course 和 Rust 标准库文档。 什么是闭包 闭包是在支持头等函数的编程语言中实现词法绑定的一种技术,与函数不同的是,它可以捕捉自由变量,这意味着即使脱离了闭包创建时的上下文也能正常运行。 ...

2022 4月 26 · 4 分钟 · vaaandark

Rust迭代器

最近一直在学习 Rust 语言,深感它的学习曲线很陡峭,因此会写几篇博客记录一下学习进度。 本文主要参考了 Rust Course 和 Rust 标准库文档。 什么是迭代器 迭代器(iterator),是确使用户可在容器对象(container,例如链表或数组)上遍访的对象,设计人员使用此接口无需关心容器对象的内存分配的实现细节。 ...

2022 4月 25 · 4 分钟 · vaaandark