当前位置: 首页 > 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; 列表属于可变序列,可以任意修改列表中的元素。 元组的…...

(资料收藏)王阳明传《知行合一》共74讲,王阳明知行合一音频讲解资料

今天给大家带来的不是软件&#xff0c;而是一份精神食粮——《知行合一》的教程福利。这可不是一般的教程&#xff0c;它关乎心灵&#xff0c;关乎智慧&#xff0c;关乎我们如何在纷繁复杂的世界中找到自己的位置。 咱们得聊聊王阳明&#xff0c;这位明代的大儒&#xff0c;他…...

空气质量预报模式系统WRF-CMAQ

空气污染问题日益受到各级政府以及社会公众的高度重视&#xff0c;从实时的数据监测公布到空气质量数值预报及预报产品的发布&#xff0c;我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…...

Collections.sort()方法总结

Collections.sort()方法总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们来探讨 Java 中的 Collections.sort() 方法。这个方法是 Java 集合框架中的…...

Java23种设计模式(二)

1、单例模式 单例模式&#xff08;Singleton Pattern&#xff09;是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式&#xff0c;它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类&#xff0c;该类负责创建自己的对象&#xff0c;同时确保只有…...

Web前端收入来源:探索多元化的盈利渠道

Web前端收入来源&#xff1a;探索多元化的盈利渠道 在数字化时代&#xff0c;Web前端技术日益成为推动互联网业务发展的重要力量。对于前端开发者而言&#xff0c;除了传统的薪资收入外&#xff0c;还存在多种潜在的收入来源。本文将从四个方面、五个方面、六个方面和七个方面…...

抽象工厂模式(大话设计模式)C/C++版本

抽象工厂模式 C 参考&#xff1a;https://www.cnblogs.com/Galesaur-wcy/p/15927110.html #include <iostream> using namespace std;// 抽象产品Department ,定义具体产品的公共接口 class Department { public:virtual ~Department() default;virtual void Insert()…...

springboot宠物医院信息管理系统-计算机毕业设计源码04164

摘 要 现如今在中国&#xff0c;随着人民生活质量的逐渐提高&#xff0c;以及人民群众消费能力的日渐增长&#xff0c;各种各样的家养小动物&#xff0c;已经逐渐成为人类越来越亲密的生活伴侣。并且&#xff0c;现如今社会竞争及其激烈&#xff0c;人们的生活节奏越发急促、紧…...

Leetcode Hot100之哈希表

1. 两数之和 题目描述 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现思路…...

Vision Transformer with Sparse Scan Prior

摘要 https://arxiv.org/pdf/2405.13335v1 In recent years, Transformers have achieved remarkable progress in computer vision tasks. However, their global modeling often comes with substantial computational overhead, in stark contrast to the human eye’s eff…...

笔记-python 中BeautifulSoup入门

在前面的例子用&#xff0c;我用了BeautifulSoup来从58同城抓取了手机维修的店铺信息&#xff0c;这个库使用起来的确是很方便的。本文是BeautifulSoup 的一个详细的介绍&#xff0c;算是入门把。文档地址&#xff1a;http://www.crummy.com/software/BeautifulSoup/bs4/doc/ …...

直销管理系统/seo的目的是什么

新风系统长年工作&#xff0c;不对它进行保养的话&#xff0c;会出现很多问题。那我们应该如何保养新风系统呢?在此&#xff0c;小编为大家介绍下新风系统的保养方法。1.风口及滤网清洗 新风系统运行时&#xff0c;出风口因静电原因会吸附大量空气中的灰尘&#xff0c;灰尘容易…...

网站做管理员消息推送/关键词推广seo

MySQL锁定机制简介 数据库锁定机制简单来说就是数据库为了保证数据的一致性而使各种共享资源在被并发访问访问变得有序所设计的一种规则。对于任何一种数据库来说都需要有相应的锁定机制&#xff0c;所以MySQL自然也不能例外。MySQL数据库由于其自身架构的特点&#xff0c;存在…...

邢台网站设计/万词优化

关键词&#xff1a;防水卷材、SBS、应用1664字|预计阅读时间&#xff1a;5分钟产品概述SBS弹性体改性沥青防水卷材是以SBS(苯乙烯一丁二烯一苯乙烯)热塑性弹性体改性沥青为浸涂材料&#xff0c;以优质聚酯毡、玻纤毡、玻纤增强聚酯毡为胎基&#xff0c;以细砂、矿物粒料、PE膜、…...

it外包公司上海/杭州seo薪资水平

登录页面&#xff1a; 主页&#xff1a; 错误页面&#xff1a; 步骤流程示意图&#xff1a; 示例代码如下&#xff1a; 在登陆中异常的处理&#xff1a; package com.tarena.netctoss.dao;import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.R…...

wordpress进入文字版/东莞网站制作十年乐云seo

1.简介 PCH文件是Xcode编程中全局引用共享的文件。可以在这里引入头文件或者宏定义来方便程序中多个文件访问。 2.PCH文件创建 打开工程 New File… -> iOS Other -> PCH File 输入PCH文件名字即可 3. PCH 文件配置 a. 找到 Project > Build Settings 搜索 “Prefix H…...

哪些网站是用php编写的/百度推广代理公司哪家好

今天小编在网上看到一群程序员们在集体探讨自己曾经给自己的电脑文件夹起过怎么样“清新脱俗”的名称&#xff0c;其实不乏老司机们教授各种经验&#xff0c;希望能对大家有用呦&#xff01; 程序员0号 Java(Japanese action video of adult&#xff09; 程序员1号 课程演讲…...