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.xdnf.cn/news/140584.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

山石网科国产化入侵防御系统,打造全生命周期的安全防护

随着互联网的普及和网络安全的威胁日益增加&#xff0c;botnet感染成为了企业面临的重要问题之一。botnet是一种由分散的客户端&#xff08;或肉鸡&#xff09;组成的网络&#xff0c;这些客户端被植入了bot程序&#xff0c;受控于攻击者。攻击者通过这些客户端的bot程序&#…

华为云云耀云服务器L实例评测|Docker版的Minio安装 Springboot项目中的使用 结合vue进行图片的存取

前言 最近华为云云耀云服务器L实例上新&#xff0c;也搞了一台来玩&#xff0c;期间遇到过MySQL数据库被攻击的情况&#xff0c;Redis被攻击的情况&#xff0c;教训是密码不能太简单。在使用服务器时&#xff0c;学习到很多运维相关的知识。 本篇博客介绍如何在Linux中安装mi…

vue element 搜索框根据后台的接口实现模糊查询 + 分页特殊处理+重置表格

模糊查询效果图 1.配置接口 search: "/api/goods/search", //搜索接口/goods/search 2.get接口 search(params) { return axios.get(base.search, { params });//后台传参 再写这个params }, 3.异步请求接口 // 搜索接口async search(search){let res await this…

大模型的最大bug,回答正确率几乎为零,GPT到Llama无一幸免

目录 前言 1.名字和描述颠倒一下&#xff0c;大模型就糊涂了 2.实验及结果 3.未来展望 前言 大模型的逻辑&#xff1f;不存在的。 我让 GPT-3 和 Llama 学会一个简单的知识&#xff1a;A 就是 B&#xff0c;然后反过来问 B 是什么&#xff0c;结果发现 AI 回答的正确率竟然是…

**20.迭代器模式(Iterator)

意图&#xff1a;提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不需要暴露该对象的内部表示。 上下文&#xff1a;集合对象内部结构常常变化各异。对于这些集合对象&#xff0c;能否在不暴露其内部结构的同时&#xff0c;让外部Client透明地访问其中包含的元素…

github 网页显示不全?

问题 解决 1、检查网页&#xff0c;打开 network&#xff0c;重新刷新 github 网页 2、查看无法加载的资源&#xff08;如 css 文件&#xff09; 3、查看域名地址 https://tool.chinaz.com/dns/&#xff0c;github.githubassets.com&#xff08;检查网页元素&#xff0c;点击无…

文件系统详解

目录 文件系统&#xff08;1&#xff09; 第一节文件系统的基本概念 一、文件系统的任务 二、文件的存储介质及存储方式 三、文件的分类 第二节 文件的逻辑结构和物理结构 一、文件的逻辑结构 二、文件的物理结构 文件系统&#xff08;2&#xff09; 第三节 文件目…

uniapp webview实现双向通信

需求&#xff1a;uniapp webview嵌套一个h5 实现双向通信 uniapp 代码 <template><view><web-view src"http://192.168.3.150:9003/" message"onMessage"></web-view></view> </template><script>export defau…

前端uniapp如何转base64使用uniapp插件市场

插件市场 网址 使用 可以下载&#xff0c;也可以引用&#xff0c;我是下载下来的引用 代码 正常使用 pathToBase64(img).then(path > {img pathresolve(path)}).catch(error > {console.error(error)reject(error)})使用出现[object Promise]错误 解决方法 let img …

程序运行时增加语音提示

目录 前言 一、认识SAPI 二、使用方法 三、测试效果​编辑 总结 前言 在测试过程中为了更高效的提示操作者&#xff0c;在程序执行时增加语音提醒会方便很多&#xff0c;利用微软的SAPI可以很方便的在程序有问题时提示操作者。 一、认识SAPI SpVoice类是支持语音合成(TTS)的核…

WebGL 计算平行光、环境光下的漫反射光颜色

目录 光照原理 光源类型 平行光 点光源 环境光 反射类型 漫反射 漫反射光颜色 计算公式 环境反射 环境反射光颜色 表面的反射光颜色&#xff08;漫反射和环境反射同时存在时&#xff09;计算公式 平行光下的漫反射 根据光线和法线方向计算入射角θ&#xff08;以便…

基于springboot+vue的入校申报审批系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

MySQL数据库的索引和事务

目录 一、索引 1.1Mysql索引 1.2索引的作用 1.3 创建索引的依据 1.4 普通索引 修改表方式创建索引 删除索引 1.5 唯一索引 修改表方式创建 删除索引 1.6 主键索引 修改表方式创建 1.7 组合索引 1.8 全文索引 1.9查看索引 二、事务 2.1事务概念 2.2事务的ACID特…

C语言每日一题(10):无人生还

文章主题&#xff1a;无人生还&#x1f525;所属专栏&#xff1a;C语言每日一题&#x1f4d7;作者简介&#xff1a;每天不定时更新C语言的小白一枚&#xff0c;记录分享自己每天的所思所想&#x1f604;&#x1f3b6;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&#x1f…

全套配置细节:缺省路由实验配置

1、实验目的 掌握默认路由的适用场合和配置方法 2、实验拓扑 默认路由的配置 3、实验步骤 &#xff08;1&#xff09;配置网络连通性如下。 1&#xff09;R1 的配置如下 &#xff1a; <Huawei>system-view Enter system view, return user view with CtrlZ. [Huaw…

网络安全——(黑客)自学

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01;&#xff01;&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队…

Xshell工具连接本地虚拟机Linux系统

你知道的越多&#xff0c;你不知道的越多&#xff1b;本文仅做记录&#xff0c;方便以后备阅。希望也能帮到正在看这篇文章的你。 使用Xshell工具连接Linux系统具有方便&#xff0c;易于操作等诸多特点。对于Xshell的介绍&#xff0c;我就不详细说了。我相信百度百科上的介绍更…

Python实现MYSQL蜜罐

1 LOAD DATA INFILE介绍 首先开启一个Mysql&#xff0c;看一下mysql是如何读取主机文件的。 1.1 linux搭建mysql 1&#xff09;docker运行mysql 2&#xff09;启动Mysql docker run -itd…

算法基础之差分和前缀和

差分 差分介绍 结论&#xff1a;差分是前缀和的逆运算 举例 一维差分 //一维前缀和 a[i]部分就是一维差分数组 s[i] s[i-1]a[i]; //一维差分 a[i] s[i]-s[i-1];二维差分 //二维前缀和 a[i][j]部分就是一维差分数组 s[i][j] s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j]; //二…

Python四大数据结构整理

Python四大数据结构整理 列表列表本身的基础造作操作列表的增删改查列表总结 字典字典的创建获取字典视图遍历字典字典生成式 元组与集合元组的创建元组的获取集合集合的创建方式集合的相关操作 对比归纳总结 列表 列表的特点   1.列表元素按顺序有序排放   2.索引映射唯一…