Mojo:新AI语言中的7个惊人的Python升级

一、说明

        AI发展是日新月异的,对于新模型的产生,我们不能不给以关注。Mojo就是一种新发布的编程语言,专为AI开发人员制作,由Modular制作,Modular是一家由Swift的原始创建者Chris Lattner创立的公司。

二、关于MOJO的概念

        输入Mojo:一种新发布的编程语言,专为AI开发人员制作,由Modular制作,Modular是一家由Swift的原始创建者Chris Lattner创立的公司。

        它比C更快,像Python一样简单,但速度却快35,000倍

        这个半著名的 35000x 声明来自 Mojo 和其他语言之间的基准比较,在特定 AWS 实例上使用曼德布洛特算法。图片来源:模块化网站。

        它是 Python 的一个超集,将 Python 的可用性、简单性和多功能性与 C 令人难以置信的性能相结合。

        如果你对人工智能充满热情并且已经掌握了Python,那么Mojo绝对值得一试。让我们一起探索这种令人兴奋的语言的 7 个强大功能。

三、Mojo的功能

        几天前,Mojo 正式上市;您现在可以下载官方 SDK 进行试用。

        不过,在宣布Mojo访问权限后不久,我确实注册了Mojo访问权限,几天后我获得了访问权限。

A screenshot of the Mojo playground. Image source: Coding Beauty.

        我探索了他们必须提供的所有很酷的新功能,甚至有机会运行一些代码并查看语言的实际效果。以下是我发现的7个有趣的Python升级:

3.1. 和类型化变量和常量letvar

        Mojo 引入了新的和语句,让我们创建变量。letvar

        如果我们愿意,我们可以指定一个类似或变量的类型,就像我们在 TypeScript 中所做的那样。 允许变量更改; 不会。所以它不像 JavaScript 和 - 没有提升,并且是恒定的。IntStringvarletletvarvarlet

def your_function(a, b):let c = a# 取消注释以查看错误: # c = b # 错误: c 是不可变
的,如果 c != b:let d = bprint(d)your_function(2, 3)

3.2 用于更快的抽象结构

        我们在C++、Go 等中都有它们。

        结构是类似于Python类的Mojo功能,但它们是不同的,因为Mojo类是静态的:你不能在运行时添加更多方法。这是一种权衡,因为它不太灵活,但速度更快

struct MyPair:var first: Intvar second: Int# We use 'fn' instead of 'def' here - we'll explain that soonfn __init__(inout self, first: Int, second: Int):self.first = firstself.second = secondfn __lt__(self, rhs: MyPair) -> Bool:return self.first < rhs.first or(self.first == rhs.first andself.second < rhs.second)

这里有一种方法比:所有字段都必须显式定义更严格。struct class

Mojo游乐场的截图。图片来源:编码美女。

3.3.强型式检验

        这些结构不仅给了我们灵活性,还允许我们在 Mojo 中编译检查变量类型,就像 TypeScript 编译器所做的那样。

def pairTest() -> Bool:let p = MyPair(1, 2)# Uncomment to see an error:# return p < 4 # gives a compile time errorreturn True

是一个 , 是一个 ;Mojo根本不允许这种比较。4IntpMyPair

3.4. 方法重载

        C++、Java、Swift 等都有这些。

        函数重载是指有多个同名函数接受具有不同数据类型的参数。

看看这个:

struct Complex:var re: F32var im: F32fn __init__(inout self, x: F32):"""Makes a complex number from a real number."""self.re = xself.im = 0.0fn __init__(inout self, r: F32, i: F32):"""Makes a complex number from its real and imaginary parts."""self.re = rself.im = i

像JavaScript和Python这样的无类型语言根本不可能有函数重载,原因很明显。

        尽管在基于参数/类型的模块/文件函数和类方法中允许重载,但它不能仅基于返回类型工作,并且函数参数需要具有类型。如果不这样做,重载将不起作用;所有将发生的是最近定义的函数将覆盖所有以前定义的具有相同名称的函数。

