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

Mojo:比 Python 快 35000 倍的 AI 编程语言

Mojo:比 Python 快 35000 倍的 AI 编程语言

Mojo是一门刚刚发布的面向 AI 开发人员的编程语言。

Mojo 被设计为 Python 的超集,所以如果你已经掌握了 Python,学习 Mojo 会很容易。关键是 Mojo 将 Python 的易用性与 C 语言的性能相结合,速度比 Python 快 35000 倍!让你鱼与熊掌兼得。

如果您对 AI 感兴趣并且已经了解 Python,那么 Mojo 绝对值得一试。 这篇文章将带给你有关 Mojo 的所有信息。

在这里插入图片描述

文章目录

    • 既生Python,何生Mojo?
    • Mojo的特性
      • 1. Mojo 被设计为 Python 的超集
      • 2. 强类型检查
      • 3. 内存所有权和借用检查器
      • 4. 自动调节
      • 5. Mojo 利用 MLIR
    • 如何使用 Mojo

既生Python,何生Mojo?

Python 的简洁和强大使其成为数据科学、机器学习和人工智能等领域的首选语言。 它有大量的包,几乎涵盖所有场景和功能,对任何类型的开发者都非常有用。但对于需要极致性能的场景,Python 仅充当胶水语言,绑定到 C、C++ 和其他性能更好的语言上。

这促成了 numpy 和 TensorFlow 等库的诞生。 然而,这样做存在一个缺点:构建这些库非常复杂,需要对 CPython 的内部结构有底层的了解,且需要扎实的 C/C++ 知识等。

根据 Mojo 文档,Python 带来的问题更深层次,尤其是对 AI 领域的影响。

仅靠 Python 无法解决应用人工智能系统所需的所有问题,这就是 Mojo 的诞生理由。 Mojo 是一种结合了 Python 的易用性和 C 语言性能的编程语言。堪称鱼与熊掌兼得,两全其美的!

但 Mojo 并不是一个凭空冒出来的项目。 事实上,Mojo 来自一家名为 Modular 的公司,该公司由 Chris Lattner 共同创立,他是 Swift 编程语言和 LLVM 的创建者。 这就是为什么我认为这个项目值得关注的原因。 现在让我们看看 Mojo 的一些绝佳功能。

Mojo的特性

Mojo 附带了许多开箱即用的有趣功能,下面列举几个我认为很酷的功能特性。

1. Mojo 被设计为 Python 的超集

Mojo 旨在与 Python 生态系统完全兼容。

这意味着如果您是 Python 程序员,您可以轻松地上手 Mojo,因为这两种编程语言有许多共同的功能、特性和库。

Mojo 中还提供了 numpy、pandas 和 matplotlib 等库。 下面代码演示了如何使用 Mojo 完成 matplotlib 绘图。

