软工课设完成杂谈

此为杂谈,又或者说是迷思、胡思乱想。如有观点不同,语言锐气还请谅解。
题图:Kaiserreich 壁纸
一师因一僧问曰:“如何是道?”
师曰:“正眼前是道。”
“如何我不自见?”
“汝自虑故。”
“师知之否?”
师曰:“汝但见二分:言‘我不自见’、‘师见之’,汝目障矣。”
“无我无你,可得见否?”
“无我无你,谁欲见之?”
在控制变量/对象生命周期防止泄漏上,C++ 基于 C 延伸出了移动语义和智能指针/内存池 GC 这一套方案。然而 Rust 却给出了另一套令人耳目一新的方案,借助编译期静态分析创造了一个虽然有很多限制但是完全“安全”的世界。为我们揭开了一面放弃部分编程自由换来更好的编译期优化的全新 tradeoff。本文旨在为C/C++ 程序员介绍Rust的所有权机制。不论读者了解Rust与否都可以愉快的阅读这篇文章,一起思考安全和自由的边界。
上篇C++20 迈向异步 Part2 - 可等待体预告说使用socket套接字API实现TCP/UDP通讯并整合进C++协使用select原语实现事件循环。建立起一个简单的异步IO库。
但是后来写完发现步子还是太小了(指写起来很简单没啥难度),于是直接一步到位使用内核里新的io_uring设施实现消息循环。所有代码放在github上了OrbitZore/libzio。本文就简单阐述一下这个库为什么这么设计的。
时隔大半年,经历了老博客挂掉/Gnome换KDE等风波之后,总算迎来了计算机网络。也是读了一遍《Unix 网络编程 卷一:套接字联网API》和《UNIX 环境高级编程》,对异步和网络有了全新的认识。是时候重启这个系列了,而本Part将会介绍co_await
和可等待体,并给出上一Part中generator的改进版,我们的协程现在可以等待另一个协程了。
某些小型项目(100行左右或者小于100行)就直接放在github gist上了。以下是按时间最新排序的简单介绍
对我校编译原理没有实验课,没有课程设计,就是纯纯的理论很不爽,在与老师沟通后开始尝试写一个用于教学目的的编译器,在此之前我已经实现了正则表达式的解析和LL文法的分析,对于实现一个编译器很有兴趣。本着跟计算机打交道这么多年,连一个编译器都没摸透过的遗憾心理开始了编译器速通计划。
先花了一个星期确定技术栈上,最终我们敲定了先使用lex+yacc
,然后借助llvm
的框架快速搭建一个以llvm ir
为目标代码的编译器。语言选定为C98的一个子集,去除了一些无关紧要的特性,保留了结构体等比较重要的特性。
然后是漫长的看各种手册实现的过程,在不断的思考-实现-碰壁循环中最终花费大约两个星期实现了一个最简单的编译器,但是相比原计划还是削减了一些重要的特性,比如结构体和函数指针。最终代码量总和在1k行左右,编译中的各个阶段均能独立运行输出调试结果。拿libreoj
上的两道题跑了两个简单的测试,能过应该就没问题了。
开源以后再说吧。