Mojo 是一门编译型语言。mojo build 与 mojo run 两条命令执行的都是提前编译(AOT),即先把源代码整体编译为目标机器码,再执行,不存在边解释边运行的环节。
Mojo 不直接把源码翻译成某一种硬件的指令,而是把源码转换成中间表示,再按照 dialect 体系逐级下降(lowering)。每一级 dialect 承担不同抽象层次的语义,越靠近底层越贴近具体硬件,最终由后端生成目标代码。
在硬件下降环节,Mojo 使用 LLVM 层面的 dialect 来支持其硬件目标,并在适用场景下采用其他基于 MLIR 的代码生成后端。正是这种结构使 Mojo 能够相对容易地扩展到新的硬件后端,而不是为每款芯片重写一套编译通路。
由于 1.0 版本强调编译期计算,参数化的代码会在编译阶段被展开与特化。例如编译器可以为一个特定参数值生成专属版本的函数实现,运行时需要完成的计算因此减少。