Jane Street Blog

RSS: https://blog.janestreet.com/feed.xml
Jane Street 技术博客,关于 OCaml 与系统编程的深度技术分享。

你能逆向工程一款 ASIC 芯片吗?

Jane Street 发布了一道 ASIC 逆向工程谜题,给出芯片 GDS 布局文件,要求从物理布局恢复网表、推断电路功能,最终找到隐藏字符串。提供二进制加法器作为入门示例,使用 KLayout 或 Magic VLSI 等开源工具即可上手。今年晚些时候还将举办芯片设计竞赛,优秀作品将实际流片。
评论点赞收藏9 天前

关于命名的笔记

Jane Street 工程师总结命名系统的实用原则:优先复用现有名称以降低认知负荷,常用系统可用简短记忆名,罕见系统需具描述性。强调命名即沟通,应避免随意更改已嵌入生态的名称。
评论点赞收藏27 天前

使用 OxCaml 实现 OCaml 与 Python 间的类型安全引用计数

Jane Street 博客介绍其开发的 OxCaml 库如何解决 OCaml 与 Python 之间的类型安全引用计数问题。文章探讨了在多语言基础设施中,如何平衡 OCaml 的性能与 Python 在数据分析和机器学习领域的优势,通过具体的工程实现细节展示了跨语言内存管理的最佳实践。
评论点赞收藏62 天前

形式化方法与编程的未来

Jane Street 宣布成立专门团队研究形式化方法。作者 Yaron Minsky 指出,尽管过去因成本过高而排斥形式化验证,但 Agentic Coding 带来的代码质量验证瓶颈及反馈需求,使得形式化方法的投入产出比发生逆转。文章分析了利用自有语言控制权建立证明友好型生态的优势,并招募相关人员。
评论点赞收藏62 天前

strace-ui、Bonsai_term 与终端 UI 的复兴

我们一直觉得 strace 很有用,但操作起来有些困难。它的输出往往 晦涩难懂,难以追踪子进程或线程,而且如果你想过滤系统调用,就必须为每一个调用重新运行跟踪。在调试时,你想要的是一种能够进行探索、优化等操作的工具,但 strace 却让这些工作变得十分棘手。
评论点赞收藏75 天前

Jane Street 的开发者教育体系

Jane Street 详细披露了内部开发者教育体系,包含 OCaml Bootcamp 和 Dev Teach-ins 两大板块。Bootcamp 侧重语言基础与内部工具链上手;Teach-ins 则覆盖测试策略(expect tests、Quickcheck、Datafetcher)、行情数据系统、高级函数式编程(GADT、finger tree、自动微分)、OCaml 性能分析(magic-trace、memtrace)、自研前端框架 Bonsai 开发实践、以及系统级调试(strace、gdb、内核调试)等六个深度课程。每个课程均为2-3天全脱产小班授课,配有专门教室和讲师。文章还提到公司设有全职开发者教育岗位(前教授转行),强调将教学视为"重要工作本身"而非副业。对于关注量化机构技术栈、函数式编程工程实践或企业内训体系的人,这是一手且具体的参考信息,非泛泛的品牌宣传。
评论点赞收藏105 天前

用群论探索注意力机制中的位置编码空间

简街博客从群论这一抽象代数工具切入,将Transformer中多种位置编码方案置于统一数学框架下进行分析,而非停留在经验调参。注意力机制让模型内部表示相互引用,位置编码则决定序列顺序信息如何注入——该文用群论系统化地刻画这一设计空间。对于关注LLM底层原理、位置编码演进或数学与AI交叉的技术读者,是一个角度新颖、有启发性的高质量短篇。
评论点赞收藏116 天前

你能逆向工程我们的神经网络吗?

Jane Street 发布了一个与众不同的 ML 谜题:不是常见的黑盒逆向,而是公开神经网络完整规格和权重,要求参与者用机械可解释性(mechanistic interpretability)工具来逆向分析网络结构。这个思路源于他们在研究复杂模型特征时的真实需求——需要理解模型的内部运作机制。如果你对神经网络逆向、可解释性或 CTF 式挑战感兴趣,这是一个有趣的上手练习。
评论点赞收藏173 天前

FPGA Advent of Code 挑战赛结果公布

