风险提示:央行等十部委发布《关于进一步防范和处置虚拟货币交易炒作风险的通知》, 请读者提高风险意识。

StarkWare编程语言Cairo1.0测试版开源官方简介

第一版编译器的重点是支持Cairo 1.0中StarkNet的所有功能,该版本计划在明年第一季度推出。此外,我们正在努力扩展Cairo 1.0编译器的功能。未来几周,即将上线

StarkWare
StarkWare
热度 ...

原文标题:Open Sourcing Cairo 1.0!

原文作者:StarkWare

原文来源:medium

编译:西早先生,marsbit

主要内容:

⦁ Cairo 1.0开源啦! 这仅仅是StarkNet栈开源的第一步。

⦁ 我们为读者带来了对Cairo 1.0编译器的初步介绍。大家可以开始尝试使用基本的Cairo 1.0代码了。

⦁ Cairo 1.0的核心与Rust非常相似。

⦁ 考虑到这是首次测试,而不是正式版本,优化还在进行当中。第一版的编译器计划在明年一季度初推出。

⦁ 目前,StarkNet还不支持Cairo 1.0,需要到明年第一季度,StarkNet才会支持Cairo 1.0。

代码

介绍

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

⦁ 自诞生以来,虽然Cairo的语法结构已经有了很大的改进,但开发者的体验还是有改进的空间的。Cairo 1.0是一个受Rust启发的完全类型语言,编写同样的逻辑会更加容易,并且出错的可能性更低。

⦁ 现有的编译器与StarkNet本身是在同一个repo中开发的,所以追踪语言变化的困难更大。Cairo 1.0编译器是从头开始编写的,所以有更快的功能开发和更多的社区参与。

⦁ 现在每一次计算都是可以证明的。目前,一个Cairo程序可能在特定的输入指令下出现失败(例如,在某些计算分支中达到 "assert 1=2 "指令),使计算无法被证明。在Cairo 1.0中,程序在每个可能的分支中都是可证明的。这对StarkNet中的DOS保护和抗审查尤为重要。

⦁ 今天,我们达到了上述目标方面的第一个里程碑,因为我们将开发工作转移到了公共repo,并将Cairo 1.0开源! 现在,开发人员可以编译和执行简单的Cairo 1.0程序。由此,开发者可以开始尝试使用Cairo 1.0,并逐渐适应新的功能,即使在这个阶段,他们还不能在StarkNet上实现。

目前的性能

目前,你可以编译和执行基本的原生Cairo程序。虽然许多语法/语言的优化仍在进行中,但你还是可以慢慢去习惯Cairo 1.0,享受升级带来的好处。

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

代码示例

为了说明旧的语法和Cairo 1.0之间的差异,我们选择了几个不同的实现/类型模板来展示找到第n个斐波那契数。

例一:匹配表达式(match expressions)

代码

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

例二:数据类型(Data types)

代码

Cairo 0使用的是felt和指针,而在Cairo 1.0中,我们可以在语言中访问复杂的数据类型。下面你可以看到一个例子,它生成了一个前n个斐波那契数的数组。

关于【StarkWare编程语言Cairo1.0测试版开源官方简介】的延伸阅读

  • 详解 OP Stack Rollup 流程及对应代码

    Optimism Bedrock是当前版本的OP Stack,提供了启动生产质量的Optimistic Rollup区块链的工具。它包括op-batcher和op-proposer两个服务,负责从sequencer读取交易内容并rollup到链上,以及将交易状态rollup到合约。文中介绍了如何使用recordL1Tip和l1Tip来获取最新的L1BlockRef,以及如何收集和提交交易数据。每个事务仅使用一帧,如果通道已满,则仅返回剩余帧,直到成功发送到L1。sendTransaction将交易发送到一层,并更新交易发送状态。FetchNextOutputInfo获取L2上的区块output,NextBlockNumber获取下一批次需要提交的区块区间,SyncStatus获取L2块的状态和块信息,OutputAtBlock根据块高获取output,sendTransaction使用output构建stateRoot提交交易到一层链。

  • Polygon Zero指责zkSync抄代码,创始人回应「开源可能不适合你」

    而本次争论的焦点 Boojum,是 7 月 17 日由 zkSync Era 推出的证明系统升级,将协助网络过渡到 STARK 支持的证明系统。