3.5. 与 Python 模块轻松集成

        拥有无缝的Python支持是Mojo迄今为止最大的卖点。

        在Mojo中使用Python模块很简单。作为超集,您需要做的就是使用模块名称调用该方法。Python.import_module()

        在这里,我正在导入,这是世界上最受欢迎的Python库之一。numpy

from PythonInterface import Python# Think of this as `import numpy as np` in Python
let np = Python.import_module("numpy")# Now it's like you're using numpy in Python
array = np.array([1, 2, 3])
print(array)

你可以对任何 Python 模块做同样的事情;一个限制是您必须导入整个模块才能访问单个成员。

所有 Python 模块在 Mojo 中的运行速度将提高 35,000 倍

3.6. — 定义函数的新方法fn

   fn基本上是有更严格的规则。def

  def灵活,可变,对Python友好; 是恒定的,稳定的,并且Python丰富。这就像 JavaScript 的严格模式,但只是为了 .fndef

struct MyPair:fn __init__(inout self, first: Int, second: Int):self.first = firstself.second = second

fn的规则:

  • 不可变的参数:默认情况下,参数是不可变的(包括),因此您不会错误地改变它们。self
  • 必需的参数类型:您必须为其参数指定类型。
  • 必需的变量声明:在使用它们之前,您必须在 中声明局部变量(当然,使用 和)。fnletvar
  • 显式异常声明:如果抛出异常,你必须明确指出 - 就像我们在 Java 中使用关键字所做的那样。fnthrows

四、可变和不可变的函数参数

        按值传递与按引用传递。

        你可能在像C++这样的语言中遇到这个概念。

        Python 的函数使用按引用传递,就像在 JavaScript 中一样;您可以改变在 .但是Mojo使用按值传递,所以你在里面得到的是传递对象的副本。因此,您可以随心所欲地更改该副本;这些更改不会影响主对象。defdefdefdef

按引用传递提高了内存效率,因为我们不必为函数创建对象的副本。

但是新功能呢?与 Python 一样,它默认使用按引用传递,但关键的区别在于这些引用是不可变的。因此,我们可以读取函数中的原始对象,但不能对其进行变异。fndef

4.1 不可变参数

borrowedMojo中一个新鲜的,新的,多余的关键字。

因为所做的是使 Mojo 函数中的参数不可变 - 默认情况下它们是不可变的。在处理占用大量内存的对象时,这是非常宝贵的,或者我们不允许复制我们正在传递的对象。borrowedfn

例如:

fn use_something_big(borrowed a: SomethingBig, b: SomethingBig):"""'a' and 'b' are both immutable, because 'borrowed' is the default."""a.print_id()  // 10b.print_id()  // 20let a = SomethingBig(10)
let b = SomethingBig(20)
use_something_big(a, b)

我们不是在函数中复制巨大的对象,而是简单地将引用作为不可变的参数传递。SomethingBigfn

4.2 可变参数

        如果我们想要可变参数,我们将使用 new 关键字inout

struct Car:var id_number: Intvar color: Stringfn __init__(inout self, id: Int):self.id_number = idself.color = 'none'# self is passed by-reference for mutation as described above.fn set_color(inout self, color: String):self.color = color# Arguments like self are passed as borrowed by default.fn print_id(self):  # Same as: fn print_id(borrowed self):print('Id: {0}, color: {1}')car = Car(11)
car.set_color('red')  # No error

self在函数中是不可变的,因此我们在这里需要修改 中的字段。fninoutcolorset_color

五、关键要点

  • Mojo:是一种新的AI编程语言,具有C的速度和Python的简单性。
  • let声明:Mojo 介绍语句,用于创建可选类型变量。 变量是可变的,变量不是。varletvarvarlet
  • 结构:Mojo具有静态结构,类似于Python类,但由于它们的不变性而更快。
  • 强类型检查:Mojo支持编译时类型检查,类似于TypeScript。
  • 方法重载:Mojo允许函数重载,其中同名函数可以接受不同的数据类型。
  • Python模块集成:Mojo提供无缝的Python支持,运行Python模块的速度明显更快。
  • fn 函数定义:Mojo中的fn关键字是Python的更严格的版本,需要不可变的参数和显式的异常声明。def
  • 可变和不可变参数:Mojo引入了可变()和不可变()函数参数。inoutborrowed