Jane Street 在去年底首次举办了与 Advent of Code 并行的 FPGA 硬件设计挑战赛,社区反响远超预期,收到了大量极具创意的参赛作品。不过本文仅简要宣布了活动结果已出炉,并未列出具体获奖名单、作品亮点或技术细节,更像是一篇结果上线的通知,缺乏可消费的实质性内容。
评论点赞收藏186 天前

如果写测试本身就是一种享受?

一位 Jane Street 工程师用亲身经历告诉你:写测试可以像 REPL 或 Jupyter 一样愉悦。核心是"期望测试"(expect test / snapshot testing)——你不需要手写断言值,只需放一个空白的期望块,编译器自动算出正确结果并帮你填入。作者对比了传统 RSpec 式测试的繁琐(手动算 Fibonacci、手写每个属性断言),展示 expect test 如何让测试变成"摆弄代码、观察 diff、再调整"的探索式体验。文中给出多个真实案例:Bonsai 网页 UI 测试(DOM 自动渲染对比)、magic-trace 底层符号测试、订单簿状态机测试、Hardcaml FPGA 波形测试。作者坦诚讨论了反对意见(懒测试、不明确),但指出 expect test 同样可以做精确断言,只是把"必须手动写"变成了"可选"。Jane Street 内部采用后迅速普及,成为测试主力。文章有强烈个人立场、一手实操经验、完整代码示例,不是公司软文,而是一个有经验的工程师真诚分享一个改变工作流的实践。
评论点赞收藏191 天前

我现在用 Claude 做设计比 Figma 还多

很长一段时间里,我对大语言模型持怀疑态度——每当我尝试使用它们时,都会对结果感到失望。去年,我试用了Copilot和Cursor来优化自己开发的一款游戏,但两者都未能生成有效的修改内容。在之前的工作中,我曾尝试用Gemini来撰写产品简报并生成线框图,却最终把所有成果都扔掉了。每次我尝试使用大语言模型,都是为了完成自己已经擅长的任务,而它们的表现甚至比我自己预期的还要差。
评论点赞收藏192 天前

代数效应实战:从玩具示例到Hardcaml仿真

核心看点:Jane Street工程师分享了将Hardcaml仿真库从monad迁移到OCaml 5代数效应(algebraic effects)的真实经验,并提出一个鲜明观点——代数效应能以更优雅的方式实现绝大多数monad能做的事。文章从零开始讲解代数效应的基础概念,通过逐步深入的例子展示其与monad的对比,最后落实到Hardcaml_step_testbench库的实际迁移案例。作者提供了具体代码示例和使用Handled_effect库的操作指南,是一篇有实战经验、有明确立场、有可复用知识的硬核技术分享。
评论点赞收藏222 天前

从通过测试到经得起实战考验

Jane Street 分享如何将软件测试从"能跑通"提升到"经得起实战冲击"的工程经验。文章指出测试不仅是验证正确性的手段,更是文档、是历史错误的备忘录、也是重构时的安全网。团队投入大量精力改进测试工具与写法,让测试更清晰、更有效、写起来也更愉快。核心看点在于工程团队对"battle-tested"这一标准的理解——不仅是覆盖率数字好看,而是测试能否真正在复杂生产环境中撑住压力、暴露边界问题。适合对高质量工程实践感兴趣的开发者阅读。
评论点赞收藏256 天前

FPGA 降临历——Jane Street 挑战赛

Jane Street 更新了 FPGA 挑战赛进展:已收到超过200份横跨多种 HDL 语言和硬件平台的提交,并发布了结果博客精选优秀作品。这是一个面向硬件工程师和 FPGA 爱好者的编程挑战活动公告,信息简洁但指向明确,对关注该领域的人群有信息价值。
评论点赞收藏265 天前

实习生成果展,2025 年版

这是一篇近乎空白的季末预告,仅表示"实习季结束,该总结实习生的工作了",没有任何具体项目介绍、数据或个人观察。典型的机构号任务式发文,缺乏实质内容、观点或讨论入口,信息价值极低。
评论点赞收藏354 天前

63 位整数带来了什么,又牺牲了什么?

OCaml 用 63 位整数表示(最低位作为类型标记位)来避免装箱,但代价是算术运算需要额外修正位操作。文章深入拆解了内存布局(未装箱 vs 装箱)、位运算翻译成 CPU 指令的具体开销(如加法变 x+y-1,乘法变 (x>>1)*(y-1)+1),并给出 Sandy Bridge 上的基准测试数据——独立加法慢 2.7 倍、依赖乘法慢 3.3 倍、依赖移位慢 4.3 倍。还指出 Intel LEA 指令在近几代 CPU 上变慢,进一步拉大差距。最终抛出一个开放问题:能否既保持 int 未装箱,又实现快速算术?适合对编译器实现、语言设计和底层性能优化感兴趣的读者。
评论点赞收藏364 天前

