Mojo编程语言是新的。实际上,它仍在开发中。在2023年底,最新的里程碑发行版是0.6.0版。没有关于第一个完整的增量版本何时将进入GA的消息,该语言的最终功能集仍在进行中。
但是,即使在开始的早期状态,Mojo编程语言也已经证明了能够超越其他主要语言,包括Python,C和Rust。
模块化的Mojo编程语言有望彻底改变AI空间中的软件开发。对于那些想保持下一个大型机器学习趋势的人来说,现在是学习如何编写第一个Mojo计划的合适时机。
学习Mojo编程语言基础知识
在本Mojo教程中,我的计划是帮助您构建第一个Mojo计划。
我不是在谈论在Mojo建立一个简单的Hello World节目,尽管这是在案卷上。我的目标是向您展示一个温和的Mojo计划,以完成以下操作:
在隐式和静态上声明变量。
使用具有FN和DEF语义的方法。
检查Mojo中有条件的陈述。
在Mojo上介绍一些异常处理的语义。
检查Mojo循环结构的语法。
调用Mojo代码中的Python API。
将pythonobjects转换为文本。
将文本字符串转换为Mojo中的整数。
Mojo数字猜测游戏
所有这些都将通过开发简单的,基于魔力的数字猜测游戏来实现。
这与我写的基于Java的游戏没有什么不同。实际上,Java文章将在Mojo,Python和Java之间进行有趣的比较。
完整的产品
我的哲学之一是,重要的是要在开始编码之旅之前对要去的位置有所了解。因此,我将把购物车放在马上,并向您展示我们将要构建的示例的完整Mojo代码。这里是:

