2024年2月9日,编程语言Mojo的开发商Modular在其官网上发布了一篇博客文章,阐述了Mojo在生物信息学中的潜力,尤其是它作为兼具高级特性和高性能的语言如何解决该领域处理大数据集时面临的困境。文章通过两个FASTQ文件处理基准测试展示了Mojo的速度优势,这引起了我的兴趣,因为我是热衷于高性能、高级编程的生物信息学家。本文将探讨我对这些基准测试的深入分析。
文中指出,生物信息学正挣扎于处理日益庞大的数据集,这些数据集之大需要编程来处理,但目前编程实践分为用于实际数据分析的动态高级语言和用于底层计算的静态高性能语言。作者提出,Mojo可能成为两者之间的桥梁,因为它是一种“Python式”的快速语言。然而,我对生物信息学中“两种语言问题”有更多见解,这里不作详述。
博主展示了一个使用Mojo实现的基准测试,其性能优于一个优化过的Rust库。我克隆了代码仓库进行查看,发现Mojo并不像Python,例如它支持类型参数化的泛型函数、两种函数定义形式、不同类型的整数、可变与不可变变量、C风格的类型声明以及强制性类型签名等特性。尽管如此,Mojo确实具备一些低级功能,表明它并非一种纯动态语言,而是一种旨在与Python良好交互的静态语言。
Mojo在深度学习领域的应用也是一个亮点,因为它试图解决类似生物信息学的“两种语言问题”。不过,我不确定Mojo能否替代如PyTorch这样的框架,或者能否无缝集成到其中以保留张量梯度。Mojo或许更适合开发全新的未来框架,但若目标是摆脱现有Python生态系统,那么转向 Julia 可能更合适。
Mojo的SIMD原生支持和对性能的专注令人印象深刻,但其“Python化”特性是否真有太大益处值得商榷。毕竟,学习新语法比理解函数单态化、借用语义或编译器指令要简单得多。Mojo的主要应用场景似乎是深度学习,但我对此持保留态度。
文章中提到的FASTQ解析基准测试,任务是从1.4GB的FASTQ文件中统计读取数量、碱基数量和质量字符数量。当前Needletail(Rust实现)在这项测试中领先,而我在Julia中编写的FASTX.jl则稍逊一筹。由于无法亲自测试Mojo,我只能根据其提供的数据推测其性能接近Needletail,速度相当快。
Mojo的解析器主要依赖于寻找新行的循环,缺乏有效的验证机制,这使得它与Needletail的比较失去意义。我认为,对于真实世界的文件,至少应进行基本的格式验证。至于验证程度,这是一把双刃剑:过多的验证会降低性能,而过于宽松可能导致错误结果。
总之,Mojo确实提供了高性能代码的可能性,但它是否真正解决了生物信息学和深度学习中的“两种语言问题”,仍有待观察。在我看来,Julia已经为这些问题提供了一些解决方案,而且Mojo的发展可能会从Julia那里汲取灵感。然而,资源的竞争可能导致技术选择的零和游戏,而这可能会阻碍更优解的普及。