眨眼之间,你可能会错过又一种编程语言的发明。
有个笑话说,程序员花费20%的时间编写代码,80%的时间决定使用什么语言。
事实上,编程语言如此之多,以至于我们不确定实际有多少种。据估计,至少有700种编程语言在不同程度上被使用和滥用。现在存在的编程语言似乎总有改进的空间。
随着AI不断推动技术进步,它也在挑战我们最流行的编程语言,如Java、C和Python。像其他领域一样,AI是一个迫切需要新编程语言来解决的问题。
诸如Mojo、Bend等AI-first的编程语言能否获得开发人员的芳心?无论答案如何,回顾历史我们会发现,编程语言的创新并不是一个坏主意。
1.AI语言的上一个黄金时代
这并不是AI第一次推动新编程语言的浪潮。20世纪70年代和80年代是AI语言的黄金时代,如LISP和Prolog,它们引入了开创性的概念,如符号处理和逻辑编程。那时,AI也是热门话题。
值得注意的是,LISP语言对软件的未来产生了深远影响,推出了函数式编程范式,最终影响了现代语言如Python、Haskell和Scala的设计。LISP也是首批实现动态类型的语言之一,在这种类型中,类型与值相关联而不是变量,允许更多的灵活性和更容易的原型开发。它还引入了垃圾回收功能,自动回收不再使用的内存,这是许多现代编程语言(如Java、Python和JavaScript)所采用的功能。可以公平地说,没有LISP,我们今天可能不会在这里。
当AI领域在20世纪70年代和80年代经历了一段资金和兴趣减少的长时间时,被称为“AI寒冬”,对专门AI语言如LISP的关注开始减退。同时,通用计算的快速发展导致了通用语言如C的兴起,这些语言为各种应用(包括系统编程和数值计算)提供了更好的性能和可移植性。
2.AI-first语言的回归
现在,历史似乎在重演,AI再次推动了新编程语言的发明,以解决其棘手的问题。现代AI算法所需的强大数值计算和并行处理突显了需要能够有效桥接抽象和充分利用底层硬件的语言。
可以说,这一趋势始于TensorFlow的Tensor计算语法、Julia以及重新燃起的对数组导向语言如APL和J的兴趣,这些语言提供了与机器学习和神经网络的数学基础相一致的领域特定构造。这些项目试图减少将数学概念转换为通用代码的开销,让研究人员和开发人员能够更多地关注核心AI逻辑,而不是低级实现细节。
最近,一波新的AI-first语言应运而生,它们从头开始设计,以解决AI开发的特定需求。Higher Order Company创建的Bend旨在为AI提供灵活和直观的编程模型,具有自动微分和与流行AI框架的无缝集成功能。Modular AI开发的Mojo则专注于高性能、可扩展性和构建与部署AI应用的易用性。Swift for TensorFlow是Swift编程语言的扩展,结合了Swift的高级语法和TensorFlow的机器学习能力。这些语言代表了朝向AI开发的专用工具和抽象的日益增长的趋势。
虽然Python、C++和Java等通用语言在AI开发中仍然很受欢迎,但AI-first语言的复兴表明,AI的独特需求需要专门为该领域量身定制的语言,就像早期的AI研究催生了LISP等语言一样。
3.Python在AI中的局限性
Python因其简单性、通用性和广泛的生态系统长期以来一直是现代AI开发者的首选。然而,它的性能限制对于许多AI用例来说是一个主要缺点。
用Python训练深度学习模型可能会非常慢——我们说的是像在DMV(车辆管理局)排队等候那样慢,等待收银员找零那样慢。像TensorFlow和PyTorch这样的库通过使用底层的C++来帮助提高性能,但Python仍然是瓶颈,特别是在预处理数据和管理复杂的训练工作流时。
在实时AI应用如自动驾驶或实时视频分析中,推理延迟至关重要。然而,Python的全局解释器锁(GIL)阻止了多个本机线程同时执行Python字节码,导致在多线程环境中表现不佳。
在大规模AI应用中,内存管理效率对于最大化可用资源的利用至关重要。Python的动态类型和自动内存管理会增加内存使用和碎片化。像C++和Rust这样的语言提供的低级内存控制允许更有效地使用硬件资源,从而提高AI系统的整体性能。
在生产环境中部署AI模型,特别是在具有有限计算资源的边缘设备上,用Python可能会遇到挑战。Python的解释性和运行时依赖性会导致资源消耗增加和执行速度变慢。像Go或Rust这样的编译语言,因其较低的运行时开销和更好的系统资源控制,通常更适合在边缘设备上部署AI模型。
4.Mojo:新的AI-first编程语言,无缝衔接Python生态
Mojo是一种新编程语言,承诺弥合Python的易用性和前沿AI应用所需的超快性能之间的差距。Mojo由Swift编程语言和LLVM编译器基础架构的创建者Chris Lattner创立的公司Modular开发。Mojo是Python的超集,这意味着开发者可以利用他们现有的Python知识和代码库,同时解锁前所未有的性能提升。Mojo的创造者声称,它可以比Python代码快多达35000倍。
Mojo设计的核心是其与AI硬件(如运行CUDA的GPU和其他加速器)的无缝集成。Mojo使开发者能够充分利用专用AI硬件的潜力,而不必陷入低级细节中。
Mojo的一个主要优势是它与现有Python生态系统的互操作性。与Rust、Zig或Nim等语言不同,Mojo允许开发者编写与Python库和框架无缝集成的代码。开发者可以继续使用他们喜欢的Python工具和包,同时受益于Mojo的性能增强。
Mojo引入了几项使其与Python区别开来的功能。它支持静态类型,可以帮助在开发早期捕捉错误并实现更有效的编译。然而,开发者仍然可以在需要时选择动态类型,提供灵活性和易用性。语言引入了新的关键字,如“var”和“let”,提供不同程度的可变性。Mojo还包括一个新的“fn”关键字,用于在严格的类型系统内定义函数。
Mojo还采用了类似于Rust的所有权系统和借用检查器,确保内存安全并防止常见编程错误。此外,Mojo提供指针的内存管理,使开发者可以对内存分配和释放进行细粒度控制。这些功能有助于Mojo的性能优化,并帮助开发者编写更高效和无错误的代码。
Mojo最令人兴奋的方面之一是其加速AI开发的潜力。Mojo能够编译成高度优化的机器代码,可以在CPU和GPU上本地速度运行,使开发者能够在不牺牲性能的情况下编写复杂的AI应用。语言包括数据并行性、任务并行性和流水线处理的高级抽象,使开发者能够用最少的代码表达复杂的并行算法。
Mojo在概念上比一些其他新兴AI语言(如Bend)更低级,后者将现代高级语言功能编译到Apple Silicon或NVIDIA GPU上的本地多线程。Mojo提供对并行性的细粒度控制,特别适合手工编码现代神经网络加速。通过为开发者提供直接控制计算映射到硬件上的能力,Mojo实现了高度优化的AI实现。
5.利用开源的力量
根据Mojo的创建者Modular的说法,自去年8月普遍可用以来,该语言已经吸引了超过17.5万开发者和5万家组织。
尽管Mojo的性能和潜力令人印象深刻,但其最初的采用可能因其专有状态而停滞不前。
然而,Modular最近决定将Mojo的核心组件在定制版Apache 2许可下开源。此举可能会加速Mojo的采用,并培育更充满活力的协作和创新生态系统,类似于开源是Python等语言成功的关键因素。
开发者现在可以探索Mojo的内部工作原理,为其开发做出贡献,并从其实现中学习。这种协作方式可能会导致更快的错误修复、性能改进和新功能的增加,最终使Mojo更加多功能和强大。
宽松的Apache许可证允许开发者自由使用、修改和分发Mojo,鼓励围绕该语言的生态系统的增长。通过开源,Mojo有潜力吸引更多的开发者、研究人员和企业,使其成为AI开发的重要工具。
开放源码的决定还表明Modular对其技术和开发社区的信心。通过拥抱开源模式,Modular表明他们致力于透明度、协作和技术进步,这可能会吸引更广泛的开发者社区并加速Mojo的采用。
6.全新的AI优先编程浪潮
虽然Mojo是一个有前途的新进入者,但它并不是唯一一个试图成为AI开发首选的语言。还有几种其他新兴语言也是从头开始设计的,以满足AI工作负载的需求。
一个显著的例子是Swift for TensorFlow,这是一个雄心勃勃的项目,旨在将Swift的强大语言功能带入机器学习。由谷歌和苹果公司合作开发,Swift for TensorFlow允许开发者使用原生Swift语法表达复杂的机器学习模型,并且具备静态类型、自动微分和XLA编译以在加速器上进行高性能执行。不幸的是,谷歌已经停止了该项目的开发,项目现在已归档,这显示了即使是谷歌这样的巨头在新语言开发中获得用户吸引力的难度。
此后,谷歌越来越关注JAX,一个用于高性能数值计算和机器学习(ML)的库。JAX是一个Python库,提供高性能的数值计算和机器学习功能,支持自动微分、XLA编译和高效使用加速器。虽然它不是独立的语言,但JAX扩展了Python,使其具有更具声明性和功能性的风格,非常符合机器学习的数学基础。
最新的新增内容是Bend,一种大规模并行的高级编程语言,可以将类似Python的语言直接编译成GPU内核。与CUDA和Metal等低级语言不同,Bend更像是Python和Haskell,提供快速对象分配、全闭包支持的高阶函数、不受限制的递归,甚至继续执行。它运行在大规模并行硬件(如GPU)上,基于核心数量实现近线性加速,无需显式的并行注释——没有线程生成、锁、互斥锁或原子操作。由HVM2运行时驱动,Bend在任何可能的地方利用并行性,使其成为AI的万能工具——适用于各种场合。
这些语言利用现代语言特性和强类型系统,使AI算法的编码更加表达性和安全,同时仍然在并行硬件上提供高性能执行。
7.AI开发新时代的黎明
像Mojo、Bend、Swift for TensorFlow、JAX等以AI为重点的编程语言的复兴标志着AI开发新时代的开始。随着对更高效、更具表达性和硬件优化工具的需求增加,我们预计将看到更多专门针对AI独特需求的语言和框架的涌现。这些语言将利用现代编程范式、强类型系统以及与专用硬件的深度集成,使开发者能够构建具有前所未有性能的更复杂的AI应用。
AI优先语言的兴起可能会激发AI、语言设计和硬件开发之间相互作用的新一波创新。随着语言设计师与AI研究人员和硬件供应商密切合作以优化性能和表达性,我们可能会看到为这些语言和AI工作负载设计的新型架构和加速器的出现。
这种AI、语言和硬件之间的密切关系对于释放人工智能的全部潜力至关重要,能够在自动化系统、自然语言处理、计算机视觉等领域实现突破。我们今天创造的语言和工具正在重塑AI开发和计算的未来。