六、结语

        当我们见证Mojo的揭幕时,思考这种以AI为中心的新语言如何彻底改变编程领域是很有趣的。通过易于使用的Python提供弥合性能差距,并引入强大的功能,如强大的类型检查,可能预示着人工智能开发的新时代。让我们怀着好奇心和渴望来拥抱这种转变,以充分发挥Mojo的潜力。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue实现移动端悬浮可拖拽按钮

需求&#xff1a; 按钮在页面侧边悬浮显示&#xff1b;点击按钮可展开多个快捷方式按钮&#xff0c;从下向上展开。长按按钮&#xff0c;则允许拖拽来改变按钮位置&#xff0c;按钮为非展开状态&#xff1b;按钮移动结束&#xff0c;手指松开&#xff0c;计算距离左右两侧距离…

uniapp使用scroll-into-view实现锚点定位和滚动监听功能【楼层效果 / 侧边导航联动效果】

大佬网址&#xff1a; https://blog.csdn.net/weixin_47136265/article/details/132303570 效果 代码 <template><view class"main"><scroll-view scroll-y"true" class"left-content"><view class"left-item"…

目标分类笔记(二): 利用PaddleClas的框架来完成多标签分类任务(从数据准备到训练测试部署的完整流程)

文章目录 一、演示多分类效果二、PaddleClas介绍三、代码获取四、数据集获取五、环境搭建六、数据格式分析七、模型训练7.1 模型恢复训练7.2 多卡训练7.3 其他训练指标 八、模型预测九、模型评估十、PaddleClas相关博客 一、演示多分类效果 二、PaddleClas介绍 PaddleClas主要…

Java实现文档格式转换与模板渲染 LibreOffice jodconverter

Java Office 一、文档格式转换 文档格式转换是office操作中经常需要进行一个操作&#xff0c;例如将docx文档转换成pdf格式。 java在这方面有许多的操作方式&#xff0c;大致可以分为内部调用&#xff08;无需要安装额外软件&#xff09;&#xff0c;外部调用&#xff08;需…

【boost网络库从青铜到王者】第七篇:asio网络编程中的异步echo服务器,以应答为主

文章目录 1、简介2、echo模式应答异步服务器2.1、Session会话类2.2、Server类为服务器接收连接的管理类 3、客户端4、隐患5、总结 1、简介 前文已经介绍了异步操作的api&#xff0c;今天写一个简单的异步echo服务器&#xff0c;以应答为主。 2、echo模式应答异步服务器 2.1、…

【钻石OA】1区SCI,无需版面费,仅2个月录用!

重 点 本期推荐 本期小编给大家推荐的是无需版面费的1区农林科学类SCI&#xff08;钻石OA&#xff09;。 目前进展顺利&#xff0c;在WOS数据库中各项指标表现良好&#xff0c;且无预警记录。 领域符合录用率高&#xff0c;1区SCI最快2个月录用&#xff01; 期刊官网系统提…

零距离揭秘绝地求生:玩家最关心的吃鸡要领和细节全攻略!

绝地求生作为当下最火爆的吃鸡游戏&#xff0c;吸引了无数玩家的关注和参与。然而&#xff0c;要成为顶尖的吃鸡玩家&#xff0c;并不简单。在这篇文章中&#xff0c;我们将为你揭露绝地求生玩家最关心的吃鸡要领和细节&#xff0c;为你提供一份全方位的游戏指南&#xff01; 1…

vue内置组件Transition的详解

1. Transition定义 Vue 提供了两个内置组件&#xff0c;可以帮助你制作基于状态变化的过渡和动画&#xff1a; <Transition>会在一个元素或组件进入和离开 DOM 时应用动画。 <TransitionGroup> 会在一个 v-for 列表中的元素或组件被插入&#xff0c;移动&#xff0…

八大排序详解

