2024 年 3 月 29 日,Modular Inc. 宣布开源 Mojo 的核心组件。
Mojo语言是一种新的编程语言,由 Chris Lattner(LLVM 和 Swift 语言的创始人)创建的 Modular AI 公司开发。
它结合了Python的易用性和C的性能,旨在为人工智能开发者提供一种能够高效编程AI硬件和模型的工具。
1、Mojo的主要特点
● Python 的超集
Mojo 完全兼容 Python,可以直接导入和使用 Python 库。这意味着您可以利用 Python 庞大的生态系统,同时享受 Mojo 的性能优势。
● 系统级编程
Mojo 允许直接访问内存,并提供对硬件的底层控制,使其适用于高性能计算和系统编程。
● 编译型语言
Mojo 代码会被编译成机器码,从而实现比 Python 更快的执行速度。
● 并行计算
Mojo 支持多线程和 SIMD(单指令多数据流)操作,可以充分利用现代硬件的并行处理能力。
● 自动微分
Mojo 内置了自动微分功能,这对于机器学习模型的训练至关重要。
2、Mojo的目标
● AI语言
成为 AI 开发的统一语言,将研究、开发和部署整合到一个平台上。
● 性能和效率
提供比现有 AI 框架更高的性能和效率。
● 低门槛
降低 AI 开发的入门门槛,让更多人能够参与其中。
3、Mojo的现状
● 发布和开发进度
Mojo语言自发布以来,已经吸引了大量开发者的关注和参与。Mojo已经积累了超过17.5万名开发者和5万个组织的关注。
● 性能特点
Mojo语言以其卓越的性能和开发效率而闻名,其性能比Python快68000倍。这种性能的提升是通过结合动态与静态语言的优点实现的。
● 开源情况
Mojo语言已经正式开源,其核心模块在Apache 2许可证下发布。开源策略旨在通过社区的反馈来塑造语言的设计,并促进其发展。
● 应用案例
Mojo语言已经在一些AI场景中得到应用,例如在Modular公司的推理引擎中使用,并且有AI公司投入了Mojo的前期培训。
4、Mojo的潜力
Mojo 语言具有巨大的潜力,它有可能彻底改变 AI 开发的方式。凭借其强大的功能和易用性,Mojo 可以加速 AI 创新,并使其更容易为各种应用构建高性能 AI 系统。
● 值得关注的方面:
Mojo 语言的生态系统仍在建设中,需要时间才能成熟。
Mojo 的性能优势还需要在实际应用中得到验证。
Mojo 是否能够成功挑战 Python 在 AI 领域的统治地位还有待观察。
总而言之,Mojo 语言是一个雄心勃勃的项目,它有可能成为 AI 开发的未来。我们需要继续关注 Mojo 的发展,看看它能否实现其承诺。
坚持每天写代码,真的能提高编程水平吗?
学习编程离不开写代码,但仅仅写代码是不够的。编程技能的提升还依赖于其他两个常被忽视的要素:阅读代码和刻意练习
阅读代码
阅读代码对程序员而言,就像诗人阅读他人的诗作,作家阅读他人的文学作品一样重要。正如古人所说:“巧妇难为无米之炊”,不阅读他人的代码,我们如何获得新的灵感和素材来编写代码?
重复编写相同或类似的代码,虽然可以提高打字速度,但并不能真正提升编程技能。如果你发现自己每天都在编写类似的代码,那么你应该学习如何抽象化这部分工作,减少重复劳动。而抽象化的灵感,很可能来自于你阅读的其他项目代码。
《Code Reading: The Open Source Perspective》一书指出,软件开发工作中有40%到70%是改进和完善现有项目。在进行这项工作之前,我们需要先学会阅读代码。
然而,大多数计算机教育只教授我们如何编写代码,而没有告诉我们如何阅读代码。当然,掌握基础知识(如计算机组成原理、操作系统、数据结构与算法、数据库、网络等)是阅读和编写代码的基础。
阅读和编写代码是相辅相成的,缺一不可。只阅读而不编写是空谈,只编写而不阅读则是无源之水。那么,我们应该如何选择合适的项目来阅读呢?
这需要分类考虑:本职领域的代码和非本职领域的代码。
以量化交易为例,本职领域的代码项目可能涉及回测框架、交易框架、数值计算、时间序列处理等。而非本职领域的项目则可以是任何你感兴趣的项目。
对于本职领域的项目,我们需要认真阅读,分析其结构、架构、算法和实现方式。而对于非本职领域的项目,我们可以像阅读小说或新闻一样轻松阅读,从中发现一些亮点,如小算法或语法糖等。
同时,我们还需要避免一些项目,例如编码风格不一致、复杂且难以理解、存在明显逻辑问题、无人维护或长期无人维护、大量使用无法迁移的技术的项目。
刻意练习
至于刻意练习,它意味着我们在编写代码时应该有明确的目的。
是在做一个项目,还是在练习某个架构或算法?这是项目的哪一部分?这部分有什么运行时需求?我应该采用什么方法来解决?之前是否接触过类似的方法?
总之,通过每天的阅读和编写代码,我们应该有意识地更新自己的知识库,纳入新的东西,并用新的东西与已有的知识建立联系。这就是刻意练习的意义。
通过阅读和编写代码的刻意练习,我们不仅能够提升自己的编程技能,还能不断扩展和更新我们的知识库。
编程不仅仅是编写代码,更是一种学习和成长的过程。通过不断地阅读、分析、练习和反思,我们能够更深入地理解编程的本质,提高解决问题的能力,并在编程的道路上不断前进。