Mojo崛起:AI-first 的编程语言能否成为新流行?

news2024/12/30 2:22:14

眨眼之间,你可能会错过又一种编程语言的发明。

有个笑话说,程序员花费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开发和计算的未来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1835718.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS角落里的知识:一杯冰美式的时间 -- 之打字机

一、前言 模拟编辑器或者模拟输入框中文字啪啦啪啦输入的效果,往往能够吸引人们的眼球,让用户的注意力聚焦在输入的内容上,本文将和大家探讨打字机效果的实现方式以及应用。Demo基于API12。 二、思路 拆分开来很简单,将字符串拆…

高等数学笔记(三):导数

一、导数概念 1.1 导数的定义 1.1.1 函数在一点处的导数与导函数 1.1.2 单侧导数 1.2 导数的几何意义 1.3 函数可导性与连续性的关系 二、函数的求导法则 2.1 函数的和、差、积、商的求导法则 2.2 反函数的求导法则 2.3 复合函数的求导法则 2.4 基本求导法则与导数公式 三…

以太坊智能合约不能调用:一定注意智能合约地址,每次部署地址都会变化;nonce值 什么作用,是什么;在交易中调用智能合约添加附加信息

目录 以太坊智能合约不能调用 一定注意智能合约地址,每次部署地址都会变化 Transaction must include these fields: %r" % missing_keys 缺少nonce nonce值 什么作用,是什么 在交易中调用智能合约添加附加信息 1. 定义智能合约 2. 部署并调用智能合约 注意事项…

如何恢复iPhone iCloud云盘资料删除?给出建议

🏆本文收录于「Bug调优」专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&…

JAVAEE之网络原理(2)_传输控制协议(TCP)、概念、格式、确认应答及超时重传机制

