Richard Eisenberg 谈 Jane Street 的 OCaml 探索

原标题Richard Eisenberg on Jane Street's OCaml Experiments

Jane Street 编译器团队正探索非装箱类型、局部性模式和无数据竞争并行,以改善 OCaml 的性能和内存管理,使其更符合公司的需求。

RERichard Eisenberg讲者 · Jane Street
频道
Jane Street
发布
2024年3月13日
视频
3:30
阅读
3 分钟
原文
英语
在 YouTube 打开
往下滚动阅读时,视频会缩到右下角继续播放。字幕跟随阅读语言。
阅读语言共 2 种语言可读
由 AI 从英语原文翻译。打开“对照原文”可以逐段核对。
摘要

30 秒看懂

Jane Street 编译器团队的软件工程师 Richard Eisenberg 介绍 OCaml Unboxed 视频系列。他解释了 Jane Street 为何重视 OCaml 的强类型、函数式风格和可预测的性能,并概述团队正在改进语言的三个方向。

  1. 1为什么选择 OCamlJane Street 几乎所有工作都使用 OCaml。Eisenberg 重视强类型带来的保障、他认为接近人们思维方式的函数式风格,以及可预测的性能。
  2. 2内存管理的权衡浮点值可能需要堆分配和后续垃圾回收。团队希望保留 OCaml 帮助推理的能力,同时获得更多 C、C++ 或 Rust 的性能和内存管理特性。
  3. 3非装箱类型非装箱类型可以让浮点值和其他类型直接放在栈上,避免对这些值进行单独的内存管理。
  4. 4局部性模式控制局部性的模式可以让更多分配放在栈上,并在其生命周期符合适当的栈结构时自动释放。
  5. 5无数据竞争的并行团队正在添加旨在检测和防止数据竞争的语言功能,让开发者编写快速并行代码时不必担心访问冲突。

要点建议

  1. Jane Street 广泛使用 OCaml,重视它的强类型、函数式风格和可预测的性能。
  2. 浮点数等值的堆分配和垃圾回收可能带来不希望出现的内存管理开销。
  3. 非装箱类型旨在让浮点数等值可以放在栈上,无需单独的堆分配。
  4. 当分配的生命周期符合适当的栈结构时,局部性模式可以支持栈分配。
  5. 团队正探索检测和防止数据竞争的语言功能,同时支持快速并行代码。
全文

按章节阅读整理后的全文

只看原始文稿
01

Jane Street 为什么使用 OCaml

Eisenberg 介绍编译器团队的工作,并解释强类型、函数式编程和可预测性能的吸引力。Jane Street 几乎所有工作都使用这门语言。

我是 Richard Eisenberg,Jane Street 的软件工程师,负责 OCaml 编译器。我们的编译器团队正在制作一系列视频,介绍正在做的一些工作。在 Jane Street,我们几乎所有工作都使用 OCaml 编程语言。

OCaml 是一门强类型函数式编程语言。强类型让我们对程序的正确性有很高的信心。它的函数式风格提供了另一种编程方式,非常适合我们;我认为它也更接近许多人的思维方式。

OCaml 的另一个优点是性能可预测。编写程序时,我们大致知道它会运行得多快,也知道它会持续保持这样的速度。尽管这门语言已经满足我们的需求,仍有一些地方可以做得更好。

02

为什么需要更好的内存管理

一些浮点值需要堆分配和垃圾回收。团队希望将 OCaml 帮助推理的能力与底层语言的性能和内存管理特性结合起来。

内存管理就是一个例子。一个浮点数可能需要我们在堆上分配信息,之后再进行垃圾回收。我们希望将 OCaml 带来的能力和推理能力,与 C、C++ 或 Rust 的一些性能和内存管理特性结合起来。

我们的编译器团队正从三个主要方面进行改进。第一个是非装箱类型:它可以让我们将浮点数直接放在栈上,无需管理单独的堆分配。同样的思路也可以应用于许多其他类型。

03

非装箱类型与局部性

非装箱类型可以将浮点数等值直接放在栈上。当分配的生命周期符合适当的结构时,局部性模式也能让更多分配放在栈上。

我们还在引入一个模式系统,其中一些模式控制局部性,允许更多栈分配。即使有非装箱类型,我们可能仍需要分配内存。如果我们知道何时应释放它,而且它的生命周期符合适当的栈结构,就可以自动释放,无需有时会拖慢速度的垃圾回收。

04

没有数据竞争的并行

团队正在开发语言功能,检测并防止线程之间的访问冲突。Eisenberg 介绍了视频系列,探讨这些创新和其他工作。

第三个领域是无数据竞争的并行。如果一个线程与另一个线程编辑同一份数据,而它们的操作发生冲突,同时运行多个线程就可能很危险。我们希望通过语言功能检测并防止这些数据竞争,让我们可以放心编写快速的并行代码。

OCaml Unboxed 系列将解释这些创新,以及我们在 Jane Street 进行的其他工作。希望大家喜欢。

同频道的其他文章

1:48:29EN → 简体中文
JSJane Street· 2026年10月16日AI 如何改变编程:John Krazit 与 Ron Minsky 的对话Ron Minsky, John Krazit · Jane StreetJane Street 的 AI 工具负责人和 Signals and Threads 主持人探讨智能体基础设施、安全、代码审查,以及软件开发体验的变化。编程智能体Developer productivity评估+2
9 张幻灯片1:05:45EN → 简体中文
JSJane Street· 2026年9月11日Cyrus Omar:实时编程与人与 AI 共享的计算公共空间Cyrus Omar通过 Hazel 演示,探讨即时反馈、结构化协作和精细权限如何帮助人类与 AI 智能体共同工作。Programming LanguagesHuman-AI Collaboration开发流程与测试+2
1:25:00EN → 简体中文
JSJane Street· 2026年9月2日Eric Mannes:如何将杂乱的外部数据用于交易研究Ron, Eric Mannes · Jane Street从商品期货和 Excel 风险系统,到时点数据集和 AI,Eric Mannes 解释 Jane Street 数据工程背后的领域知识。Data quality & curation开发流程与测试Investing+2
7 张幻灯片1:16:29EN → 简体中文
JSJane Street· 2026年8月26日Grant Sanderson 与 Alok Puranik:从群论看位置编码Grant Sanderson, Alok Puranik · 3Blue1Brown从注意力机制的假设出发,他们推导矩阵指数,并将旋转、衰减和 Jordan 块与 RoPE、ALiBi 联系起来。Transformers & attentionMathematics机器学习基础+1
1:34:29EN → 简体中文
JSJane Street· 2026年6月24日Jacob Baskin:构建 Superstore 与调度 HiveYaron Minsky, Jacob Baskin · Jane Street这位 Jane Street 工程师回顾分布式分析数据库背后的设计选择,以及为不断扩大的研究集群分配资源的挑战。基础设施与部署Software engineeringDecision Making+1
1:34:36EN → 简体中文
JSJane Street· 2026年6月1日Nate Foster:把网络当作程序Yaron Minsky, Nate Foster · Jane Street从可编程交换机到 BGP,一位编程语言研究者解释高层策略和形式模型如何让网络更易于修改。基础设施与部署Programming LanguagesSoftware engineering+2