C-Reduce 可用于任何语言

2024-11-28

C-Reduce是一个用于最小化C编译器错误重现的工具,但它并非仅限于C语言。文章作者用RustPython和scrapscript遇到的bug为例,展示了如何使用C-Reduce来缩小问题范围。只需要一个确定性条件、一个快速的重现器和一个或多个可变的源文件,就可以使用C-Reduce。作者通过运行一个简单的脚本 interesting.sh 并使用 `creduce --not-c` 命令,快速地将文件大小减少了近50%。`--not-c` 参数是为了避免C-Reduce使用C语言特定的优化,从而加快处理速度。

阅读更多
未分类 C-Reduce

论通用关系

2024-10-30

作者去年上了数据库课程,了解到一篇经典论文《论通用关系》(1979),作者为多伦多大学的Marc H. Graham。由于该论文难以获取,作者费力找到实体副本,扫描后上传,供大家查阅。作者尝试联系过大学和作者本人,但未得到回应。

阅读更多
未分类 通用关系

为Damas-Hindley-Milner类型系统添加行多态

2024-10-23

本文介绍了如何在Damas-Hindley-Milner(HM)类型系统中添加行多态。文章首先解释了记录和行的概念,以及如何在类型系统中表示它们。然后,文章详细讨论了如何推断记录字面量的类型,以及如何在模式匹配中处理记录。最后,文章解释了行统一的概念,以及如何使用let多态实现行多态。

阅读更多
未分类 行多态

两种方式实现Damas-Hindley-Milner类型推断

2024-10-16

本文介绍了两种实现Damas-Hindley-Milner (HM) 类型推断的方法:Algorithm W 和 Algorithm J,并探讨了将HM扩展到递归、模式匹配、行多态等方面的应用。文章首先解释了HM的核心思想,即通过生成和求解类型约束来推断类型。然后详细介绍了Algorithm W 和 Algorithm J 的实现细节,包括类型构造器、类型变量、替换、上下文、泛化、实例化等概念,并通过代码示例演示了如何使用这两种算法进行类型推断。最后,文章还讨论了HM在Scrapscript语言中的扩展,包括递归、更多数据类型、模式匹配、行多态、延迟动态、变体、类型变量的规范化和最小化、类型携带代码等。

阅读更多

microui+fenster=小型GUI

2024-09-08

本文介绍了如何结合使用microui和fenster这两个轻量级库来创建小型GUI应用程序。fenster提供了一个简单的画布用于绘制像素,并处理键盘和鼠标输入。microui则用于将GUI元素转换为绘图指令。作者详细介绍了如何将这两个库连接起来,并提供了一个示例程序。

阅读更多
未分类

玩具优化器中的抽象解释

2024-07-27

本文介绍了一种用于玩具IR的小型抽象解释器,并展示了如何使用它进行一些简单的优化。抽象解释是一种在不运行程序的情况下推理程序行为的通用框架,它使用抽象值来表示程序状态,并定义了抽象转换函数来模拟程序语句对抽象状态的影响。文章以“奇偶性”抽象域为例,展示了如何使用抽象解释来优化程序。

阅读更多
未分类 优化器

Scrapscript编译器的技巧

2024-07-16

本文介绍了Scrapscript编译器实现的一些优化技巧,包括:1. 立即对象:利用指针编码小字符串和特定类型的变体,减少堆分配;2. 常量堆:将编译时已知的常量数据结构存储在常量堆中,避免运行时重复分配。文章还展示了如何使用C代码生成这些优化的数据结构,并讨论了如何处理垃圾回收和指针标记等问题。

阅读更多
未分类

Scrapscript 基准编译器

2024-06-03

本文介绍了 Scrapscript 语言的基准编译器的设计与实现。Scrapscript 是一种小型、纯函数式、内容寻址、网络优先的编程语言。编译器将 Scrapscript 代码转换为 C 代码,并使用半空间垃圾回收机制管理内存。文章详细介绍了编译器如何处理表达式、函数和模式匹配,以及运行时如何实现标记指针和句柄来支持垃圾回收。

阅读更多
未分类

利用weval免费获取编译器

2024-05-19

文章介绍了weval,一个WebAssembly部分求值器,它可以通过将解释器与字节码融合来提高WebAssembly程序的运行速度。作者通过一个简单的解释器示例展示了weval如何将解释器循环展开,并将字节码转换为直线式WebAssembly代码,从而实现8.5倍的加速效果。文章还探讨了weval在更大型解释器(如SpiderMonkey和CPython)中的应用潜力,以及将其用作CPython的Wasm JIT编译器的可能性。

阅读更多
未分类