def make_plot(m: Matrix):plt = Python.import_module("matplotlib.pyplot")fig = plt.figure(1,[10,10 * yn // xn],64)ax = fig.add_axes([0.0,0.0,1.0,1.0],False,1)plt.imshow(image)plt.show()make_plot(compute_mandelbrot())

目前 Mojo 仍处于非常早期的阶段,因此它仍然缺少 Python 的许多功能(例如,它还不支持类)。 希望在未来的更新中,Mojo 能与 Python 完全兼容。

2. 强类型检查

Mojo 利用类型来实现更好的性能和错误检查。

def sort(v: ArraySlice[Int]):for i in range(len(v)):for j in range(len(v) - i - 1):if v[j] > v[j+1]:swap(v[j], v[j+1])

尽管你仍然可以像 Python 一样使用灵活的类型,但 Mojo 建议使用严格的类型检查。 这可以使你的代码更加可预测、更易于管理也更安全。

3. 内存所有权和借用检查器

Mojo 支持 owned 参数约定,该约定用于想要独占某个值的所有权的函数。

def reorder_and_process(owned x: HugeArray):sort(x)			# 原地更新give_away(x^)	# 转移所有权print(x[0])		# 错误:x所有权已经移除

这里的概念跟 Rust 类似,相信 Mojo 是借用了 Rust 的部分内存管理思想,提升内存安全性。

4. 自动调节

Mojo 内置自动调整功能,可自动帮你找到参数的最佳值,以便最大化利用目标硬件的性能。

def exp_buffer[dt: DType](data: Arrayslice[dt]):# 搜索最佳向量长度alias vector_len = autotune(1,4,8,16,32)# 用自动调节的最佳值作为矢量化长度vectorize[exp[dt, vector_len]](data)

5. Mojo 利用 MLIR

通过使用多级中间表示 (MLIR) ,Mojo 开发人员可以充分利用向量、线程和 AI 硬件单元。这有助于 Mojo 实现出色的性能,因为与单线程执行的 Python 不同,Mojo 可以跨多个内核进行并行处理。

在这里插入图片描述

这就是 Mojo 比 Python 快 35000 倍的原因之一。

语言时间倍数
Python 3.10.91027s1倍
PyPy46.1s22倍
Scalar C++0.20s5000倍
Mojo0.03s35000倍

如何使用 Mojo

Mojo 仍在开发中,不过你可以在基于 JupyterHub 的 Playground 上试用它。 要试用 Mojo,请访问此网站进行注册。注意,注册时在“Modular Product Interest”这栏请选中 Mojo 。

祝大家编程愉快!

相关文章:

Mojo:比 Python 快 35000 倍的 AI 编程语言

Mojo:比 Python 快 35000 倍的 AI 编程语言 Mojo是一门刚刚发布的面向 AI 开发人员的编程语言。 Mojo 被设计为 Python 的超集,所以如果你已经掌握了 Python,学习 Mojo 会很容易。关键是 Mojo 将 Python 的易用性与 C 语言的性能相结合&am…...

1703_LibreOffice常用功能使用体验

全部学习汇总: GreyZhang/windows_skills: some skills when using windows system. (github.com) 首先需要说明的是我不是一个重度Office用户,甚至算不上一个重度的Office用户。我使用的Office软件最多的功能就是文档编辑,绝大多数时候还是文…...

Postgres:Win/Linux环境安装及一键部署脚本

1.Win安装Postgres (1)下载安装包 (2)开始安装 修改安装目录 选择要安装的组件 data也就是库表及数据的.dba文件存放目录 密码设置 端口设置 next next 开始安装 安装完成,Stack Builder 根据需要选择是否安装。仅仅是…...

每日一题144——数组大小减半

给你一个整数数组 arr。你可以从中选出一个整数集合,并删除这些整数在数组中的每次出现。 返回 至少 能删除数组中的一半整数的整数集合的最小大小。 示例 1: 输入:arr [3,3,3,3,5,5,5,2,2,7] 输出:2 解释:选择 {3,…...

运维必懂的13条高效工作秘诀

正确做事,更要做正确的事 “正确地做事”强调的是效率,重视做一件工作的最好方法;“做正确的事”强调的是效能,重视时间的最佳利用——这包括是做或者不做某项工作。 实际上,第一重要的却是效能而非效率,…...

【牛客刷题专栏】0x26:JZ25 合并两个排序的链表(C语言编程题)

前言 个人推荐在牛客网刷题(点击可以跳转),它登陆后会保存刷题记录进度,重新登录时写过的题目代码不会丢失。个人刷题练习系列专栏:个人CSDN牛客刷题专栏。 题目来自:牛客/题库 / 在线编程 / 剑指offer: 目录 前言问…...

5/5~5/7总结

把socket通信改成了分成短连接和长连接,登录前的所有操作都是短连接,每次都关闭连接,如果登录成功了就保持该socket连接,登录成功之后的所有操作,修改资料,发信息等都用该socket, 服务端和客户…...

重要通知|Sui测试网将于5月11日重置

致Sui社区成员们: 正如之前公告所述,部分社区成员发现测试网可能会定期清除数据并重新启动。鉴于此,我们宣布计划将于2023年5月11日进行首次测试网清除。 对于想要继续读取和访问当前测试网络的社区成员,请使用由Mysten Labs在…...

教你快速把heic格式转化jpg,4种方法操作简单

教你快速把heic格式转化jpg的方法,因为HEIC格式图片通常出现在苹果公司的iOS 11操作系统及之后的版本中,这是因为苹果公司在这些版本中采用了HEIF(高效图像格式)作为默认的照片格式来替代JPEG格式。同时,需要注意的是&…...

交互式数据分析和处理新方法:pandas-ai =Pandas + ChatGPT

Python Pandas是一个为Python编程提供数据操作和分析功能的开源工具包。这个库已经成为数据科学家和分析师的必备工具。它提供了一种有效的方法来管理结构化数据(Series和DataFrame)。 在人工智能领域,Pandas经常用于机器学习和深度学习过程的预处理步骤。Pandas通…...

FIR滤波

参考来源: https://www.zhihu.com/question/323353814 本节主要围绕以下几个问题进行描述: 什么是FIR滤波器时域的卷积频域的相乘 关于FIR FIR滤波就是在时域上卷积的过程。将含噪声信号与低通滤波器的傅里叶逆变换值进行卷积,这个过程就是…...

Python小姿势 - Python中的类型检查

Python中的类型检查 在Python中,类型检查是通过内置函数isinstance()来实现的。 isinstance() 函数用于判断一个对象是否是一个已知的类型,类似 type()。 isinstance() 与 type() 区别: type() 不会认为子类是一种父类类型。 isinstance() 会…...

人工智能前景

人工智能AI的未来非常广阔和光明。随着科技的不断发展和普及,人工智能已经开始逐渐融入我们生活的方方面面,比如智能家居、智能医疗、无人驾驶等等。未来,随着更多的应用场景被开拓和挖掘,人工智能的应用范围将会越来越广泛&#…...

python并发编程学习笔记--生产者消费者模型 day02

目录 1. 什么是生产者消费者模型 2. 为什么引入生产者消费者模型 3. 如何实现 4. 示例 1. 什么是生产者消费者模型 生产者 : 程序中负责产生数据的一方消费者 : 程序中负责处理数据的一方 2. 为什么引入生产者消费者模型 在并发编程中, 生产者消费者模式通过一个容器来解…...

彩蛋丨利用R语言脚本实现批量合并Excel表格,再也不用手动点来点去了!

利用R语言脚本实现批量合并Excel表格 在整理数据的时候遇到一个问题:假如有很多个excel表,分别存放了一部分数据,现在想要快速把这些表格的数据汇总到一起,如何用R语言快速完成呢?本文分享一个脚本,能够自动…...

深入学习MYSQL-数据操纵及视图

前言 本博客中的例子和文字大部分来源于书籍《mysql必会知识》,后续会根据更多的书籍不断完善此笔记。 插入操作 可以这种方式向数据库插入两条数据,mysql和pg都支持这种写法。在实战中我们应该更多的使用这种写法,因为数据库的批量操作会…...

深入讲解eMMC简介

1 eMMC是什么 eMMC是embedded MultiMediaCard的简称,即嵌入式多媒体卡,是一种闪存卡的标准,它定义了基于嵌入式多媒体卡的存储系统的物理架构和访问接口及协议,具体由电子设备工程联合委员会JEDEC订立和发布。它是对MMC的一个拓展&#xff0…...

ICV:中国车载超声波雷达市场规模预计2024年可达20亿美元

近年来,由于市场对车辆先进安全功能的需求的增加,汽车超声波传感器市场一直保持稳步增长。ICV估计,车载超声波传感器全球市场预计在2022年至2027年之间以11.5%的复合年增长率增长,这种增长是由越来越多的高级驾驶辅助系…...

PointNet:利用深度学习对点云进行3D分类和语义分割

PointNet:利用深度学习对点云进行3D分类和语义分割 参考自,PointNet: Deep Learning on Point Sets for 3D Classification and Segmentation 代码仓库地址为:https://github.com/charlesq34/pointnet/ 介绍 这次介绍的是一个比较基础的工作…...

第四十二章 Unity 下拉框 (Dropdown) UI

本章节我们介绍下拉框 (Dropdown),我们点击菜单栏“GameObject”->“UI”->“Dropdown”,然后调整它的位置,效果如下 其实它的本质就是一个下拉列表,然后选择列表中的一个选项而已。大家在很多网页中应该可以看到类似的UI元…...

Unity-MCP协议:可嵌入、可协商的AI上下文通信标准

1. 这不是又一个“AI插件”,而是Unity开发工作流的底层重定义你有没有过这样的时刻:在Unity里反复调整Animator Controller的过渡条件,只为让角色转身动画不穿模;写完一段NavMesh寻路逻辑,却要花两小时调试Agent卡在斜…...

如何让Rhino 3D模型在Blender中保持完整数据:import_3dm插件深度解析

如何让Rhino 3D模型在Blender中保持完整数据:import_3dm插件深度解析 【免费下载链接】import_3dm Blender importer script for Rhinoceros 3D files 项目地址: https://gitcode.com/gh_mirrors/im/import_3dm 当建筑师需要在Blender中渲染Rhino设计的建筑模…...

ZMJS,把 JavaScript 解释器放进 SAP ABAP 应用服务器之后,很多扩展思路会变得不一样

我今天看这个 oisee/zmjs 仓库时,最吸引人的不是它把 JavaScript 语法做进了 ABAP,而是它选择了一条非常 SAP 的路线,纯 ABAP、无外部依赖、无 Kernel Module、以类和接口的形式运行在 SAP 应用服务器内部。仓库自己的定位很直接,ZMJS 是一个面向 SAP ABAP 的 Mini JavaScr…...

在模型广场灵活选型让我找到了更适合代码生成的Taotoken模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在模型广场灵活选型让我找到了更适合代码生成的Taotoken模型 开发代码辅助工具时,选择合适的模型是平衡效果与成本的关…...

微信聊天图片丢了别慌!保姆级教程:找回并解密DAT文件(支持新旧版微信路径)

微信DAT图片恢复实战:从文件定位到批量解密的完整指南 微信聊天记录中的图片突然消失?别急着放弃!那些看似无法打开的DAT文件里,可能藏着您的重要回忆或工作资料。本文将带您深入微信存储机制,手把手完成从文件定位到…...

从科研图表到商业报表:如何用Matplotlib的legend()提升你的图表专业度?

从科研图表到商业报表:如何用Matplotlib的legend()提升你的图表专业度? 在数据驱动的决策时代,图表不仅是科研论文中的证据载体,更是商业汇报中的说服工具。我曾见证一位生物统计学家将同一组临床试验数据呈现给三种不同受众&…...

低空旅游观光与低空通勤(eVTOL)运营管理与服务保障平台建设方案

本方案旨在为eVTOL载具构建集运营管理、空中交通管制、安全保障与乘客服务于一体的数字化平台。通过微服务架构、5G-A融合感知、空域网格化与零信任安全等核心技术,解决高密度飞行中的资源调度与安全冲突问题。目标实现毫秒级冲突解算与15分钟内快速周转&#xff0c…...

5分钟掌握AutoClicker:Windows鼠标点击自动化的终极指南

5分钟掌握AutoClicker:Windows鼠标点击自动化的终极指南 【免费下载链接】AutoClicker AutoClicker is a useful simple tool for automating mouse clicks. 项目地址: https://gitcode.com/gh_mirrors/au/AutoClicker AutoClicker是一款专为Windows设计的鼠…...

Claude服务治理架构升级(生产环境零停机迁移实录)

更多请点击: https://codechina.net 第一章:Claude服务治理架构升级(生产环境零停机迁移实录) 为应对日益增长的推理请求量与多租户策略精细化需求,我们对Claude服务治理层实施了从单体API网关向云原生服务网格的平滑…...

QKeyMapper终极指南:Windows上最强大的开源按键映射工具

QKeyMapper终极指南:Windows上最强大的开源按键映射工具 【免费下载链接】QKeyMapper [按键映射工具] QKeyMapper,Qt开发Win10&Win11可用,不修改注册表、不需重新启动系统,可立即生效和停止。支持游戏手柄映射到键鼠&#xff…...