前言 在上一节中,我们介绍了 UDP (用户数据报) 的相关知识,在这一节中我们将继续介绍传输层中另一种更为重要的协议。 一、什么是TCP协议? 1.1 TCP 基本概念 TCP协议全称:传输控制协议(TCP,Transmission C…

redhat 7.8修改网卡名称,最佳实践

背景&#xff1a; 因业务需求&#xff0c;需要将新创建的redhat7.8服务器的网卡名称修改为ens160&#xff0c;目前服务器的网卡名称是ens192。 一、修改网卡配置信息&#xff1a; 查看当前网卡信息&#xff0c;并获取到网卡到Mac地址 [rootlocalhost ~]# ip addr 1: lo: <L…

【CT】LeetCode手撕—103. 二叉树的锯齿形层序遍历

目录 题目1- 思路2- 实现⭐103. 二叉树的锯齿形层序遍历——题解思路 2- ACM实现 题目 原题连接&#xff1a;103. 二叉树的锯齿形层序遍历 1- 思路 二叉树的层序遍历&#xff0c;遇到奇数时&#xff0c;利用 Collections.reverse() 翻转即可 2- 实现 ⭐103. 二叉树的锯齿形层…

QT修改界面图标及exe程序图标

目录 步骤1. 添加图标文件2. 添加保存图标变量3. 窗口启动初始化图标文件4. 构建后即可完成图标的更改 步骤 1. 添加图标文件 如下&#xff0c;添加一个名为 favicon.ico 的文件到.pro 工程文件所在的目录中。 2. 添加保存图标变量 RC_ICONS是一个变量&#xff0c;它被用于存储…

项目准备和启动

1.什么是项目建议书&#xff1f; 2.项目建议书的内容 3.可行性分析方法 4.项目组织结构&#xff08;职能型 项目型 矩阵型&#xff09; 5.项目管理层决策层执行层之间的关系 6.软件项目的可行性分析包括哪几个方面&#xff1f;影响决策的关键因素又是什么&#xff1f; 软件项目…

88. 合并两个有序数组(简单)

88. 合并两个有序数组 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;88. 合并两个有序数组 2.详细题解 两个数组均有序&#xff08;非递减&#xff09;&#xff0c;要求合并两个数组&#xff0c;直观的思路&#xff0c;借助第三个数…

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020&#xff0c;基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV&#xff0c;主要用于优化彩色视频信号的传输。与RGB视频信号传输相比&#xff0c;它最大的优点在于只需占用极少的频宽&#xff08;RGB要求三个独立的视频信号同时传输&#xff09;。其…

栈(Stack)

目录 一.栈&#xff08;Stack&#xff09; 1.概念 2.栈的使用 3.栈的模拟实现 二.栈相关习题 1.逆波兰表达式求值 &#xff08;1&#xff09;链接 &#xff08;2&#xff09;解析 &#xff08;3&#xff09;题解 2.括号匹配 &#xff08;1&#xff09;链接 &#xff…

【UIDynamic-动力学-UICollisionBehavior-碰撞行为-创建边界 Objective-C语言】

一、接下来,我们来说一个,碰撞的创建边界, 1.我们刚才呢,仅仅是让self.view,来变成边界, 实际上,这个边界呢,还可以自己去创建, 我们把之前的代码备份一份儿,改个名儿:05-碰撞行为-创建边界, 选中这一段儿,先删掉, command + R, 好,这一段儿,删掉啊, 接下来…

Altair 助力优化摩托车空气动力学性能,实现最佳的整流罩设计

案例简介 整流罩是绝大多数摩托车的重要组成部分&#xff0c;旨在提高车辆的空气动力学性能和稳定性。Altair 与 KTM 公司员工组成的项目团队&#xff0c;针对摩托车整流罩空气动力学方面的学生项目&#xff0c;展开了密切合作。 项目任务主要是对摩托车整流罩设计进行比较&…

基于QT和C++实现的中国象棋

一&#xff0c;源码 board.h #ifndef BOARD_H #define BOARD_H#include <QWidget> #include "Stone.h"class Board : public QWidget {Q_OBJECT public:explicit Board(QWidget *parent 0);bool _bRedTurn; // 红方先走int _currentPlayer; // 当前玩家&…

电子期刊制作秘籍:如何让你的出版物脱颖而出?

​如何让你的电子期刊在众多出版物中脱颖而出&#xff0c;吸引读者的目光呢&#xff1f;在微信公众号这个平台上&#xff0c;让你的电子期刊内容更具吸引力、专业性和创新性&#xff0c;是至关重要的。下面&#xff0c;我将教你制作电子期刊一些方法&#xff0c;助你打造出一本…

在得物的小程序生态实践

一、前言 提起微信小程序&#xff0c;相信所有人都不陌生&#xff0c;下面这个典型使用场景你一定经历过&#xff1a; 餐馆落座——微信扫桌角小程序码——使用微信小程序点餐&#x1f354; 微信小程序&#xff08;下文简称&#xff1a;小程序&#xff09;作为一种在微信平台…

怎么样判断真假单北斗

国产化替代正在中国各行各业逐步提升中&#xff0c;特别涉及重点产业——国家安全&#xff01; 只有仅支持B1I和B3信号的芯片才是真正的单北斗芯片。但凡你支持了B1C、B2a、B2b中的一个就是假的单北斗。 B1C/L1/E1、B2a/ L5/E5a、B2b/G3/E5b这些频点与其他GNSS系统是完全重合的…

举个栗子!Tableau 技巧(277):创建径向 WIFI 信号图

之前为大家分享了 &#x1f330;&#xff1a;学做径向柱状图&#xff08;Radial Column Chart&#xff09;。在此基础上&#xff0c;我们又做了进一步的延展&#xff1a;径向 WIFI 信号图。 它的用法和径向柱状图一致&#xff0c;区别在于它将柱体分切成多个弧线&#xff08;内…

豆包高质量声音有望复现-Seed-TTS

我们介绍了 Seed-TTS&#xff0c;这是一个大规模自回归文本转语音 &#xff08;TTS&#xff09; 模型系列&#xff0c;能够生成与人类语音几乎没有区别的语音。Seed-TTS 作为语音生成的基础模型&#xff0c;在语音上下文学习方面表现出色&#xff0c;在说话人的相似性和自然性方…