【Mojo】AI编程语言Mojo简介

简介: Mojo,一门像 Python 一样简单、像 C++ 一样快速的新编程语言,一门用于构建人工智能应用程序的革命性新编程语言

[toc]


前言

作为这俩年最火的行业,AI无出其右,AI编程的代表性语言主要使Python、C/C++。Python因其简单易学、丰富的库支持和强大的社区力量,在AI领域占据了主导地位。Python不仅能够作为“胶水”语言与其他语言互操作,还提供了大量的工具库,极大地扩展了其应用范围和能力。C/C++则因其高性能和对硬件的直接访问能力,在深度学习和科学计算等需要高性能计算的任务中被广泛应用。C/C++是许多底层算法库的实现语言。然而,随着AI技术的发展,传统的编程语言在满足现代AI应用的需求时显得力不从心。这些语言往往不原生支持张量操作和并行计算,也不容易适应多样化的硬件环境。Mojo 就是在这样的背景下,Mojo是Modular 创造的第一个专门为 MLIR设计的主要语言,主要是解决在构建平台来统一全球 ML/AI 基础设施时,整个堆栈的编程过于复杂的问题。创造出来的一种新的且可扩展的编程模型,可以针对人工智能领域普遍存在的加速器和其他异构系统,专门为 MLIR设计的主要语言,这使得 Mojo 在为 AI 工作负载编写系统级代码时具有独特的强大功能。

一、Mojo简介

Mojo 是第一个使用 MLIR(一种编译器基础设施,非常适合从 CPU 和 GPU 到各种 AI ASIC 的异构硬件)从头开始构建的编程语言。Modular 将 Mojo 设计为 Python 的超集,那么Mojo到底是一门什么样的语言呢?Mojo官网是这样介绍的,截图如下:
image.png

我给大家翻译过来就是:Mojo是一门专门为AI开发者提供的编程语言,将 Python 的可用性与 C 的性能相结合,解锁了 AI 硬件无与伦比的可编程性和 AI 模型的可扩展性。

Mojo指导文档是这样介绍的,截图如下:
image.png

翻译过来就是:Mojo 是一种新的编程语言,它通过将最好的 Python 语法与系统编程和元编程相结合,弥合了研究和生产之间的差距。使用 Mojo,您可以编写比 C 更快的可移植代码,并与 Python 生态系统无缝互操作。

通过Mojo官网的介绍,我们大致可以了解到如下信息:

1.它可以编写比C更快的可移植代码,据称比Python快35000倍。

2.它可以与Python生态系统无缝互操作,支持Python的核心功能,如异步/等待、错误处理和可变参数。

简单来事,就是Python语言和C语言,不管在性能还是通用型方面,都可以完全碾压二者,从此开发人员再也不用频繁的学习各种各样的语言了,真正做到了Mojo在手,妈妈再也不用担心我的工作了。不过玩笑归玩笑,Mojo能说出这样的话,也是有其实力的,毕竟谁也不会搬起石头砸自己的脚,更何况他搬起的不是石头,二是Python和C这么俩座石山。下面让我们继续深入学习Mojo,解开心中的疑惑。

五、Mojo优势

1.兼容Python语法 :Mojo完全兼容 Python 语法,Python开发者可以轻松上手,不需要再花大力气学习一门新的语言。

2.兼容Python 库:兼容很多现有的Python科学计算库,比如。

3.卓越的性能:比 Python 快 35000 倍。

4.单一语言写作:无需单独掌握C++或Python;仅使用 Mojo 执行这两种功能,正真做到了一鱼俩吃。

5.并行处理:Mojo 使用 MLIR 在专用 AI 硬件单元上进行矢量化、线程化处理。

6.模型更容易扩展:升级模型比以往任何时候都容易。

六、Mojo功能介绍

1.函数

Mojo 支持两种类型的函数:deffn函数。您可以将任一声明与任何函数(包括该main()函数)一起使用,但它们具有不同的默认行为。

1)def功能

def函数提供与 Python def函数相同的动态性和灵活性。例如,此函数在 Python 和 Mojo 中的工作方式相同:

