Mojo:新型AI语言中的7个令人惊叹的Python升级,用简单的英语解释人工智能
Mojo:新型AI语言中的7个令人惊叹的Python升级 编程之美 用简单的英语解释人工智能 编程之美
由Coding Beauty设计的图像,使用Mojo标志和Python标志。 它比C更快,与Python一样简单,但速度提高了35000倍。
进入Mojo:一种专为AI开发人员制作的全新编程语言,由Modular公司创建,该公司由Swift的原始创作者Chris Lattner创立。
这个半著名的35000倍增长来自Mojo与其他语言之间的基准比较,使用特定AWS实例上的Mandelbrot算法。图片来源:Modular网站。 它是Python的超集,结合了Python的易用性、简单性和多功能性以及C的出色性能。
如果你对人工智能充满热情,已经掌握了Python,那么Mojo绝对值得一试。让我们一起深入探讨这种令人兴奋的语言的7个强大功能。
Mojo的特点 几天前,Mojo正式发布;现在你可以下载官方的SDK来尝试它。
尽管是在它被宣布后不久,我就注册了Mojo的访问权限,几天后我获得了访问权限。
Mojo游乐场的截图来源:Coding Beauty
我探索了他们提供的所有酷炫新功能,甚至有机会运行一些代码,看看这种语言是如何工作的。以下是我发现的7个有趣的Python升级:
-
用于有类型变量和常量的let和var
Mojo引入了新的let和var语句,允许我们创建变量。
如果需要的话,我们可以为变量指定类型,比如Int或String,就像在TypeScript中一样。var允许变量更改;let不允许。
所以它不像JavaScript的let和var - var没有提升,let是常量。
def your_function(a, b):
let c = a
#取消注释以查看错误:
# c = b #错误:c是不可变的
if c != b:
let d = b
print(d)
your_function(2, 3)
-
用于更快的抽象的structs
我们在C++、Go等语言中都有这些。
Structs是Mojo的一项功能,类似于Python类,但不同之处在于Mojo类是静态的:你不能在运行时添加更多方法。这是一种权衡,因为它不够灵活,但更快。
struct MyPair:
var first: Int
var second: Int
#我们在这里使用'fn'而不是'def' - 我们马上会解释
fn __init__(inout self, first: Int, second: Int):
self.first = first
self.second = second
fn __lt__(self, rhs: MyPair) -> Bool:
return self.first < rhs.first or
(self.first == rhs.first and
self.second < rhs.second)
这里有一种struct比class更严格的方式:所有字段必须明确定义。
Mojo来源:Coding Beauty。
-
强类型检查
这些structs不仅给了我们灵活性,还让我们像TypeScript编译器一样在Mojo中在编译时检查变量类型。
def pairTest() -> Bool:
let p = MyPair(1, 2)
#取消注释以查看错误:
# return p < 4 #会导致编译时错误
return True
数字4是一个Int,p是一个MyPair;Mojo根本不允许这种比较。
-
方法重载 C++、Java、Swift等语言都有这个功能。
函数重载是指有多个具有相同名称但接受不同数据类型参数的函数。
看看这个:
struct Complex:
var re: F32
var im: F32
fn __init__(inout self, x: F32):
"""从实数创建复数。"""
self.re = x
self.im = 0.0
fn __init__(inout self, r: F32, i: F32):
"""从实部和虚部创建复数。"""
self.re = r
self.im = i
像JavaScript和Python这样的无类型语言根本无法实现函数重载,这是显而易见的原因。
尽管在模块/文件函数和类方法上允许重载,但不仅仅基于返回类型,还需要函数参数具有类型。如果不这样做,重载将无法工作;
唯一会发生的事情是最近定义的函数将覆盖以前定义的具有相同名称的所有函数。
-
与Python模块的轻松集成
具有无缝Python支持是Mojo的最大卖点。
在Mojo中使用Python模块非常简单。作为超集,你只需调用Python.import_module()方法,并指定模块名称。
在这里,我导入了numpy,这是世界上最流行的Python库之一。
from PythonInterface import Python
#把这个想象成Python中的`import numpy as np`
let np = Python.import_module("numpy")
#现在就像在Python中使用numpy一样
array = np.array([1, 2, 3])
print(array)
你可以对任何Python模块做同样的操作;唯一的限制是你必须导入整个模块才能访问个别成员。
所有的Python模块
在Mojo中运行速度提高了35000倍。
-
fn — 一种定义函数的新方式 fn基本上是有更严格规则的def。
def是灵活的、可变的、友好的Python;fn是常量、稳定的、丰富的Python。它就像JavaScript的严格模式,但只适用于def。
struct MyPair:
fn __init__(inout self, first: Int, second: Int):
self.first = first
self.second = second
fn的规则:
不可变的参数:参数默认是不可变的 - 包括self - 所以你不能错误地改变它们。
必须指定参数的类型。
必须在fn中声明局部变量后才能使用它们(当然要使用let和var)。
明确的异常声明:如果fn引发异常,你必须明确指示 - 就像我们在Java中使用throws关键字一样。
-
可变和不可变函数参数
传值与传引用。
你可能在C++等语言中遇到过这个概念。
Python的def函数使用传引用,就像JavaScript一样;你可以在def内部改变作为参数传递的对象。
但是Mojo的def使用传值,所以你在def内部得到的是传递对象的副本。因此,你可以随意改变那个副本;这些改变不会影响主要对象。
传引用提高了内存效率,因为我们不必为函数制作对象的副本。
但是新的fn函数呢?像Python的def一样,默认情况下它使用传引用,但关键的区别是这些引用是不可变的。因此,我们可以在函数中读取原始对象,但不能改变它。
在Mojo中引入了一个新的、多余的关键字borrowed。
因为borrowed的作用是使Mojo fn函数中的参数不可变 - 默认情况下它们是不可变的。当处理占用大量内存的对象,或者不允许制作传递对象副本时,这是非常有价值的。
例如:
fn use_something_big(borrowed a: SomethingBig, b: SomethingBig):
"""'a'和'b'都是不可变的,因为'db'是默认的。"""
a.print_id() // 10
b.print_id() // 20
let a = SomethingBig(10)
let b = SomethingBig(20)
use_something_big(a, b)
在fn函数中,我们只需传递一个不可变的引用,而不是制作巨大的SomethingBig对象的副本。
可变参数 如果我们需要可变的参数,我们将使用新的inout关键字:
struct Car:
var id_number: Int
var color: String
fn __init__(inout self, id: Int):
self.id_number = id
self.color = 'none'
#像上面所述,self是通过引用传递以进行突变的。
fn set_color(inout self, color: String):
self.color = color
#像Python中的def一样,默认情况下,参数如self被传递为borrowed。
fn print_id(self): #与fn print_id(borrowed self):相同
print('Id: {0}, color: {1}')
car = Car(11)
car.set_color('red') #没有错误
在fn函数中,self是不可变的,所以我们在set_color中需要inout来修改set_color中的color字段。
关键点
Mojo:是一种新的AI编程语言,具有C的速度和Python的简单性。 let和var声明:Mojo引入了let和var语句,用于创建可选类型的变量。var变量是可变的,let变量是不可变的。
Structs:Mojo具有静态structs,类似于Python类,但由于它们是不可变的,所以更快。
强类型检查:Mojo支持编译时类型检查,类似于TypeScript。
方法重载:Mojo允许函数重载,即具有相同名称但可以接受不同数据类型的函数。 Python模块集成:Mojo提供无缝支持Python,运行Python模块的速度显著提高。
fn函数定义:Mojo中的fn关键字是Python中def的严格版本,要求不可变的参数和明确的异常声明。
可变和不可变参数:Mojo引入了可变(inout)和不可变(borrowed)函数参数。
最后的想法 当我们见证Mojo的揭幕时,让人感到好奇的是,这种新的面向AI的语言可能如何彻底改变编程领域。
弥合了Python提供的易用性与C的性能差距,并引入了强大的功能,如强类型检查,这可能标志着AI开发的新时代。让我们怀着好奇心和渴望,充分利用Mojo的全部潜力。
本文由 mdnice 多平台发布
相关文章:
Mojo:新型AI语言中的7个令人惊叹的Python升级,用简单的英语解释人工智能
Mojo:新型AI语言中的7个令人惊叹的Python升级 编程之美 用简单的英语解释人工智能 编程之美 由Coding Beauty设计的图像,使用Mojo标志和Python标志。 它比C更快,与Python一样简单,但速度提高了35000倍。 进入Mojo:一种…...
TCP连接的三次握手与四次挥手【重点】
TCP的运输连接管理概述 TCP是面向连接的协议,它基于运输连接来传送TCP报文段 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程 TCP运输连接有以下三个阶段 TCP的运输连接管理就是使运输连接的建立和释放都能正常的进行 TCP建立连接的三次握手&a…...
重生奇迹MU新手玩家如何快速熟悉游戏
新手玩家必须掌握什么呢,建议新手玩家去官方网站上面看看游戏的详细介绍,必须要好的熟悉游戏的各种玩法,让玩家可以有一个初步的认识。 所以这方面是非常重要的,建议每位重生奇迹MU玩家都应该注重这些东西。下面我们就来简单介绍…...
MySQL 用户权限和远程访问设置
目录 一、用户操作查看当前拥有用户创建用户修改用户密码删除用户给root用户开放外网访问 二、用户权限操作授予权限的原则查看授予用户的权限给用户添加权限回收权限 一、用户操作 先要使用root用户登录MySQL后在执行后面操作 查看当前拥有用户 SELECT host,user,Grant_pri…...
Golang基础之关键字
Type 参考 ## https://blog.csdn.net/SHELLCODE_8BIT/article/details/122837699 type有如下几种用法: 定义结构体定义接口类型定义类型别名类型查询 类型定义 type Celsius float64 // 摄氏温度 type Fahrenheit float64 // 华氏温度const (AbsoluteZeroC Cels…...
DataFrame插入多列PerformanceWarning: DataFrame is highly fragmented.
DataFrame插入多列PerformanceWarning: DataFrame is highly fragmented. dataframe列比较多,增加列的代码如下: dfpd.DataFrame() for i in range(1000):vlist[]for j in range(1000):vlist.append(j) df[COL_ str(i)] vlistdf警告错误&#x…...
Springboot登录验证的统一拦截处理
在进行Springboot项目开发的时候如何把每次请求都要验证的用户进行提取拦截统一处理 背景 如果不进行统一的拦截处理,其实这是一个非常痛苦的一件事情,因为每次用户请求你都要去进行用户的信息(用户信息存储在session中)的验证&…...
自定义类型详解(上)
结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag//struct是结构体的标志,tag是标签;名字。 {member-list;//成员变量 }variable-list;//变量列…...
【数据库——MySQL】(9)函数、查询练习及讲解
目录 1. 题目1.1 函数练习1.2 数据库查询 2. 解答2.1 函数练习2.2 数据库查询 1. 题目 1.1 函数练习 求圆周率的值,保留 6 位小数。生成两个 100 到 200 间的随机数。将”武汉大学”,”数学学院”,”计算数学”连接成一个字符串。求字符串中第三个字符为 A 的所有…...
【数据结构与算法——C语言】“串操作与算法”之“找出最长串及其长度”
目录 1. 实验内容及上机实验所用平台1.1 实验内容1.2 实验平台软件 2. 流程图3. 源代码4. 用例测试5. 实验总结 1. 实验内容及上机实验所用平台 1.1 实验内容 【问题描述】 给定两个字符串 s1 和 s2,求最长的 s1 前缀 ss 使得 ss 为 s2 的最长后缀,输出…...
泡泡玛特:一家中国潮玩品牌的出海之旅
泡泡玛特的出海之旅,可以为中国出海企业提供怎样的启示和借鉴? 中国潮玩品牌的出海之旅 如果在年轻人群体中聊起泡泡玛特,那么估计无人不知无人不晓。这家成立于2010年的潮玩企业,凭借琳琅满目让消费者爱不释手的创新产品…...
淘宝商品sku信息抓取接口api
在电商行业中,SKU是一个经常被使用的术语,但是对于很多人来说,这个词可能还比较陌生。在这篇文章中,我们将详细解释什么是SKU,以及在电商业务中它的作用和意义。 什么是SKU? SKU是“Stock Keeping Unit”…...
MySQL 多表关系(多表查询 一)
多表关系描述 MySQL是一种关系型数据库管理系统,它支持多表关系,这在数据库设计和查询中非常重要。 项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务…...
【面试高高手】——JavaIO篇(23题)
文章目录 1.什么是Java IO?2.如何从数据传输方式理解IO流?3.Java IO设计上使用了什么设计模式?4.什么是Java NIO?5.什么时BIO?6.什么是AIO?7.你怎么理解同步IO和异步IO?8.你怎么理解阻塞IO和非阻塞IO?9.IO中的输入流和输出流有…...
图像采集 deep OCR
按照芯片类型可以分为CCD相机、CMOS相机 按照传感器的结构特性可以分为线阵相机、面阵相机 按照扫描方式可以分为隔行扫描相机、逐行扫描相机 按照分辨率大小可以分为普通分辨率相机、高分辨率相机按照输出信号方式可以分为模拟相机、数字相机 按照输出色彩可以分为单色(黑白)相…...
Linux 终端命令总结
一、常用的七条命令 命令 对应英文作用lslist查看当前文件夹下的内容pwdprint work directory查看当前所在文件夹cd [目录名]change directory切换文件夹 touch [文件名]touch如果文件不存在新建文件mkdir [目录名]make directory创建目录rm[文件名]remo…...
中国核动力研究设计院使用 DolphinDB 替换 MySQL 实时监控仪表
随着仪表测点的大幅增多和采样频率的增加,中国核动力研究设计院仪控团队原本基于 MySQL 搭建的旧系统已经无法满足大量数据并发写入、实时查询和聚合计算的需求。他们在研究 DB-Engines 时序数据库榜单时了解到国内排名第一的 DolphinDB。经过测试,发现其…...
速看!软考中项100条重要知识点集锦!
1. 项目的特点有哪些? 2. 项目的组织方式有哪些?分别具有什么优缺点? 3. 项目管理过程组有哪些? 4. 怎么样才能成为一位优秀的项目经理? 5. PMO的主要职能有哪些? 6. 项目经理(PMÿ…...
Pycharm在进行debug时出现collecting data如何解决?
Pycharm在进行debug时变量界面出现collecting data,问题如下: 解决方法:打开Setting界面,在Python Debugger选项中勾选下图中的Gevent compatible即可。...
【算法分析与设计】算法概述
目录 一、学习要点二、算法的定义三、算法的性质四、程序(Program)五、问题求解(Problem Solving)六、算法的描述七、算法分析的目的八、算法复杂性分析(一)算法时间复杂性分析(二)算法渐近复杂性1、渐进上界记号-大O符号2、渐进下…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 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…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...
苹果AI眼镜:从“工具”到“社交姿态”的范式革命——重新定义AI交互入口的未来机会
在2025年的AI硬件浪潮中,苹果AI眼镜(Apple Glasses)正在引发一场关于“人机交互形态”的深度思考。它并非简单地替代AirPods或Apple Watch,而是开辟了一个全新的、日常可接受的AI入口。其核心价值不在于功能的堆叠,而在于如何通过形态设计打破社交壁垒,成为用户“全天佩戴…...
文件上传漏洞防御全攻略
要全面防范文件上传漏洞,需构建多层防御体系,结合技术验证、存储隔离与权限控制: 🔒 一、基础防护层 前端校验(仅辅助) 通过JavaScript限制文件后缀名(白名单)和大小,提…...
【threejs】每天一个小案例讲解:创建基本的3D场景
代码仓 GitHub - TiffanyHoo/three_practices: Learning three.js together! 可自行clone,无需安装依赖,直接liver-server运行/直接打开chapter01中的html文件 运行效果图 知识要点 核心三要素 场景(Scene) 使用 THREE.Scene(…...
