量子位 昨天
冷门新语言AI写不动?IEEE论文:从零到及格线,MoonBit给出完整训练路线
index.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

对于 Python、Java、JavaScript 这些语言,大模型通常能给出相当成熟的答案。

但如果换做小众的、样例不足的年轻语言呢?

大模型到底是真的掌握了通用编程能力,还是更擅长那些在训练数据里出现过无数次的语言?

一篇新论文把这个问题拉到了台前。

论文题为《No   Resource, No Benchmarks, No Problem? Evaluating and Improving LLMs for   Code Generation in No-Resource Languages》,已在 arXiv 发布,并标注被 IEEE   Transactions on Software   Engineering 接收。研究对象不是 Python、Java 这类高资源语言,而是两门较新的语言:MoonBitGleam

论文作者来自瑞士 USI Software Institute/SEART 研究组和西班牙塞维利亚大学 SCORE Lab/I3US Institute。SEART 长期研究软件分析、开发者推荐系统和 AI4SE,这让这项工作更接近一次来自软件工程研究界的外部评估。

论文把它们称为no-resource programming languages,可以理解为 " 无资源编程语言 "。

这里的 " 无资源 ",不是说语言本身能力不足,而是指它们太新,公开代码、教程、问答和项目样例还不够多,大模型在预训练阶段很可能没有充分见过它们。

注:本篇论文统计数据时节点为 24 年,MoonBit 截止 26 年 6 月语料相对丰富

换句话说,这篇论文问了一个现实问题:

如果一门语言还没有被互联网语料充分覆盖,大模型还能写好它吗?

答案是:一开始很难。

但更重要的是,论文也展示了另一件事:新语言并不是只能等待大模型自然学会。只要有足够清晰的语言设计、文档、代码和工具链,它可以被系统性地教给大模型。

编程语言被放进了新语言考场

论文构建了三个代码生成 benchmark:HumanEval、MBPP 和 McEval-Hard

测试方式很直接:给模型自然语言描述和函数签名,让模型补全函数实现,再用测试用例判断是否正确。

评价指标主要是pass@1

也就是模型只有一次生成机会。一次写出的代码能通过测试,就算成功;否则失败。

论文对比了三类语言:

高资源语言:Python、Java。

低资源语言:R、Lua、Haskell、Julia、Racket。

无资源语言:MoonBit、Gleam。

参与评测的模型包括 GPT-4o、o3-mini、Qwen   2.5 Coder、Qwen   3 等。论文说明,HumanEval 和 MBPP 被翻译到 MoonBit 和 Gleam,McEval-Hard 则基于 McEval 中的 hard   tasks 构建,最终形成跨语言比较用的函数级代码生成任务。

论文中对不同语言 GitHub 仓库规模和资源类型的划分零样本几乎失灵

结果并不意外,但很有代表性。

在 Python、Java 这类高资源语言上,大模型表现依然很强;在低资源语言上,表现有所下降但仍可用;但到了 MoonBit 和 Gleam 这样的新语言,零样本代码生成能力明显下滑。

尤其是在更难的 McEval-Hard 上,高资源语言的 pass@1 大约在 59% 到 89% 之间,低资源语言大约在 27% 到 84% 之间,而无资源语言只有 0% 到 1%。论文还指出,无资源语言在多个模型和 benchmark 上的表现通常处于 0% 到 20% 之间,平均约 9%。

△零样本设置下,不同模型在不同语言上的 pass@1 对比

更关键的是,失败原因不只是 " 算法没想明白 "。

论文分析发现,在 Gleam 和 MoonBit 上,大量失败来自语法错误。也就是说,模型经常连合法代码都生成不出来。

这并不说明 MoonBit 不行。

更准确地说,是模型还没有真正学过 MoonBit。

大模型写 Python 很稳,很大程度上是因为它见过太多 Python。MoonBit 作为一门年轻语言,公开语料规模远小于成熟语言,因此天然更适合用来观察一个问题:

AI 时代的新编程语言,如何被模型学习和理解?

临时给示例有用,但不够

论文先测试了两种常见方法:few-shotRAG

few-shot 是在 prompt 中放入几个 MoonBit 代码示例,让模型模仿。

RAG 是从 MoonBit 文档中检索相关内容,放进 prompt 中,让模型参考。

这两种方法都有提升。论文观察到,few-shot 通常比 RAG 略好:在 MoonBit 的 12 组比较中,few-shot 有 8 组优于 RAG。作者推测,面对陌生语言时,模型从代码示例中抓语法,往往比从文档片段中理解规则更直接。

但这类方法的上限也很明显。

临时把几段代码或文档塞进 prompt,只能补一些语法知识,很难让模型真正掌握语言本身。

继续预训练:让模型真正学会

真正有效的是继续预训练。

简单说,就是不再让模型临时查资料,而是直接用 MoonBit 代码和官方文档继续训练模型。

