@Modular: 昨天直播了Mojo 101的第一节课,参与人数众多。我们的实时聊天中充满了富有洞见的问题。如果…

X AI KOLs Timeline 新闻

摘要

Mojo 101 第一节课的录像现已上传至YouTube,内容涵盖语言基础,包括项目设置、Hello World、Mojo的编译、静态类型和所有权模型。

昨天直播了Mojo 101的第一节课,参与人数众多。我们的实时聊天中充满了富有洞见的问题。 如果你错过了(或者想重看),语言基础的录像现已上传至YouTube:https://t.co/xkmcNOk0hm
查看原文
查看缓存全文

缓存时间: 2026/07/10 22:18

Mojo 101 第 1 节昨日直播,参与人数众多。我们的实时聊天中涌现了许多深刻的问题。

如果你错过了(或想重看),现在可以到 YouTube 上观看“语言基础”的录制视频:https://t.co/xkmcNOk0hm


TL;DR

Mojo 101 第 1 节涵盖了如何使用 Pixie 搭建 Mojo 项目、编写“hello world”程序,以及理解 Mojo 的编译、静态类型和所有权模型为何使其成为高性能工作的强大语言。

课程介绍与目标

Modular 的开发者倡导者 Michael Dun Connor 介绍了分为四部分的 Mojo 101 系列。总体目标是将学习者从“hello world”带向 GPU 编程,基于现有的 Mojo GPU 谜题(https://github.com/modular/mojo)资源。系列课程结束后,参与者应能够:

  • 独立在 Mojo 中开始并行编程。
  • 将 Mojo 应用于自己的领域问题。
  • 为开源的 Mojo 标准库和内核项目做出贡献。

第 1 节关注语言基础:创建 Mojo 项目、函数、控制流和结构体。

使用 Pixie 创建 Mojo 项目

Pixie 被用作包管理器。步骤如下:

  1. 安装 Pixie(如果尚未安装),使用 Mojo 快速入门指南中的 curl 命令。
  2. 初始化项目bash pixie init session_one cd session_one 这会创建一个包含 pixie.lock 文件(依赖项初始为空)的目录。
  3. 添加 Mojo 依赖bash pixie add mojo 这会安装 Mojo 1.0 beta 2(本课程中使用的版本)。
  4. 进入 Pixie 虚拟环境bash pixie shell mojo --version 验证——应输出“Mojo 1.0 beta 2”。

Hello World 及两种运行方式

创建文件 hello.mojo,内容如下:

``mojo

这是一条注释

def main(): print(“hello world!”) ``

入口点必须是一个名为 main 的函数。

运行代码

即时编译并运行bash mojo hello.mojo 输出:hello world!

预编译为二进制文件bash mojo build hello.mojo 这会生成名为 hello 的可执行文件。运行 ./hello。编译后的二进制文件即使不在 Pixie 环境中也能运行——这展示了编译型语言的一大优势。

为什么是 Mojo?编译、静态类型和所有权

来自 Mojo 标准库团队的 Nate 解释了使 Mojo 与众不同的三个核心概念。

编译型语言 vs. 解释型语言

Mojo 是编译型的,不像 Python 那样是解释型的。两步过程(编译 → 二进制)允许编译器针对目标硬件优化代码,从而实现非常快的执行速度。二进制文件可以在没有原始源代码甚至没有 Mojo 工具链的情况下运行,如 ./hello 示例所示。

静态类型

每个变量和函数参数在编译时都必须有已知的类型。Mojo 可以从初始值推断类型,也可以显式标注类型。

mojo var x: Int = 42 # 显式类型标注

由于类型是固定的,编译器可以及早捕获不匹配问题。例如,将字符串赋值给整数变量会产生编译时错误:“cannot implicitly convert ‘String’ to ‘Int’”。类似地,期望 Int 参数的函数不能用 String 调用。

函数需要显式的参数和返回类型:

mojo def add_one(x: Int) -> Int: return x + 1

省略返回类型会导致错误:“cannot implicitly convert ‘Int’ to ‘None’”。这种严格性消除了动态语言中常见的一整类运行时类型错误。

所有权与内存安全

Mojo 使用基于值语义的所有权模型(类似于 Rust)。一个示例说明了区别:

mojo var a = "hello" var b = a # b 是 a 的*副本* b += " world" print(a) # 输出 "hello" print(b) # 输出 "hello world"

这里 ab 是独立的实例。修改 b 不会影响 a——这与赋值创建引用的语言有本质区别。这种所有权系统防止了意外的别名,并使内存管理可预测。

后续步骤与问答

课程以一个简短的开放式问答环节结束(团队成员回答了实时聊天中的问题)。未来的课程将遵循相同的结构:主题概述、现场编码和问答环节。


来源: YouTube 视频 – @Modular: Mojo 101 第 1 节(https://www.youtube.com/watch?v=1Jqp0BheoEQ)

相似文章