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

Mojo:新型AI语言中的7个令人惊叹的Python升级,用简单的英语解释人工智能

Mojo:新型AI语言中的7个令人惊叹的Python升级 编程之美 用简单的英语解释人工智能 编程之美

alt

由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的访问权限,几天后我获得了访问权限。

alt

Mojo游乐场的截图来源:Coding Beauty

我探索了他们提供的所有酷炫新功能,甚至有机会运行一些代码,看看这种语言是如何工作的。以下是我发现的7个有趣的Python升级:

  1. 用于有类型变量和常量的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)
  1. 用于更快的抽象的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更严格的方式:所有字段必须明确定义。

alt

Mojo来源:Coding Beauty。

  1. 强类型检查

这些structs不仅给了我们灵活性,还让我们像TypeScript编译器一样在Mojo中在编译时检查变量类型。

def pairTest() -> Bool:
    let p = MyPair(1, 2)
    #取消注释以查看错误:
    # return p < 4 #会导致编译时错误
    return True

数字4是一个Int,p是一个MyPair;Mojo根本不允许这种比较。

  1. 方法重载 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这样的无类型语言根本无法实现函数重载,这是显而易见的原因。

尽管在模块/文件函数和类方法上允许重载,但不仅仅基于返回类型,还需要函数参数具有类型。如果不这样做,重载将无法工作;

唯一会发生的事情是最近定义的函数将覆盖以前定义的具有相同名称的所有函数。

  1. 与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倍。

  1. 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关键字一样。

  1. 可变和不可变函数参数

传值与传引用。

你可能在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&#xff1a;新型AI语言中的7个令人惊叹的Python升级 编程之美 用简单的英语解释人工智能 编程之美 由Coding Beauty设计的图像&#xff0c;使用Mojo标志和Python标志。 它比C更快&#xff0c;与Python一样简单&#xff0c;但速度提高了35000倍。 进入Mojo&#xff1a;一种…...

TCP连接的三次握手与四次挥手【重点】

TCP的运输连接管理概述 TCP是面向连接的协议&#xff0c;它基于运输连接来传送TCP报文段 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程 TCP运输连接有以下三个阶段 TCP的运输连接管理就是使运输连接的建立和释放都能正常的进行 TCP建立连接的三次握手&a…...

​重生奇迹MU新手玩家如何快速熟悉游戏​

新手玩家必须掌握什么呢&#xff0c;建议新手玩家去官方网站上面看看游戏的详细介绍&#xff0c;必须要好的熟悉游戏的各种玩法&#xff0c;让玩家可以有一个初步的认识。 所以这方面是非常重要的&#xff0c;建议每位重生奇迹MU玩家都应该注重这些东西。下面我们就来简单介绍…...

MySQL 用户权限和远程访问设置

目录 一、用户操作查看当前拥有用户创建用户修改用户密码删除用户给root用户开放外网访问 二、用户权限操作授予权限的原则查看授予用户的权限给用户添加权限回收权限 一、用户操作 先要使用root用户登录MySQL后在执行后面操作 查看当前拥有用户 SELECT host,user,Grant_pri…...

Golang基础之关键字

Type 参考 ## https://blog.csdn.net/SHELLCODE_8BIT/article/details/122837699 type有如下几种用法&#xff1a; 定义结构体定义接口类型定义类型别名类型查询 类型定义 type Celsius float64 // 摄氏温度 type Fahrenheit float64 // 华氏温度const (AbsoluteZeroC Cels…...

DataFrame插入多列PerformanceWarning: DataFrame is highly fragmented.

DataFrame插入多列PerformanceWarning: DataFrame is highly fragmented. dataframe列比较多&#xff0c;增加列的代码如下&#xff1a; dfpd.DataFrame() for i in range(1000):vlist[]for j in range(1000):vlist.append(j) df[COL_ str(i)] vlistdf警告错误&#x…...

Springboot登录验证的统一拦截处理

在进行Springboot项目开发的时候如何把每次请求都要验证的用户进行提取拦截统一处理 背景 如果不进行统一的拦截处理&#xff0c;其实这是一个非常痛苦的一件事情&#xff0c;因为每次用户请求你都要去进行用户的信息&#xff08;用户信息存储在session中&#xff09;的验证&…...

自定义类型详解(上)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag//struct是结构体的标志&#xff0c;tag是标签;名字。 {member-list;//成员变量 }variable-list;//变量列…...

【数据库——MySQL】(9)函数、查询练习及讲解

目录 1. 题目1.1 函数练习1.2 数据库查询 2. 解答2.1 函数练习2.2 数据库查询 1. 题目 1.1 函数练习 求圆周率的值&#xff0c;保留 6 位小数。生成两个 100 到 200 间的随机数。将”武汉大学”,”数学学院”,”计算数学”连接成一个字符串。求字符串中第三个字符为 A 的所有…...