论文中,MoonBit 的继续预训练数据包括约1310 万 code tokens60 万 documentation tokens,总计约1370 万 tokens;相比之下,可用于 fine-tuning 的 MoonBit 数据只有约50 万 tokens

论文中用于 MoonBit/Gleam 的预训练与微调数据规模

结果明显提升。

以 Qwen 2.5 Coder 32B Base 为例,继续预训练之后,模型在 MoonBit 上的 pass@1 达到:

HumanEval:41.62%

MBPP:44.76%

McEval-Hard:25.86%

也就是说,从几乎不会写,到能在相当一部分任务上写出可通过测试的代码,MoonBit 可以被模型系统性学会。

指令迁移:既懂编程语言,也听懂开发者

不过,继续预训练还没有解决全部问题。

它能让模型学会语言知识,但不一定让模型更擅长遵循用户指令。而真实的 AI 编程助手,不只是续写代码,还要能理解开发者需求,比如解释类型错误、重构代码、补测试、根据反馈修改实现。

所以论文进一步使用了instruction transferring

它的思路是:先用 MoonBit 代码和文档让 base model 学会 MoonBit;再把 instruct model 的 " 指令跟随能力 " 迁移到已经学过 MoonBit 的模型上。

这样得到的模型,既懂 MoonBit,又更像一个能对话、能听懂需求的编程助手。

这一方法给出了论文中最强的 MoonBit 结果:在 Qwen 2.5 Coder 32B 上,instruction transferring 后,MoonBit 的 pass@1 达到:

HumanEval:50.71%

MBPP:53.04%

McEval-Hard:32.60%

尤其是最难的 McEval-Hard,MoonBit 从零样本接近 0,提升到了 32.60%。

进一步预训练与 instruction transferring 的效果对比

这组数字背后有一个关键信号:新语言的 AI 支持,不一定只能等待更大的通用模型自然覆盖。通过高质量代码、官方文档、benchmark 和合适的训练方法,可以主动构建。

观察价值:让模型更容易学会新语言

这也是 MoonBit 值得观察的地方。

MoonBit 官方将其定位为面向云和边缘计算的 AI-native 编程语言工具链,支持 wasm、wasm-gc、js 和 native 后端,并支持在一个模块中构建混合后端项目。官方文档还将更小的 WASM 输出、更快运行时性能、先进编译性能,以及简单实用、面向数据的语言设计列为主要优势。

对 AI 编程来说,这一点很重要。

因为 AI 写代码不是一次性生成文本,而是一个循环。语言设计越清晰,工具链反馈越完整,这个循环就越容易自动化。

MoonBit 的 AI-native 设计也体现在语言结构上。其官方博客曾讨论过 flattened   design:明确区分 toplevel 和 local definitions,toplevel   definitions 强制类型签名,并采用 structural interface   implementation,减少额外嵌套代码块。博客还提到,这种减少嵌套的设计不只提升可读性,也更 KV-cache   friendly,有利于 RAG、decoder correction、backtrack 等场景下的模型推理效率。

对开发者来说,这意味着更清晰的代码组织;对模型来说,则意味着更适合线性生成。模型不用在复杂嵌套结构里频繁来回跳转,上下文组织更稳定,生成错误也更容易被工具链及时发现。

过去评价一门编程语言,通常看性能、语法、类型系统、标准库、工具链和生态等。到了 AI 编程时代,还要多一个维度:模型是否容易学会这门语言

这篇论文的价值也正在于此。它不只是指出 " 大模型不会天然写新语言 ",更重要的是给出了一条可执行路径:先构建 benchmark,知道模型哪里不会;再利用真实代码和官方文档继续训练,让模型掌握语言;最后通过 instruction   transferring,把指令跟随能力迁移回来。

MoonBit 在这条路径中的表现说明,AI-native 编程语言不只是一个概念,而是可以体现在模型学习效率、代码生成质量和工具链闭环中的工程优势。

大模型写 Python 很强,是因为它见过太多 Python。大模型一开始不熟悉 MoonBit,是因为 MoonBit 足够新。但当模型真正接触 MoonBit 的代码、文档和语言设计之后,它可以快速提升。

这也许正是 AI 时代新语言生态的核心问题:

不是等待模型某一天自然支持你,而是从语言、文档、工具链和数据开始,让模型更容易理解你。

MoonBit 提供了一个值得观察的样本。

论文标题:《No Resource, No Benchmarks, No Problem? Evaluating and Improving LLMs for Code Generation in No-Resource Languages》

链接:https://arxiv.org/abs/2606.16827

MoonBit 相关数据来源:swe-agi (https://arxiv.org/abs/2606.16827)

一键三连「点赞」「转发」「小心心」

欢迎在评论区留下你的想法!

—    —

【学术投稿】请在工作日发送邮件至:ai@qbitai.com,标题注明【投稿】,并告诉我们:你是谁从哪来投稿内容附上项目 / 主页链接,以及联系方式

  我们会 ( 尽量 ) 及时回复你 : )

点亮星标

科技前沿进展每日见

评论
大家都在看