def greet(name):
    greeting = "Hello, " + name + "!"
    return greeting

在 Mojo 中,您还可以选择指定参数类型和返回类型。您还可以使用var、带或不带显式类型来声明变量。

def greet(name: String) -> String:
    var greeting = "Hello, " + name + "!"
    return greeting

这样,编译器可以确保它name是一个字符串,并且返回类型也是一个字符串。

2)fn功能

fn函数提供严格的类型检查和额外的内存安全性。它基本上强制您在 中写入可选的内容def,并确保您不会意外地改变收到的参数。例如,下面是与上面相同的函数,使用fn

fn greet(name: String) -> String:
    var greeting = "Hello, " + name + "!"
    return greeting

就函数调用者而言,def函数fn是可以互换的。也就是说,没有什么是def可以做的fn(反之亦然)。不同的是,与def函数相比,fn 函数内部更加严格。

2.变量

变量是保存值或对象的名称。 Mojo 中的所有变量都是可变的——它们的值可以改变。

1)未声明的变量

def函数或 REPL 环境中,您可以创建仅包含名称和值的变量。例如:

name = "Sam"

声明的变量没有var跟随 s

2)声明的变量

您可以使用关键字声明变量var。例如:

var name = "Sam"
var user_id: Int

name变量被初始化为字符串“Sam”。该user_id变量未初始化,但它具有声明的类型Int(整数值)。所有声明的值都是类型化的——要么使用 类型注释显式地定义,要么在使用值初始化时隐式地定义。

由于声明的变量是强类型的,因此您不能为变量分配不同类型的值,除非这些类型可以 隐式转换。例如,以下代码将无法编译:

var user_id: Int = "Sam"

3.结构体

Mojo 结构是一种数据结构,允许您封装对抽象(例如数据类型或对象)进行操作的字段和方法。 字段是保存与结构相关的数据的变量,方法 是结构内部的函数,通常作用于字段数据。

例如,如果您正在构建图形程序,则可以使用结构体来定义 struct,Image该结构体具有用于存储有关每个图像(例如像素)的信息的字段以及对其执行操作(例如旋转图像)的方法。

大多数情况下,Mojo 的结构格式旨在为程序中使用的高级数据类型提供静态、内存安全的数据结构。例如,Mojo 标准库中的所有数据类型(例如IntBoolStringTuple)都被定义为结构体。

1)结构体定义

您可以定义一个MyPair带有两个字段的简单结构体,如下所示:

struct MyPair:
    var first: Int
    var second: Int

但是,您无法实例化此结构,因为它没有构造函数方法。所以这里用一个构造函数来初始化这两个字段:

struct MyPair:
    var first: Int
    var second: Int

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

请注意,该方法中的第一个参数__init__()inout self。现在,忽略inout(这是一个参数约定,声明self是一个可变引用);您现在需要知道的是这 self必须是第一个参数。它引用当前的结构实例(它允许方法中的代码引用“自身”)。当你调用构造函数时,你永远不会传递一个值self——Mojo会自动传递它。

2)结构体对象创建

一旦有了构造函数,您就可以创建一个实例MyPair并设置字段:

var mine = MyPair(2,4)
print(mine.first)

4.模块和包

Mojo 提供了一个打包系统,允许您组织代码库并将其编译为可导入的文件。本页介绍了有关如何将代码组织成模块和包(这很像 Python)的必要概念,并向您展示如何使用命令创建打包的二进制文件mojo package

要了解 Mojo 包,您首先需要了解 Mojo 模块。 Mojo 模块是单个 Mojo 源文件,其中包含适合导入它的其他文件使用的代码。例如,您可以创建一个模块来定义如下所示的结构:

struct MyPair:
    var first: Int
    var second: Int

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

    fn dump(self):
        print(self.first, self.second)

请注意,这段代码没有任何main()功能,因此无法执行 mymodule.mojo。但是,您可以将其导入到另一个具有函数的文件中 main()并在那里使用它。

例如,以下是如何导入MyPair名为 的文件,main.mojo 该文件与 位于同一目录中mymodule.mojo

from mymodule import MyPair

