This article is a submission to @StarknetAstroCN.
Starkware announced Cairo 1.0-alpha.3 on February 21st, bringing us closer to the official launch of Cairo 1.0 testnet (Starknet 0.11.0 will be released publicly in two weeks). Let's take a look at the new features in this release.
Snapshot is a new type (although it has been widely used before this version) that creates a reference to an object at a certain point in time, and the created snapshot cannot be further modified.
The main purpose of this type is to create a reference to the object, even if the object is not copyable (note: copying in Cairo, i.e., the copy trait, is based on the concept of Rust and is different from the general notion of copy, see here). In this case, "@" is the snap operation, and "*" is the desnap operation, which retrieves the snapshot object.
The official code provided is a bit confusing, so let me explain:
The first line here is actually written in Cairo's array source code.
To test it, you only need to test the following code:
use array::ArrayTrait;
fn main() -> felt {
let mut arr = ArrayTrait::new();
arr.append(10);
let x = *arr.at(0_usize);
return x;
}
This will output something like this in your terminal:
Run completed successfully, returning [10]
For students who still don't understand, run the following code:
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;
}
You will see the following output:
'
' (raw: 11),
Run completed successfully, returning [10]
As you can see, even though the array becomes [11], the output is still 10.
Added ec_point_zero, ec_point_is_zero, ec_state_finalize.
+=, -=, *=, /=, %=
Into, TryInto, Neg, Not operators.
Among them, Into is responsible for type conversion. TryInto is also responsible for type conversion, but allows conversion to fail and returns an Option (such as the implementation here).
Neg is short for Negative, which means taking the negative (such as the implementation here) or taking the inverse. Not means taking the logical negation.
My Twitter: