当前位置: 首页 > news >正文

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

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

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

相关文章:

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

眨眼之间,你可能会错过又一种编程语言的发明。 有个笑话说,程序员花费20%的时间编写代码,80%的时间决定使用什么语言。 事实上,编程语言如此之多,以至于我们不确定实际有多少种。据估计,至少有700种编程语…...

【数据结构与算法】哈夫曼树与哈夫曼编码

文章目录 哈夫曼树(最优二叉树)定义举个🌰(WPL的计算) 哈夫曼树的构造(最优二叉树的构造)举个🌰 哈夫曼树的性质 哈夫曼编码定义构造 哈夫曼树(最优二叉树) …...

基于多头注意力机制卷积神经网络结合双向门控单元CNN-BIGRU-Mutilhead-Attention实现柴油机故障诊断附matlab代码

在使用这些深度学习库时,你可以按照以下步骤构建CNN-BIGRU-Multihead-Attention模型: 导入所需的库和模块。例如,在使用TensorFlow时,你可以导入tensorflow库和其他需要的模块。 定义输入层。根据你的数据,定义适当的…...

k8s redis 单节点部署

k8s redis 单节点部署kubectl 执行脚本 kubectl --kubeconfig ~/.kube-rz-real/config apply -f redis-leader.yaml -n rz-dt vi redis-leader.yamlapiVersion: apps/v1 kind: Deployment metadata:name: redis-leader-deploylabels:app: redisrole: leadertier: backend sp…...

科普童话投稿

《科普童话》杂志是由国家新闻出版总署批准、黑龙江省教育厅主管、黑龙江省语言文字报刊社主办的正规期刊。《科普童话》以培养科学素养与创新探索精神为办刊宗旨,以科学与艺术统一为编辑方针,以科学教育、教育科学作为自己的出发点,致力于对…...

【Ardiuno】使用ESP32单片机创建web服务通过网页控制小灯开关的实验(图文)

经过实验测试ESP32单片机的网络连接还是很方便的,这里小飞鱼按照程序实例的代码亲自实验一下使用Esp32生成的网页服务来实现远程无线控制小灯开关功能,这样真的是离物联网开发越来越近了,哈哈! 连接好开发板和电路,将…...

百元蓝牙耳机哪款音质最好?四款实力超群机型推荐

在蓝牙耳机市场竞争日益激烈的今天,百元级别的耳机已经具备了令人瞩目的音质表现,对于追求高性价比的消费者来说,如何在众多选项中挑选出一款音质卓越的蓝牙耳机,无疑是一项重要而又充满挑战的任务,今天我将为大家推荐…...

Linux系统之mtr命令的基本使用

Linux系统之mtr命令的基本使用 一、mtr命令介绍二、mtr命令使用帮助2.1 mtr命令的帮助信息2.2 mtr帮助信息解释 三、安装mtr工具四、mtr命令的基本使用4.1 直接使用4.2 设定ping次数4.3 禁用DNS解析4.4 显示IP地址4.5 调整间隔 五、总结 一、mtr命令介绍 mtr命令是一个网络诊断…...

实战tcpdump4.99.4交叉编译

主要是记录交叉编译的一个坑,不知道为什么网上的教程都没遇到过。 环境 libpcap 1.10.4tcpdump 4.99.4WSL 编译步骤 注意事项 注意解压的时候文件夹名需要是libpcap-1.10.4,由于我是在github直接下载zip的压缩包名是libpcap-libpcap-1.10.4.tar.gz解…...

重生奇迹MU召唤术师简介

出生地:幻术园 性 别:女 擅 长:召唤幻兽、辅助魔法&攻击魔法 转 职:召唤巫师(3转) 介 绍:从古代开始流传下来的高贵的血缘,为了种族纯正血缘的延续及特殊使用咒术的天赋&…...

神经网络模型---AlexNet

一、AlexNet 1.导入tensorflow库,这里给简称为tf库 import tensorflow as tf from tensorflow.keras import datasets, layers, modelsdatasets:是用于训练和测试机器学习模型的数据集合 layers:是构建神经网络模型的关键组成部分 models&a…...

