Lua Coroutine

Lua 的一大特色就是协程的使用,在解释型语言中,如果不考虑嵌入到较为低级的语言(如 C 语言)中,就只需要操作调用栈并保存好上下文状态即可。但是 Lua 并不是一门纯粹依靠字节码的解释型语言,它常常与 C 语言反复嵌套,甚至出现 C 中调用 Lua ,Lua 中再调用 C 代码,,,的情况。一旦 Lua 调用的 C 库企图中断线程,再想恢复,就会是一个难题。好在 Lua 巧妙地解决了这些问题。 ...

2022 5月 13 · 6 分钟 · vaaandark

Lua Table

之前学习 Lua 的时候就对它的 Table 很感兴趣,最近在看 Lua 解释器的源码,因此就想研究一下具体是怎么实现这个 Lua 之中最为重要的数据结构的。 Lua Table 简介 在 Lua 语言之中,数组是 table ,字典是 table ,就连对象、模块、包也是通过 table 实现的: ...

2022 5月 11 · 7 分钟 · 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

华科寝室简易门禁

华科宿舍的大门门禁用学生卡开,而每个寝室的门却只能使用钥匙打开。这就导致了每次出门都要带上学生卡和钥匙,每次回来都要先掏出卡,再掏出钥匙。这样实在是麻烦,因此我有了用校园卡就能打开宿舍门的想法。 ...

2022 3月 29 · 2 分钟 · vaaandark

Lua入门

最近对脚本语言 Lua 很感兴趣,其一是因为它可以很方便地调用 C 语言库,其二是因为它是很多现代化工具的配置语言(比如 NeoVim ),另外 Lua 的源代码不是很长,因此研究学习难度会比其他语言更低。 ...

2022 3月 23 · 6 分钟 · vaaandark

一些Vim使用技巧(持续更新)

最近翻看了一下 《Vim使用技巧》 这本书,然后就发现我对 Vim 快捷键的了解很不深入。不过即使如此,我日常使用 Vim 写代码的效率也高于使用其他编辑器了,足见 Vim 模式之奇。 ...

2022 2月 20 · 5 分钟 · vaaandark

gitignore文件如何书写

之前使用git基本只是把它当作提交到 GitHub 上的工具,最多使用到的功能就是恢复误删的文件而已。 在我之前的git命令使用之中,基本上用的就是git clone、git add .、git commit -m以及git commit push。由于基本上是无脑add,因此.gitigore的文件书写比较重要。 ...

2022 2月 08 · 2 分钟 · vaaandark

CSAPP Data Lab

最近本来在看 CSAPP 后面的内容,但突然发现自己前面可能还有一些知识掌握不完全,因此做一下 Lab 检验一下。 准备工作 在 CSAPP 的官网上找到 Lab,下载 Self-Study Handout。 在下载目录下解压文件 tar -xf datalab-handout.tar 尝试执行自动测评脚本driver.pl结果发现没有32位环境,于是用dnf安装需要的库,折腾了一会发现还是不太行。请教了大佬 jyi2ya,他告诉我可以直接在makefile里面把编译条件改为-m64。 题目与题解 int 部分 bitXor 只用~和&实现^ ...

2022 2月 02 · 6 分钟 · vaaandark