开源开罗 1.0!

长话短说

  • 开罗1.0开源了!这只是 StarkNet 堆栈开源的第一步。

  • 现在我们 首先介绍 一下 Cairo 1.0 编译器。您现在可以开始尝试基本的 Cairo 1.0 代码

  • Cairo 1.0 的核心与 Rust 非常相似

  • 将其视为初体验,而不是发布。更多改进正在进行中。该编译器的第一个版本计划于明年第一季度初发布。

  • StarkNet 尚不支持 Cairo 1.0。明年第一季度将在 StarkNet 上得到支持。

介绍

2020 年,我们发布了 Cairo,这是一种支持可验证计算的图灵完备编程语言。Cairo 最初是一种汇编语言,后来逐渐变得更具表现力。两个月前,我们发布了 Cairo 1.0,它解决了当前情况下的一些主要问题:

  • 虽然 Cairo 的语法自诞生以来已经有了显着的改进,但开发人员的体验始终可以改善。Cairo 1.0 是一种受 Rust 启发的完全类型化语言,使编写相同的逻辑变得更加容易且不易出错。

  • 现有的编译器是在与 StarkNet 本身相同的存储库中开发的,这使得跟踪语言更改变得更加困难。Cairo 1.0 编译器是从头开始编写的,可以实现更快的功能开发和更多的社区参与。

  • 现在每个计算都是可证明的。目前,Cairo 程序可能因特定输入而失败(例如,通过在某些计算分支中到达“assert 1=2”指令),从而导致计算无法证明。使用 Cairo 1.0,程序可以在每个可能的分支中得到证明。这对于 StarkNet 中的 DOS 保护和审查抵抗尤为重要。

今天,我们将开发移至公共存储库并 开源 Cairo 1.0,标志着实现上述目标的第一个里程碑! 开发人员现在第一次可以编译和执行简单的 Cairo 1.0 程序。这使得开发人员可以开始尝试 Cairo 1.0 并逐渐习惯新功能,即使在这个阶段他们还无法在 StarkNet 上实现它。

目前的能力

目前,您可以编译并执行基本的开罗本地程序。虽然许多语法/语言改进仍在进行中,但这可以让您习惯 Cairo 1.0 并享受升级带来的乐趣。

请注意,仍然不支持编写 StarkNet 合约。 StarkNet 语法(存储变量/调用合约/事件和其他系统调用)将在未来几周内添加。

代码示例

为了说明旧语法和 Cairo 1.0 之间的差异,我们选择展示一些查找第 n 个斐波那契数的不同实现/风格。

示例一:匹配表达式

在 Cairo 1.0 中,您可以使用类似 Rust 的 匹配 表达式。您将不再担心可能导致引用撤销的 if/else 语句!

示例二:数据类型

虽然 Cairo 0 使用毡和指针,但在 Cairo 1.0 中,我们可以本地访问该语言中的复杂数据类型。下面您可以找到一个生成前 n 个斐波那契数列的示例。

正如您在上面看到的,我们没有直接使用内存指针,而是使用 `Array::` 类型和 `array_append` 函数。

示例 III:结构和所有权

以下代码说明了 Cairo 1.0 中结构体的用法。

以下段落是为观众中的 Rustaceans 准备的。Cairo 1.0 以与 Rust 类似的方式管理内存。特别是,它使用了所有权和借款的概念 。因此,通过访问“FibResult”结构体的成员(在本例中为“result.value”),我们移动了“result”,这意味着除非 FibResult 可复制,否则我们无法在“result”中再次访问它.index`。为了克服这个问题,我们添加了“FibResult”类型的“#[derive(Copy)]”属性。在未来的版本中,我们将为结构添加自动解构。这将允许移动一个成员的所有权而不触及其他成员(特别是,即使“FibResult”没有复制属性,上述代码也会编译)。

特别要注意的是,Cairo 1.0 完全抽象了 Cairo 的原始(非确定性只读)内存模型。

示例 IV:错误传播

以下代码计算第 n 个斐波那契数,但与前面的示例不同,所有输入的类型均为 uint128。请注意,这解决了 Cairo 0 中处理 uint 的一个主要痛点。这里,uint128(以及将来的 uint256)是本机类型。

两个 128 位整数相加可能会导致溢出。上面的代码使用 Option 枚举 和 问号运算符 来处理中间添加之一发生溢出的情况。将此与 当前的 uint256 加法语法进行比较,其中必须调用“unit256_check”函数来保证健全性。另外,在不久的将来,我们将在语言中添加`panic`的概念(类似于 rust中的panic 宏),像加法溢出这样的简单错误将是不可捕获的并自动传播,这意味着你不会添加单位时必须使用“Option”或“?”。

自己尝试一下

您现在可以编译并运行当前支持的 Cairo 1.0 程序!请按照以下 说明 了解如何使用“cairo-run”命令。请注意,在底层, 由Lambdaclass开发的 Rust Cairo VM用于执行。

您可以在此处找到更多示例来帮助您入门 。请注意,这只是编译器开发的第一次了解;在接下来的几周内,我们将改进 CLI 和编译器。

未来的计划

计划在第一季度初发布的编译器第一个版本的重点是支持 Cairo 1.0 中 StarkNet 的所有现有功能。此外,我们正在努力扩展 Cairo 1.0 编译器的功能。在接下来的几周内,您可以期待:

  • StarkNet 功能——编写智能合约和使用系统调用。

  • 循环

  • 新的库函数

  • 改进的语言服务器

  • StarkNet 气体的原生概念

请务必保持关注并跟踪编译器进度!

Subscribe to 0xBai_
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.