corona渲染器与vray比哪个好?支持云渲染平台吗

​在视觉渲染技术领域,V-Ray和Corona都以其卓越的性能和广泛应用赢得了高度评价。这两款渲染器各有其独特的优势,使得在它们之间做出选择并非易事。不同的应用场景和用户需求可能会让它们各自展现出不同的优势。 一、corona渲染器跟vray怎么样 在比较V-…...

每日一练:攻防世界:Ditf

这是难度1的题吗??? 拿到一个png图片,第一反应就是CRC爆破,结果还真的是高度被修改了 这里拿到一个字符串,提交flag结果发现不是,那么只可能是密钥之类的了 看看有没有压缩包,搜索…...

约瑟夫环递归算法详解与实现

一、引言 约瑟夫环问题是一个著名的理论问题,其背景是在古罗马时期,有n个犯人被围成一个圈,从第一个人开始报数,每次报到m的人将被处决,然后从下一个人开始重新报数,直到所有人都被处决。这个问题可以用递…...

互联网应用主流框架整合之构建REST风格的系统

REST(Representational State Transfer),中文译为“表述性状态转移”,是由Roy Fielding博士在他的博士论文中提出的一种软件架构风格,特别适用于网络应用的设计。REST不是一个标准,而是一种设计原则和约束集…...

vue3-自定义指令来实现input框输入限制

文章目录 前言具体实现分析主要部分详细解析导入和类型定义mounted 钩子函数unmounted 钩子函数指令注册使用 总结 前言 使用vue中的自定义指令来实现input框输入限制 其中关键代码强制触发input ,来避免,输入规则外的字符时,没触发vue的响…...

MySQL日志——redolog

redo log(重做日志) 为什么需要redo log? 在mysql提交一个事务后,这个事务所作的数据修改并不会直接保存到磁盘文件中,而是先保存在buffer pool缓冲区中,在需要读取数据时,先从缓冲区中找&…...

Python热涨落流体力学求解算法和英伟达人工智能核评估模型

🎯要点 🎯平流扩散简单离散微分算子 | 🎯相场模拟:简单旋节线分解、枝晶凝固的 | 🎯求解二维波动方程,离散化时间导数 🎯英伟达 A100 人工智能核性能评估模型 | 🎯热涨落流体动力学…...

【C语言】数组参数和指针参数详解

在写代码的时候难免要把【数组】或者【指针】传给函数&#xff0c;那函数的参数该如何设计呢&#xff1f; 1 一维数组传参 #include <stdio.h> void test(int arr[])//ok? {} void test(int arr[10])//ok? {} void test(int* arr)//ok? {} void test2(int* arr[20])…...

Tuple 元组

文章目录 一、什么是元组 &#xff1f;二、元组的具体操作2.1 创建元组2.1.1 tuple() 创建元组函数和 list() 创建列表函数总结 2.2 元组的元素访问操作2.3 元组的元素计数操作2.4 zip 对象 一、什么是元组 &#xff1f; 列表属于可变序列,可以任意修改列表中的元素。 元组的…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

java 实现excel文件转pdf | 无水印 | 无限制

文章目录 目录 文章目录 前言 1.项目远程仓库配置 2.pom文件引入相关依赖 3.代码破解 二、Excel转PDF 1.代码实现 2.Aspose.License.xml 授权文件 总结 前言 java处理excel转pdf一直没找到什么好用的免费jar包工具,自己手写的难度,恐怕高级程序员花费一年的事件,也…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)

要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况&#xff0c;可以通过以下几种方式模拟或触发&#xff1a; 1. 增加CPU负载 运行大量计算密集型任务&#xff0c;例如&#xff1a; 使用多线程循环执行复杂计算&#xff08;如数学运算、加密解密等&#xff09;。运行图…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

python报错No module named ‘tensorflow.keras‘

是由于不同版本的tensorflow下的keras所在的路径不同&#xff0c;结合所安装的tensorflow的目录结构修改from语句即可。 原语句&#xff1a; from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后&#xff1a; from tensorflow.python.keras.lay…...