您的第一个Mojo程序实际上将致电Python API。
本教程的其余部分将是该Mojo应用程序从头开始的增量构建。
先决条件
本教程假设您已经安装了Visual Studio,以及Mojo Runtime和Mojo Visual Studio插件。
不需要Visual Studio,因为您可以使用作为MOJO安装的一部分来编译文件并运行该文件。尽管如此,VSCODE肯定会让您更容易。
本Mojo教程还假设您已经在干净的空文件夹中打开了Visual Studio,可以在该文件夹中存储此Mojo示例中使用的代码。
创建您的第一个Mojo文件?
首先,在Visual Studio中创建一个名为number_guesser.mojo的新文件。
如果需要,可以将火焰表情符号用作文件扩展名而不是.mojo扩展名。 Visual Studio中的Mojo插件识别.?(“ dot-flame”)和.mojo。
将火焰表情符号用作文件扩展的能力是Mojo创建者提供的一个有趣的小功能,以增强Mojo与所有其他编程语言有些不同的想法。
Hello World在Mojo
将以下代码添加到您的新文件中,以获取必要的Hello World Mojo应用程序:
fn main():print(“ Hello Mojo World!”)
运行该程序, Hello Mojo World打印到控制台。
Mojo vs. Python乍一看
Python开发人员可能会注意到Mojo和Python的语法之间的许多相似之处和几个很大的差异。
使Python开发人员感到轻松的相似之处包括以下内容:
Mojo附带了一套全面的内置功能,例如打印。
代码块通过结肠和凹痕组合来描述。
Mojo使用四个空间来缩进;标签是verboten。
最终,代码线不需要半彩色。
文字可以放在单引号和双引号中。
Mojo和Python之间的三个大差异是:
MOJO方法之前的FN序言是新的。 Python开发人员被用来查看DEF 。
命令必须进入方法。 Mojo不允许驻留在方法之外的无人看守语句。
python的隐秘如果名称==主语法被正确的主方法替换。
FN与Mojo的Def
Python开发人员将很高兴知道他们实际上可以在这个Hello World示例中将FN更改为DEF ,并且该代码可以正常工作。
Mojo是Python的超集。 Mojo完全支持Python代码。这意味着是的,Mojo支持DEF序言。
这些关键字之间的区别在于,如果您使用FN ,则应承担Mojo所需的更严格的编码要求。选择DEF ,您可以编写您喜欢的任何动态键入的Python代码。
在Mojo中没有无人看守的代码
鉴于其根源是脚本语言,Python不需要在方法中包装语句。在执行文件或导入文件时,在文件的顶部范围中写入的任何代码都将从上到底执行。
这是一个非常重要的Python安全漏洞,即使使用语言的隐秘名称等于主构造,但仍未解决。
在Mojo中,可以在顶级范围中声明变量,但是所有可执行的语句都必须在方法中。
此外,为了与所有基于C的编程语言一致,Mojo使用一种主要方法来表示应用程序的入口点。该名称等于主结构。
如何在Mojo中声明变量
我们正在构建一个猜测游戏,因此我们的程序需要两个变量:
一个名为the_guess的变量。
一个名为the_magic_number的变量。
注意:经验丰富的开发人员不会用该变量来预测变量,但是由于这是新手开发人员的第一个程序,因此允许,因为它将有助于增强代码的可读性。无需向我发送这些可变名称选择的任何阴影。
要在Mojo方法中声明局部变量,请按照以下步骤:
使用var关键字指示正在发生变量声明。
提供变量的名称。
可选分配变量一个值。
对于常数,您使用LET关键字。在我们应用程序的这种迭代中,魔术数字将是恒定的,因此我们将使用LET声明。
在删除Hello World Print语句之后,我们更新的方法如下:
fn main():让the_magic_number = 7 var the_guess = 5
静态与隐式打字
您可能已经听说Mojo是静态键入的,与Python形成了鲜明的对比。
您可能还想知道为什么在声明这些变量时没有指定数据类型。毕竟,大多数静态的语言都要求您指出您是否正在使用浮子,整数,字符串或布尔值。
就像Java一样,在Mojo变量中,方法可以将其类型推断出来,从而使开发人员明确提供类型名称。但是,允许明确打字,并且看起来如下:
fn main():让the_magic_number:int = 7 var the_guess:int = 5
Mojo Int与Python的Int
Python开发人员可能会注意到, INT有一封领先的大写字母,而在Python中,这都是较低的案例。
Python的Lower-Case Int做了一些有趣的事情,可能与Mojo的某些绩效兴趣相反。不同的资本化为Mojo语言架构师提供了一些摆动房间,因为他们弄清楚如何处理Python的一些全数字特点。
有条件的逻辑
我们需要确定the_guess是较高,较低还是等于the_magic_number ,这需要有条件的语句。
有条件的逻辑从一种编程语言到另一种编程语言的差异不大。毕竟,只有很多方法可以构建一个if .. else语句。
Mojo遵循Python的熟悉语法,以获取有条件的语句,包括Elif以及IF和其他关键字。
fn main():让the_magic_number:int = 7 var the_guess:int = 5如果the_guessthemagicnumber:print(the_guess +“太高!”);否则打印(“你猜对了!”);
以当前状态运行该应用程序,您将获得以下输出:
5太低了!
您还将收到一些警告消息,因为Mojo不喜欢猜测变量在整个程序过程中不会改变的事实。
让Mojo中的V var
标记为恒定和不变的数据与可变的数据有很大不同。当编译器知道给定值是不可变的时,可以应用许多低级优化。
在Mojo中,通过使用LET而不是VAR来识别常数。当我们运行程序时,编译器告诉我们,我们应该使用let for the_guess ,因为它的值确实会改变。我们现在可以驳回此警告,因为我们计划的未来迭代将使_Guess辜负其可变绰号。
如何在Mojo中使用Python
我们应该从用户那里获得它,而不是硬编码the_guess 。
这需要尚未属于Mojo API的用户输入功能。但是,它们可以从Python API中获得,这正是我们将使用的。
要访问我们的Mojo代码中的Python函数,我们必须在文件顶部添加以下导入:
从Python进口Python作为Impy
然后,我们必须导入所需的功能,并在代码中维护对Python组件的引用:
令py_input = impy.import_module(“内置”)。输入
如何在Python中获取用户输入
现在,我们可以像普通Python程序一样在MOJO代码中使用Python输入函数。
但是,从python中提取的资源作为pythonobject返回。在我们的代码中,我们明确键入从python输入函数返回的数据作为pythonObject ,以使这一事实清楚:
让输入: pythonobject = py_input()
当您从外部库中调用对象时,Mojo会感到有些紧张,因此我们需要在主方法声明中添加ristise关键字,以表明此方法现在可能会在运行时提出一个意外的例外:
fn main()抬高:
将字符串转换为Mojo中的int
PythonObject实现了可弦乐特征,因此我们可以轻松访问PythonObject代表的基于文本的值:
令text_input:string = input .__ str __()#convert pythonObject到字符串
一个清洁的选项是将输入传递到str()函数以恢复字符串:
令text_input:字符串= str(输入)#convert pythonObject到字符串
然后,我们可以使用ATOL方法将字符串转换为INT :
the_guess = atol(text_input)#convert mojo字符串到int
循环使用Mojo编程语言
为了结束我们的应用程序,我们嵌入了获得输入的逻辑,并评估了guess内部循环中的猜测,以检查是否选择了正确的数字:
the_magic_number!= the_guess:
在一些打印语句中使用Pepper,以向用户提供反馈,并且您已经完成了第一个Mojo程序!
从python导入python作为impyfn main()加起来:让py_input = impy.import_module(“内置”)。输入让the_magic_number:int = 7 var the_guess:int = 5 print = 5 print = 5 print = a the the_magic_number! text_input : String = str(input) #PythonObject to String the_guess = atol(text_input) #convert String to int in Mojo print("You guessed: " + str(the_guess)) if the_guess < the_magic_number: print(the_guess + " is too low!") elif the_guess > theMagicNumber: print(the_guess + " is too high!") else打印(“你猜对了!”););)
您的第一个Mojo程序的输出
当代码运行时,输出如下:
Spriumtuul@Mojo-Tutearial:〜/ Mojo Number_Guesser.mojo猜测一个数字1至10 2您猜测:2Guess较高!9您猜测:9guess lows!8您猜测:8Guess lose:8guess lower!5您猜测:5GUESS猜测:5Guess higher!
现在您的第一个Mojo申请已完成
就是这样!这就是在Mojo中编程的容易!
对于Python开发人员来说,缠绕您的头确实没有什么难过的。从Java,Rust和C Octothorpe等语言来到人工智能和机器学习世界的开发人员将享受Mojo语言的静态键入性质,更不用说其主要方法了。
在这种新的Mojo编程语言中,这里的每个人都可以喜欢的每个Mojo编程语言。