Linux 内核中的「希格斯幽灵」Bug 追猎记

一家量化交易公司的核心交易数据分发系统 Gord 中出现了一个难以复现的诡异内核 Bug。作者以第一视角详细记录了从现象观察到逐步排查的调试全过程,并邀请读者一同猜测根源。这是一篇有真实现场感、有技术细节、有叙事悬念的一手调试经验,适合对 Linux 内核和系统编程感兴趣的读者。没有营销味,没有小编体,只有工程师面对真实难题时的思考与记录。
评论点赞收藏410 天前

如何打乱大规模数据集

大型数据集洗牌是机器学习训练中关键但少有人深入讨论的工程难题。Jane Street 工程师以亲身实践分享处理十亿级样本的方案:两遍洗牌算法——先随机将数据分散到 M 个堆文件(第一遍),再对每个小堆在内存内完成 Fisher-Yates 洗牌(第二遍)。文章不仅给出算法正确性证明(等价于排序随机数法),还深入处理了堆溢出概率控制、并行化、将第一遍融入预处理实现近乎零额外开销、延迟洗牌(训练时才加载并洗牌每个堆)、以及用循环缓冲区增量维护滑动窗口数据等生产环境技巧。附录实测数据非常硬核:220M 样本、单条 9KB、压缩后 320GB 的数据集,随机访问需 2.75 年遍历一次,两遍洗牌仅约 1 天,加速比达 1000 倍。全篇有真实问题、可复现方法、一手性能数据,适合数据工程与 ML 工程从业者深读。
评论点赞收藏424 天前

OxCaml 发布:Jane Street 为性能工程打造的 OCaml 扩展分支

Jane Street 将其内部深度定制的 OCaml 分支正式命名为 OxCaml 并对外发布。核心看点:这不是一个玩具项目——Jane Street 是全球最大的 OCaml 工业用户,他们多年来为 OCaml 构建了一系列面向性能工程(performance engineering)的激进扩展,包括对编译器的深度改造。此前这些工作分散在开源仓库中,现在统一以 OxCaml 名义集中发布,附带专属 Logo 和网站,降低社区使用门槛。团队明确表示仍在根据落地反馈迭代设计,最终目标是推动这些扩展合入上游 OCaml 主线。对于关注函数式语言工业实践、高性能计算或交易系统技术栈的读者,这是值得关注的一手动态,来自真正的深度用户而非空泛趋势解读。
评论点赞收藏428 天前

GADT 为何对性能至关重要(2015)

Jane Street 工程师 Yaron Minsky 自述曾把 GADT 当成"编译器设计者塞进语言的胡闹",直到在实际工程中发现它恰恰是提升性能的关键。文章以一个紧凑数组类型(compact array)的完整实现为案例:先展示普通 variant 实现因类型推断限制而被迫采用闭包方案(每个实例需分配三个闭包,臃肿且低效),再演示如何用 GADT 语法精准约束构造函数返回类型(Bytes: bytes -> char t),配合局部抽象类型让 get/set/length 获得正确的多态签名。最终实现是类型安全的、零额外运行时开销的、且能根据元素类型灵活切换紧凑 bytes 或通用 array 表示。对于 OCaml 系统编程者,这是少有的从内存布局和性能实战角度而非类型玩具角度讲解 GADT 价值的干货,代码可复现、思路可迁移。
评论点赞收藏462 天前

Hardcaml 降临历挑战

Jane Street 延续 Advent of Code 传统,举办了 Hardcaml 硬件描述语言挑战赛,要求参赛者用基于 OCaml 的 Hardcaml 库编写可综合的硬件解决方案,而非普通软件代码。后续 2025 年升级为 FPGA 挑战赛,涵盖多种 HDL 语言和硬件平台,社区提交超 200 份。这是一个垂直技术社区的活动总结,对 FPGA 开发者、OCaml 与硬件交叉领域从业者有直接参考价值,展示了硬件描述语言在算法竞赛场景中的实践可能性。
评论点赞收藏512 天前

登录芦苇

登录后关注作者、收藏内容和参与讨论。