この記事は@StarknetAstroCNへの投稿です。
Starkware は 2 月 21 日にCairo 1.0-alpha.3を発表しました。Cairo 1.0 の公式テストネット(Starknet 0.11.0 の公開から 2 週間後)への移行がますます近づいています。さて、このバージョンでの新機能を見てみましょう。
スナップショットは新しいタイプです(実際にはこのバージョンより前から広く使用されています)。スナップショットはある時点でのオブジェクトへの参照を作成し、作成後は変更できません。
このタイプの主な用途は、オブジェクトに参照を作成することです。オブジェクトがコピーできない場合でも(注:Cairo のコピー、つまり copy トレイトは、rust の概念を参考にしていますが、一般的なコピーとは異なります。こちらを参照してください)。ここで、@は snap 操作を表し、* は desnap 操作で、スナップショットオブジェクトを取り出す操作です。
公式のコードは少し混乱していますので、説明します:
これは実際には Cairo の配列のソースコードに書かれています。
実際のテストでは、次のコードをテストするだけです:
use array::ArrayTrait;
fn main() -> felt {
let mut arr = ArrayTrait::new();
arr.append(10);
let x = *arr.at(0_usize);
return x;
}
これにより、ターミナルに次のような結果が表示されます。
Run completed successfully, returning [10]
理解しづらい場合は、次のコードを実行してください:
use array::ArrayTrait;
extern fn print(message: Array::<felt>) nopanic;
fn main() -> felt {
let mut arr = ArrayTrait::new();
arr.append(10);
let xx = arr.at(0_usize);
let d = arr.pop_front();
drop(d);
arr.append(11);
print(arr);
let x = *xx;
return x;
}
次のような出力が表示されます:
'
' (raw: 11),
Run completed successfully, returning [10]
配列が [11] に変わったにもかかわらず、出力は依然として 10 です。
ec_point_zero、ec_point_is_zero、ec_state_finalize が追加されました。
+=、-=、*=、/=、%=
Into は型変換を担当します。TryInto も同様に型変換を行いますが、変換に失敗することが許容され、Option を返します(例:ここでの実装)。
Neg は Negative の略で、負の値を取得するための操作(例:ここでの実装)または逆数を取得するための操作です。Not は否定の操作です。
私の Twitter: