返回首页
最新
嗨,HN,
我是Kumi的作者,Kumi是一个声明式、静态类型、面向数组的编译型领域特定语言(DSL),用于构建计算系统(类似电子表格)。它完全用Ruby(3.1+)实现,并对所有内容进行静态检查,目标是一个以数组为主的中间表示(IR),并编译为Ruby/JS。我在过去几个月里一直在开发这个项目,想知道你们的看法。
链接的演示涵盖了金融场景、税务计算器、康威的生命游戏(数组操作)以及一个快速的蒙特卡洛演示,以便你可以看到零运行时代码生成的实际应用。(生命游戏的渲染在支持的React应用中;Kumi处理网格数学。)
最初的问题:
Kumi的初步构想源于我在之前工作中遇到的一个复杂的身份和访问管理(IAM)问题。为单个员工配置权限意味着需要为每个目标系统应用数十条相互依赖的规则(基于角色、地点等)。问题更深层次:甚至数据抽象也是基于规则的。例如,一个系统的“角色”可能只是对Active Directory组的特定解释,并通过某种函数映射到另一个系统的属性。
这种逻辑也高度不稳定;将规则写下来变成了一种发现过程,管理员需要实时更改这些规则。这一切都建立在系统间数据同步的基础挑战之上。我当时的解决方案是通过一个名为“蓝图”的组件来处理部分逻辑,该组件解释声明式规则并将这些逻辑暴露给其他工作流。
演变过程:
那个“蓝图”组件一直在我脑海中挥之不去。大约一年后,我决定用Kumi更根本地解决这个问题。我的第一次尝试很脆弱——最初是运行时的lambda,然后是一系列解释器。我知道什么是抽象语法树(AST),但必须发现编译器、中间表示(IR)和正式类型/形状表示等概念。每次迭代都揭示了更深层次的问题。
核心问题是我的AST表示不够表达,迫使我进入无法验证的“运行时魔法”。我意识到解决方案是迭代构建一个更具表达力的中间表示(IR)。这不是一步到位的过程:我花了两个月的时间构建并抛弃了大约5种不同的IR,数万行代码。这个痛苦的过程迫使我学习编译的真正含义、表示复杂形状、规范数据流和验证逻辑。这段旅程使得静态类型检查成为一个必要的结果,而不仅仅是一个初步目标。
这与核心挑战相结合:业务逻辑通常涉及复杂、嵌套和不规则的数据(数组、订单项等)。如果DSL不能原生处理这些数据上的循环,那就毫无意义。这需要一个足够表达的IR,以便进行内联和循环融合等优化,而这些在向量化数据上是 notoriously 难以推理的。
你可以在这里尝试一个基于网页的演示: [https://kumi-play-web.fly.dev/?example=monte-carlo-simulation](https://kumi-play-web.fly.dev/?example=monte-carlo-simulation)
而代码库在这里: [https://github.com/amuta/kumi](https://github.com/amuta/kumi)
我们在过去一年半里一直在帮助中型市场公司,现在终于准备公开分享我们的内部平台。
Yansu(严肃)是一个人工智能编码平台,采用规范(spec)和测试驱动开发(TDD)的方法来构建复杂的软件项目。它更像是一个标准操作程序(SOP),而不是简单的编码代理。我们专注于理解需求,并根据这些需求检查结果,同时根据测试迭代代码。
Yansu努力学习尽可能多的隐性知识。这些知识是你不会写在谷歌文档或Notion上的。Yansu通过与用户持续交流并从中提炼学习来吸收这些知识。
就好像一个规范加TDD的平台与character.ai结合在一起。
为什么要关注需求?因为80%的软件开发工作都是理解需求以及我们究竟想要构建什么。我们还专注于结果,这是唯一重要的事情。我们通过模拟场景并根据这些场景生成测试来交付令人满意的结果。我们的代理将繁琐的测试部分从其他人手中接过来。
我们优先考虑准确性,而非延迟或成本,使用多种代理(不限于CC、Codex等)来完成任务。然后,我们通过持续测试生成管道,直到所有内容都通过测试。
Yansu的意思是什么?在中文中是“严肃”。就像我最喜欢的艺术家雷内·马格利特(Rene Magritte)穿着西装在厨房里作画一样。我想给予我的编码以尊重和关怀。
我们的目标是将人们从个体贡献者(IC)提升到技术领导者,专注于规划、验证和教育等高杠杆工作。
我们制作了一段发布视频,以庆祝建立在我们之前所有创意头脑基础上的人类工作。感谢CinemaSings让这一切成为可能。
请欣赏视频(链接在推文中),并了解Yansu。
我设计了一种基于相对钢琴卷轴的音乐记谱法。我使用了12种颜色,以特定的方式排列,使西方调性和声的主要效果和对立关系变得可见。主音总是用白色表示,因此每个MIDI文件都需要手动注释/解释。
所有和弦都是由三到四种颜色组成的旗帜。小调模式较暗,而大调模式较亮。颜色以三度音程的方式排列。
我将乐曲从简单和复杂的和声进行了分类。我还写了一些文字来解释你可能看到的内容。此外,还有一个结构语料库:标签的超链接,允许你在我超过2000首流行作品的语料库中找到相似的模式。
我的方法使和弦进行易于记忆,并在乐谱中瞬间可见。
这不是联觉,而是一种缺失的调性音乐记谱法,使和声上相同的事物看起来相同(或相似)。
我还录制了关于我方法的俄语讲座(<a href="https://www.youtube.com/playlist?list=PLzQrZe3EemP5pVPYMwBJGtiejiN3qtCce" rel="nofollow">https://www.youtube.com/playlist?list=PLzQrZe3EemP5pVPYMwBJG...</a>)。抱歉,我还没有找到时间用英语重新录制。
我还草拟了一个更友好的介绍:<a href="https://vpavlenko.github.io/d/" rel="nofollow">https://vpavlenko.github.io/d/</a>
抱歉,如果你是色盲,这个东西就没有任何意义。
它是开源的:<a href="https://github.com/vpavlenko/rawl" rel="nofollow">https://github.com/vpavlenko/rawl</a>