fn main():
    var mine = MyPair(2, 4)
    mine.dump()

或者,您可以导入整个模块,然后通过模块名称访问其成员。例如:

import mymodule

fn main():
    var mine = mymodule.MyPair(2, 4)
    mine.dump()

您还可以使用 为导入的成员创建别名as,如下所示:

import mymodule as my

fn main():
    var mine = my.MyPair(2, 4)
    mine.dump()

在此示例中,仅当mymodule.mojo与 位于同一目录中 时才有效main.mojo。目前,.mojo如果文件驻留在其他目录中,则无法将它们作为模块导入。

六、Mojo牛刀小试

1.Mojo安装

Mojo SDK 目前可用于在 Apple 芯片上运行的 Ubuntu Linux 系统和 macOS 系统。对 Windows 的支持即将推出。Mojo SDK 包含本地 Mojo 开发所需的一切,包括 Mojo 标准库和Mojo 命令行界面 (CLI)。 Mojo CLI可以启动REPL编程环境、编译和运行Mojo源文件、格式化源文件等。

我们还发布了Visual Studio Code 的 Mojo 扩展, 以提供一流的开发人员体验,包括代码完成、快速修复和 Mojo API 的悬停帮助等功能。

1.打开终端并安装modular命令行工具:

curl -s https://get.modular.com | sh -

2.然后使用以下命令登录您的模块化帐户:

modular auth

3.现在您可以安装 Mojo SDK:

modular install mojo

4.设置环境变量以便您可以访问 mojoCLI,如果您使用的是 Bash,请运行以下命令:

MOJO_PATH=$(modular config mojo.path) \
  && BASHRC=$( [ -f "$HOME/.bash_profile" ] && echo "$HOME/.bash_profile" || echo "$HOME/.bashrc" ) \
  && echo 'export MODULAR_HOME="'$HOME'/.modular"' >> "$BASHRC" \
  && echo 'export PATH="'$MOJO_PATH'/bin:$PATH"' >> "$BASHRC" \
  && source "$BASHRC"

2.Mojo使用

安装 MAX SDKMojo SDK后,您可以使用 Mojo CLI来构建和运行 Mojo 程序。因此,让我们创建一个经典的入门程序,以三种不同的方式打印“Hello, world!”。

在开始之前,请确保按照安装过程中所述设置MODULAR_HOME和环境变量,以便您可以运行以下 命令:PATH``mojo

mojo --version

首先,让我们使用 Mojo REPL,它允许您在命令提示符下编写和运行 Mojo 代码:

  1. 要启动 REPL 会话,请mojo在终端中输入并按Enter。
  2. 然后键入print("Hello, world!")并按Enter两次(需要一个空行来指示表达式的结尾)。

就是这样!例如:

$ mojo
Welcome to Mojo! 🔥

Expressions are delimited by a blank line.
Type `:quit` to exit the REPL and `:mojo help repl` for further assistance.

1> print("Hello, world!")
2.
Hello, world!

您可以在 REPL 中编写任意数量的代码。您可以按Enter开始新行并继续编写代码,当您希望 Mojo 评估代码时,按Enter两次。如果有需要打印的内容,Mojo 会打印它,然后将提示返回给您。

现在让我们在 Mojo 源文件中编写代码并使用以下 mojo命令运行它:

1.hello.mojo创建一个名为(或)的文件hello.🔥并添加以下代码:

fn main():
    print("Hello, world!")

这就是你所需要的。保存文件并返回到您的终端。

现在使用以下命令运行它mojo

mojo hello.mojo

它应该立即打印消息:

Hello, world!

小节

请注意,Mojo 仍然是一种非常年轻的语言,所以还有很多东西还没有建立起来。同样,还有很多文档还没有写出来。但我们很高兴能与您分享 Mojo 并获得您的反馈。

虽然Mojo作为一种为AI / ML量身定制的快速,与Python兼容的语言显示出前景,但它不太可能在不久的将来完全取代Python。Python 受益于庞大的生态系统、社区以及数据科学和 ML 领域的根深蒂固。充其量,Mojo可能会成为Python的补充语言,用于速度至关重要的地方。

