解法
科学计算曾经固化在双语言工作流里:研究者先用 Python、MATLAB 或 R 这类动态语言做原型和分析,再把慢速部分用 C 或 Fortran 重写。2020 年 Ars Technica 的一篇专题和它在 Hacker News 上的讨论,把这条缝的成本摆上台面:脚本层没法表达高性能,而快速层又难写难维护。
Julia 的赌注是彻底拆掉这条缝。它的编译器利用类型推断和基于 LLVM 的 JIT,针对函数实际被调用时的具体参数类型编译每个函数,因此动态、数学式的语言能跑到接近优化 C 的水平。多重分派——按所有参数类型选择方法,而不是单一接收者——让各个包能扩展彼此的泛型函数,这正是独立库互相组合、而不是各包一个 C 内核的原因。
到 2020 年,这个设计已经拿出实际成果,不仅仅是跑分。RelationalAI 说它的云知识图谱数据库 100% 用 Julia 写;Pumas 建模平台已交付给制药公司,并用于 FDA 申报;评论者还指到从微分方程到数学优化等整个生态系,Julia 库在这些领域已经做到同类最佳。当时的最新版本是 1.5,核心开发者认为自 1.0 以来没有真正不兼容的改动。
批评者也有话要说:首次画图慢、启动延迟、工具链不成熟、久经考验的库比 Python 少。支持者回应说,用 Revise.jl 做迭代开发,加上只用一个新方法就能修补某一热点,意味着同一份代码既支持探索、也能投产——这正是该设计的初衷。
What it achieved
让动态语言本身编译到原生速度
为什么有效
类型推断加 JIT 特化,让写起来通用、表达力强的代码跑得快,程序员不用为热路径换一套表达。
多重分派允许包往其他包的函数上添加方法,这样如常微分方程求解器、优化这类生态能互相组合,而不是重复造 C 内核。
科学家保持对问题本身的思考方式,而不是为了性能换个思维框架,省去一整类由重写引入的 bug。
同一代码库既用于探索、也用于生产,原型不会与实际运行的系统脱节。
可以借鉴什么
要省掉“重写”这一步,不要给两种语言搭一座更结实的桥,而是去造一种语言,它的表达层就是生产层。
后续
2020 年 10 月那篇 Ars Technica 报道刊出后,Hacker News 讨论帖积了 284 分、212 条评论,Julia 自己的开发者也下场参与。关于设计理念,作者在 2018 年发表的论文“Julia: Dynamism and Performance Reconciled by Design”里早就阐述过,而 2020 年那场讨论展现的,已不只是研究原型,而是 RelationalAI 以及药物建模领域里真实落地的东西。讨论中点到的问题——启动延迟、工具链成熟度、库的覆盖度——仍然列在生态发展的待办清单上。
从这里,追溯依据