搜索技巧 海洋云增白 开源地图 AI 搜索答案 沙丘魔堡2 压缩机站 自由职业 policy 小团队 颈挂空调 Chumby 个人电脑 极端主义 团队 PostgreSQL AI工具 证券 DirectX DrawingPics 化学 KDE 披萨农场 多动症 植物学 分析化学 Three.js 大会 残疾人学校 初创 QB64 更多

更深层次地修复问题 (matklad.github.io)

本文讲述了作者在一天的工作中,如何通过更深层次地思考问题,发现并修复了一系列潜在的错误和设计缺陷。从数据库磁盘空间不足的错误信息,到代码格式化问题,再到编译时参数的混淆,作者不断地挑战自己,寻找更优雅、更彻底的解决方案。最终,作者将问题归结到代码逻辑的重构上,并试图通过改进代码设计来避免此类问题的再次发生。

什么是 io_uring? (matklad.github.io)

io_uring 是一种全新的 Linux 内核接口,用于进行系统调用。与传统的同步、逐个提交系统调用的方式不同,io_uring 采用批量异步方式。应用程序通过将系统调用代码和参数写入无锁共享内存环形缓冲区来提交多个系统调用。内核读取并按自身节奏执行,结果异步写入第二个环形缓冲区供应用程序读取。

软件依赖的基本法则 (matklad.github.io)

文章指出,软件的规范源码应该包含所有依赖项内容的校验和,并列举了几个例子:源码管理应该使用类似Git的内容寻址版本控制系统;第三方库的依赖关系应该使用包含校验和的锁文件管理;编译器的哈希值也应该包含在锁文件中,以便验证编译器的可靠性。作者认为,校验和本身并不重要,重要的是获取校验和的过程能够促使开发者明确依赖项、自动化下载依赖项、确保依赖项构建的可重复性以及隔离项目依赖项,最终使得软件开发变得更容易。

Rust 的丑陋语法 (matklad.github.io)

这篇文章探讨了Rust语法,作者认为人们对Rust语法的抱怨实际上是对其语义的反对。文章以一个读取文件的Rust函数为例,展示了其语法复杂性,并尝试用其他语言风格改写,以期找到更简洁的表达方式。作者进一步探讨了简化Rust语义的可能性,例如移除泛型、借用和错误处理机制,最终得到了一个更简洁但牺牲了性能和安全性的版本。

面向程序员的原始递归函数 (matklad.github.io)

本文讨论了图灵完备性的概念,并指出在实践中,非图灵完备性并不像人们通常认为的那样重要。作者通过介绍有限状态机、图灵机和原始递归函数,证明了任何在图灵机上运行并在原始递归函数时间内终止的算法都可以用原始递归函数实现。文章还探讨了良好配置语言的特性,包括确定性、定义明确、纯洁性、安全性、沙盒化和简单性,并指出非图灵完备性本身并不能保证这些特性。

我是如何使用 Git 工作树的 (matklad.github.io)

文章介绍了作者如何利用 Git 工作树来管理并发任务,而不是将其作为分支的替代品。作者创建了五个工作树,分别用于查看原始代码、编写代码、审查代码、运行模糊测试以及处理其他临时任务。这种方法提高了作者的编码效率,并能更好地管理并发任务。

如何正确地测试并发数据结构 (matklad.github.io)

文章介绍了一种测试并发数据结构的方法,通过模拟并控制线程的执行顺序,实现了对并发操作的精细化测试。作者首先解释了传统并发测试的不足,然后逐步推导了一种基于“管理线程”的测试方法,并用一个简单的计数器示例演示了如何使用该方法发现并最小化并发错误。文章最后还探讨了如何将该方法扩展到更复杂的场景,例如模拟弱内存模型和穷举所有可能的交错执行路径。

正则、递归、受限 (matklad.github.io)

本文探讨了如何使用一种称为“递归受限正则表达式”的新形式来描述算术表达式。作者首先指出现有语法(如上下文无关文法和解析表达式文法)在描述表达式优先级和结合性方面的局限性。然后,作者提出了一种使用正则表达式来定义树形结构的方法,并通过添加约束规则来消除歧义。最后,作者提出了一个问题:是否存在一种算法可以判定任意递归受限正则表达式是否具有歧义性。