目录 1.排序的概念及应用 1.1 排序的概念 1.2 排序的应用 1.3 常见的排序算法 2.常见排序算法的实现 2.1 直接插入排序 2.1.1 基本思想 2.1.2 动图解析 2.1.3 排序步骤&#xff08;默认升序&#xff09; 2.1.4 代码实现 2.1.5 特性总结 2.2 希尔排序 2.2.1 基本思…

修改Jenkins主目录

Windows系统上安装了Jenkins后&#xff0c;默认数据目录&#xff0c;也就是工作区目录&#xff0c;即&#xff1a;每次构建的项目数据文件所在目录为&#xff1a; 随着构建项目的增多&#xff0c;一直用这个目录&#xff0c;C盘东西越来越多&#xff0c;电脑就会越来越卡&#…

【链表】排序链表-力扣148题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

3+单基因泛癌+铜死亡纯生信思路

今天给同学们分享一篇3单基因泛癌铜死亡纯生信思路的生信文章“Systematic pan-cancer analysis identifies SLC31A1 as a biomarker in multiple tumor types”&#xff0c;这篇文章于2023年3月27日发表在BMC Med Genomics 期刊上&#xff0c;影响因子为3.622。 溶质载体家族3…

面试必杀技:Jmeter性能测试攻略大全(第一弹)

前言 性能测试是一个全栈工程师/架构师必会的技能之一&#xff0c;只有学会性能测试&#xff0c;才能根据得到的测试报告进行分析&#xff0c;找到系统性能的瓶颈所在&#xff0c;而这也是优化架构设计中重要的依据。 第一章 测试流程&#xff1a; 需求分析→环境搭建→测试…

【IDEA】idea恢复pom.xml文件显示灰色并带有删除线

通过idea打开spring boot项目后&#xff0c;发现每个服务中的pom.xml文件显示灰色并带有删除线&#xff0c;下面为解决方案 问题截图 解决方案 打开file——settings——build,execution,deployment——Ignored Files&#xff0c;把pom.xml前面的复选框去掉&#xff0c;去掉之…

IPV6知识总结

目录 一、IPV6与IPV4相比改进之处1. “无限“的地址空间2. 层次化的地址结构3. 即插即用4. 简化了报头头部5.保证端到端网络的完整性6.安全性增强7.增强QoS特性 二、IPV6的规则IPV6地址主要分为了三类&#xff1a;单播地址&#xff0c;组播地址&#xff0c;任播地址单播地址组播…

Docker从认识到实践再到底层原理(七)|Docker存储卷

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

浅谈软件测试面试一些常见的问题

一、简历及岗位匹配度 说到简历&#xff0c;其实这一点是很重要但又被很多职场小白忽视的问题。经常有人说我投了很多简历&#xff0c;但是没有公司给我打电话&#xff0c;怎么办&#xff1f; 首先&#xff0c;应该明白的一点&#xff1a;面对求职市场的激烈竞争性&#xff0…

RFID技术引领汽车零部件加工新时代

RFID技术的兴起引领了汽车零部件加工领域的新时代&#xff0c;作为一种利用无线电频率进行自动识别的技术&#xff0c;RFID技术能够快速、准确地识别物体并获取相关数据&#xff0c;在汽车零部件加工中&#xff0c;RFID技术具有重要的应用价值&#xff0c;可以提高生产效率、降…

C++ Primer 类和对象(3)

类和结构体是比较相似&#xff0c;而传统的C的结构体中都是一些数据的类型&#xff0c;类除了有数据之外还有函数。所以可以把类想象成一个具有既有数据又有函数的复合数据类型。 类是一种将抽象转换为用户定义类型的C工具&#xff0c;它将数据表示和操纵数据的方法组合成一个整…

网络安全复习大纲wcf

单选10判断10填空30简答25分析25 选择 &#xff08;1&#xff09;计算机网络安全是指利用计算机网络管理控制和技术措施&#xff0c;保证在网络环境中数据的&#xff08; &#xff09;、完整性、网络服务可用性和可审查性受到保护。 A、保密性 B、抗攻击性 C、网络服务管理性 …