如上所示,我们没有直接使用内存指针,而是使用`Array::<felt>`类型和`array_append`函数。

例三:结构体和所有权(structs and ownership)

代码

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

下面这段话是为Rust开发者准备的。Cairo 1.0管理内存的方式与Rust类似。而且,它使用了所有权和借用的概念。因此,通过访问`FibResult`结构体的一个成员(在本例中,`result.value`),我们已经移动了`result`,这意味着除非FibResult是可复制的,否则我们不能在`result.index`中再次访问它。为了解决这个问题,我们在`FibResult`类型中添加了`#[derive(Copy)]`属性。在未来的版本中,我们会为结构体添加自动解构功能。在不影响其他成员的情况下移动某个成员的所有权(尤其是,即使`FibResult`没有copy属性,上面的代码也可以编译)。

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

例四:错误传播(Error propagation)

代码

下面的代码是计算第n个斐波那契数,但与前面的例子不同,所有的输入指令都是uint128类型的。注意,这解决了Cairo 0中处理uint的一个主要痛点。在这里,uint128(以及未来的uint256)是原生类型。

两个128个比特位的整数相加会导致溢出。上面的代码使用Option枚举和问号运算符来处理其中一个中间加法中的溢出情况。与目前的uint256加法语法相比,必须调用`unit256_check`函数来保证完整性。此外,在不久的将来,我们会在语言中加入`panic`的概念(类似于Rust中的panic宏),像加法溢出这样的简单错误会是无法捕捉并自动传播的,也就是说,你在添加uint时不必使用`Option`或`?`。

赶紧试试吧

你现在可以编译和运行当前支持的Cairo 1.0程序了。按照这些说明,学会使用`cairo-run`指令。注意,它的后台由Lambdaclass开发的Rust Cairo VM执行指令。

你可以在这里找到更多的例子帮助你入门(超链接)。请注意,这只是对编译器开发的第一次测试;未来几周,我们会随着编译器改进CLI。

未来计划

第一版编译器的重点是支持Cairo 1.0中StarkNet的所有功能,该版本计划在明年第一季度推出。此外,我们正在努力扩展Cairo 1.0编译器的功能。未来几周,即将上线:

⦁ StarkNet的性能——编写智能合约和使用系统调用。

⦁ 循环

⦁ 新的库函数

⦁ 优化的语言服务器

⦁ StarkNet gas的概念

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

免责声明:本文仅代表作者个人观点,不代表链观CHAINLOOK立场,不承担法律责任。文章及观点也不构成投资意见。请用户理性看待市场风险,以及遵守所在国家和地区的相关法律法规。
图文来源:StarkWare,如有侵权请联系删除。转载或引用请注明文章出处!

标签:

分享至
https://www.chainlook.cn/toutiao/1691130354.html

下一篇:

深入了解Farcaster的协议层设计与生态应用思路

Farcaster是一个完全的去中心化协议,方便开发者构建去中心化的社交网络应用。

免责声明:
链观CHAINLOOK作为区块链技术应用与Web3行业研究的智库媒体,旨在为中国区块链专家、学者们提供最新的行业资讯信息与数据样本,用于区块链技术研究与创新。本站所发布的文章仅代表作者的个人观点,不代表链观CHAINLOOK官方立场,本站所发布的区块链行业研究报告与数据分析成果是通过人工智能算法对数据内容进行分析与归纳生成,不代表任何投资暗示与建议,链观CHAINLOOK不承担法律责任。

风险提示:
虚拟货币不具有法定货币等同的法律地位,参与虚拟货币投资交易存在法律风险,链观CHAINLOOK坚决反对各类代币炒作,请读者提高风险意识,理性看待区块链技术应用及市场风险。

© 链观CHAINLOOK All Rights Reserved. 京ICP备18054193号-5