github starkware-libs/cairo v2.4.0

latest releases: v2.12.4-dev.1, v2.12.4-dev.0, v2.12.3...
21 months ago

This is the Cairo version associated with Starknet 0.13.0. Contracts written with 2.4.0 are not declarable on Starknet until the upgrade.

Major Updates

  • Added basic byte array formatting:
    • Added core::fmt::Formatter for creating a ByteArray constructively.
    • Added core::fmt::Display and core::fmt::Debug as traits describing how to write a value based on a format string.
    • Added derive for Debug for easy implementation of core::fmt::Debug.
    • Inline macros write! and writeln! - adds to a formatter: write!(f, "format_string({})", value).
    • Inline macro format! - creates a byte array: format!("format_string({})", value).
    • Inline macros print! and println! - prints a format string to stdout for debug: print!("format_string({})", value).
    • Inline macro panic! - panics with a formatted byte array: panic!("format_string({})", value).
    • Inline macro assert! - asserts condition:
      • Panic with the format string if the condition is false: assert!(cond, "format_string({})", value).
      • Panic with the condition as a bytearray if the condition is false: assert!(cond).
    • In test plugin only Inline macro assert_eq! - asserts equality condition: assert_eq!(a, b, "Extra description {}, param");
  • Contracts with sierra versions 1.4.0 and up calculate gas usage in a more efficient way.
  • Removed need for available_gas in tests not testing specific gas usage - Now using a default large value. (#4172)
    • If testing not using dynamic gas - add #[available_gas(static)] instead.
  • Added Cairo Editions, allowing introducing opt-in for features that make break existing code.
    • Currently 2 editions exist: 2023_01 (default) and 2023_10.
  • Added prelude (control for which code is in the context for all cairo code).
    • Previously - all the corelib base module was in the context of all cairo code.
    • Now - it is according to edition configured per crate:
      • 2023_01 - The prelude includes all the top level of the corelib as of the state of the corelib at release 2.3.1.
      • 2023_10 - A much smaller subset.
    • Users are encouraged to update their packages to the newest edition.
  • Updated ExecutionInfo to be an extended version.

Bug Fixes

  • Added support for bool and non copy nullable. #4340
  • Raise diagnostic on impl inference cycle. #4367
  • Made ap-changes be calculated without LP. #4250
    • Fixes various inconsistent annotations code.
    • Uses an algorithm similar to the new gas usage calculation - available only for 1.4.0 sierra declared classes.
  • Handlng zero sized locals. #4414
  • Added indirect impl support for inference. #4420
  • Remove redundant gas assertions. #4464

Optimizations

  • Removing extra store temps happening before store locals. #4173
  • Added cast for signed integers. #3623
  • Changed bytes31 casts to use libfunc upcast. #4098
  • Accessing a member of a struct does not cause all the struct to be stored. #4263
  • Avoid storing zero sized objects on the stack. #4290
  • Adding Zero-Sized handling in the Sierra-to-casm compiler for better stack merging capabilities, and more efficient casm.
  • Using efficient invmod implementation where possible. #4402

New Features

  • Added libfunc for efficient u256 inv_mod_n. #3603
  • Added Nullable deref_or method by @enitrat in #4037
  • Added Option unwrap_or and unwrap_default by @Eikix in #4203
  • Added append_array to Array. #4260
  • Added match_nullable_snapshot. #4253
  • Testing #[should_panic(expected: 'error')] supported - no need for wrapping ( ) in the case of a single var.
  • Testing #[should_panic(expected: "error")] supported - for testing panicking with byte array.
  • Add verify_signature function for secp curves. #4120
  • Zero and One traits by @enitrat in #4254
  • Support match on felt252 continuous from 0 and on values. #4284
  • Skip attributes with no related item, getting better diagnostics for later code. #4296
  • Added plugin suites. #4349
  • Better compiler performance by avoiding data copies. #4244
  • Caching compiler parser actions. #4247
  • Allocate arguments before return values, generating more easily read Sierra code. #4258
  • Move literal values validation to parser. #4295
  • Made inline macro plugins point to the inner syntax, Improving diagnostics. #4345
  • Improved Trait Mismatch diagnostic message. #4374

Others

New Contributors

Full Changelog: v2.3.1...v2.4.0

Don't miss a new cairo release

NewReleases is sending notifications on new releases.