相关文章
|
1天前
|
人工智能 前端开发 JavaScript
2023年度编程语言榜首之预测与AI时代下的学习计划
在技术圈中,TIOBE编程社区指数一直被视为衡量编程语言受欢迎程度的重要指标,而且长期以来,大家也都知道Python一直稳居榜首。但是据悉,TIOBE官方近期做出了大胆的预测,认为C#有可能成为2023年度编程语言的冠军。2023年的倒计时已经拉开帷幕,还有短短几天时间,关于2023年度编程语言的预测,以及C#是否有可能成为榜首,这些都即将揭开神秘面纱。那么本文就来简单聊聊年度编程语言的结果,以及在AI时代下的该怎么去学习新语言。
190 55
2023年度编程语言榜首之预测与AI时代下的学习计划
|
1天前
|
存储 人工智能 开发框架
【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序
【AI Agent系列】【阿里AgentScope框架】0. 快速上手:AgentScope框架简介与你的第一个AgentScope程序
200 0
|
1天前
|
人工智能 程序员 开发工具
“AI 程序员入职系列”第二弹:如何利用通义灵码光速改写项目编程语言?
本文中阿里云后端工程师云徊将从项目开发的实际需求出发,演示通义灵码在开发工作中可提供的帮助。
|
1天前
|
人工智能 机器人 芯片
英伟达最强 AI 芯片、人形机器人模型炸场!黄仁勋放言英语将成最强大编程语言
在2024年的GTC大会上,英伟达创始人黄仁勋揭幕了新一代AI芯片Blackwell,号称是史上最强AI芯片,目标是推动AI领域的重大进步。
|
7月前
|
人工智能 机器人
人工智能 AI 绘画 AI绘制的图片 ? 简介的版权,以及如何使用图像生成AI 绘画 ?
人工智能 AI 绘画 AI绘制的图片 ? 简介的版权,以及如何使用图像生成AI 绘画 ?
239 0
|
9月前
|
机器学习/深度学习 人工智能 Java
五种重要的 AI 编程语言
编码是任何构建 AI 产品的人必备技能。它使您能够将机器学习想法变为现实。学习编码既有趣又充满力量,但也需要时间和精力。你想做的最后一件事就是开始学习一门语言,只是在几周或几个月后才意识到你想要的工作实际上需要一门不同的语言。
206 0
|
11月前
|
人工智能 自然语言处理 数据可视化
AI-Prompt 1.0 版简介&公测!你的AI提示词工作站!
ai-prompt.cn提供一个全面的提示词工具,涵盖关键词的编写、学习和分享等方面。通过我们的提示词社区,你可以与其他用户共享最佳实践、点子和生成的提示词。无论是AI提示词、ChatGPT提示词还是Midjourney和Stable Diffusion等平台的提示词,我们都支持。我们的工具提供稳定的提示词生成,同时提供NovaAI关键词等特殊场景的定制。无论是提示词工程还是提示词学习,我们都是你值得信赖的伙伴。立即体验我们强大而易用的提示词工具,提升你的写作和创作效率。
|
12月前
|
机器学习/深度学习 人工智能 并行计算
LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介
LabVIEW图形化的AI视觉开发平台(非NI Vision)VI简介
329 0
|
12月前
|
机器学习/深度学习 人工智能 Rust
Mojo:比 Python 快 35000 倍的 AI 编程语言
Mojo是一门刚刚发布的面向 AI 开发人员的编程语言。 Mojo 被设计为 Python 的超集,所以如果你已经掌握了 Python,学习 Mojo 会很容易。关键是 Mojo 将 Python 的易用性与 C 语言的性能相结合,速度比 Python 快35000倍!让你鱼与熊掌兼得。 如果您对 AI 感兴趣并且已经了解 Python,那么 Mojo 绝对值得一试。 这篇文章将带给你有关 Mojo 的所有信息。
418 0
Mojo:比 Python 快 35000 倍的 AI 编程语言
|
机器学习/深度学习 人工智能 自然语言处理
AI 系统简介和分类
AI 系统简介和分类
296 0

热门文章

最新文章