【数据结构与算法——C语言】“串操作与算法”之“找出最长串及其长度”

目录 1. 实验内容及上机实验所用平台1.1 实验内容1.2 实验平台软件 2. 流程图3. 源代码4. 用例测试5. 实验总结 1. 实验内容及上机实验所用平台 1.1 实验内容 【问题描述】 给定两个字符串 s1 和 s2&#xff0c;求最长的 s1 前缀 ss 使得 ss 为 s2 的最长后缀&#xff0c;输出…...

泡泡玛特:一家中国潮玩品牌的出海之旅

泡泡玛特的出海之旅&#xff0c;可以为中国出海企业提供怎样的启示和借鉴&#xff1f; 中国潮玩品牌的出海之旅 如果在年轻人群体中聊起泡泡玛特&#xff0c;那么估计无人不知无人不晓。这家成立于2010年的潮玩企业&#xff0c;凭借琳琅满目让消费者爱不释手的创新产品&#xf…...

淘宝商品sku信息抓取接口api

在电商行业中&#xff0c;SKU是一个经常被使用的术语&#xff0c;但是对于很多人来说&#xff0c;这个词可能还比较陌生。在这篇文章中&#xff0c;我们将详细解释什么是SKU&#xff0c;以及在电商业务中它的作用和意义。 什么是SKU&#xff1f; SKU是“Stock Keeping Unit”…...

MySQL 多表关系(多表查询 一)

多表关系描述 MySQL是一种关系型数据库管理系统&#xff0c;它支持多表关系&#xff0c;这在数据库设计和查询中非常重要。 项目开发中&#xff0c;在进行数据库表结构设计时&#xff0c;会根据业务需求及业务模块之间的关系&#xff0c;分析并设计表结构&#xff0c;由于业务…...

【面试高高手】——JavaIO篇(23题)

文章目录 1.什么是Java IO&#xff1f;2.如何从数据传输方式理解IO流&#xff1f;3.Java IO设计上使用了什么设计模式&#xff1f;4.什么是Java NIO&#xff1f;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 实时监控仪表

随着仪表测点的大幅增多和采样频率的增加&#xff0c;中国核动力研究设计院仪控团队原本基于 MySQL 搭建的旧系统已经无法满足大量数据并发写入、实时查询和聚合计算的需求。他们在研究 DB-Engines 时序数据库榜单时了解到国内排名第一的 DolphinDB。经过测试&#xff0c;发现其…...

速看!软考中项100条重要知识点集锦!

1. 项目的特点有哪些&#xff1f; 2. 项目的组织方式有哪些&#xff1f;分别具有什么优缺点&#xff1f; 3. 项目管理过程组有哪些&#xff1f; 4. 怎么样才能成为一位优秀的项目经理&#xff1f; 5. PMO的主要职能有哪些&#xff1f; 6. 项目经理&#xff08;PM&#xff…...

Pycharm在进行debug时出现collecting data如何解决?

Pycharm在进行debug时变量界面出现collecting data&#xff0c;问题如下&#xff1a; 解决方法&#xff1a;打开Setting界面&#xff0c;在Python Debugger选项中勾选下图中的Gevent compatible即可。...

【算法分析与设计】算法概述

目录 一、学习要点二、算法的定义三、算法的性质四、程序(Program)五、问题求解(Problem Solving)六、算法的描述七、算法分析的目的八、算法复杂性分析&#xff08;一&#xff09;算法时间复杂性分析&#xff08;二&#xff09;算法渐近复杂性1、渐进上界记号-大O符号2、渐进下…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”&#xff0c;物流的终极形态正在诞生 想象这样的场景&#xff1a; 凌晨3点&#xff0c;某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径&#xff1b;AI视觉系统在0.1秒内扫描包裹信息&#xff1b;数字孪生平台正模拟次日峰值流量压力…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

毫米波雷达基础理论(3D+4D)

3D、4D毫米波雷达基础知识及厂商选型 PreView : https://mp.weixin.qq.com/s/bQkju4r6med7I3TBGJI_bQ 1. FMCW毫米波雷达基础知识 主要参考博文&#xff1a; 一文入门汽车毫米波雷达基本原理 &#xff1a;https://mp.weixin.qq.com/s/_EN7A5lKcz2Eh8dLnjE19w 毫米波雷达基础…...

AI语音助手的Python实现

引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...

在树莓派上添加音频输入设备的几种方法

在树莓派上添加音频输入设备可以通过以下步骤完成&#xff0c;具体方法取决于设备类型&#xff08;如USB麦克风、3.5mm接口麦克风或HDMI音频输入&#xff09;。以下是详细指南&#xff1a; 1. 连接音频输入设备 USB麦克风/声卡&#xff1a;直接插入树莓派的USB接口。3.5mm麦克…...