## Catlang:一种编译为SQL的编程语言 作者最近创建了一种名为“catlang”的编程语言,其编译器输出一个单一的、巨大的SQL `SELECT` 语句。这并非旨在创建一种新的查询语言,而是一种有趣的方式来测试一个编译器,该编译器具有基于抽象范畴论的中间语言。 一个简单的例子展示了一个返回100的函数,通过类似循环的结构实现,并被反糖成复杂的范畴运算。这种中间语言利用了诸如恒等、复合、积、余积和 `cochoice` 原语来实现循环等概念。变量名在反糖过程中被消除,从而简化了后端目标。 编译为SQL涉及用相应的SQL结构来表示范畴运算——嵌套查询用于复合,`CROSS JOIN` 用于积,`UNION` 用于余积,递归CTE用于循环。为了从递归CTE中提取最终结果,使用了涉及 `clock_timestamp()` 的解决方法。 作者设想未来的开发包括一个编译*到* catlang的脑洞语言解释器,可能能够实现在postgres内部运行postgres。该项目灵感来自Haskell的箭头语法和编程语言的范畴基础,旨在探索无传统函数应用的编程方式。代码可在GitHub上找到。
## 估算可能的国际象棋对局:一种数据科学方法
本文探讨了估算国际象棋对局数量的方法,重点关注“短”对局(在100步内结束)。由于国际象棋的巨大复杂性,直接计数是不可能的,因此作者采用了两种技术:费米问题法和克努斯路径乘积估算法。
**费米问题**涉及将估算分解为更简单的、可猜测的组成部分——每局游戏的典型步数和每步的选择数量——从而得出大约10<sup>117</sup>的初步估算。然而,这种方法依赖于主观输入。
**克努斯路径乘积估算法**提供了一种更可靠的方法。它涉及模拟对局,然后计算每个位置的合法步数的乘积。一个关键定理表明,对所有可能的对局取这个乘积的平均值,即可得到对局的总数。最初使用10,000局游戏进行模拟,估算值为10<sup>151</sup>,但具有较高的不确定性。更大的样本(1,000,000)提高了可靠性,使估算值稳定在**大约10<sup>151</sup>**。
路径乘积法即使在针对已知值的非常短的对局进行测试时,也证明了其惊人的准确性,优于简单的指数趋势估算。最终,作者提倡使用克努斯方法,因为它避免了主观猜测,直接结合了游戏规则,并通过更大的样本提高了可靠性。
## vcad:将CAD作为代码
作者对传统GUI CAD软件迭代且容易出错的过程感到沮丧,因此构建了**vcad**,一个用Rust编写的CAD库。其核心思想是将零件定义为代码——使用基本体和布尔运算描述几何体,从而提供版本控制、参数化设计和可测试性。
vcad利用一个简单的API:基本体(立方体、圆柱体)、布尔运算(+表示并集,-表示差集)、变换和模式。这允许简洁的零件定义——一个带有孔的复杂板材只需十二行代码即可创建。除了用于3D打印的STL导出外,vcad还支持带有材质的glTF导出以进行可视化。
主要优点包括其几何引擎保证的封闭网格、Rust带来的零成本抽象以及具有测试和linting的强大工具链。重要的是,vcad的设计目的是与AI编码代理集成,从而实现自动零件生成、导出和渲染——Claude在Blender中无需人工干预即可生成并渲染所有图像,这已得到证明。
vcad采用MIT许可,目前版本为0.1,未来开发计划包括倒角和Web GUI等功能。它旨在将CAD从基于点击的工作流程转变为基于代码的工作流程。