github tact-lang/tact v1.4.0
Release 1.4.0

7 days ago

Added

  • The bitwise NOT operation (~): PR #337
  • Augmented assignment bitwise operators |=, &=, ^=: PR #350
  • Traversing maps from contract storage and structs is now allowed: PR #389
  • The loadBool method for Slice type: PR #412
  • CLI flag --with-decompilation to turn on decompilation of BoC files at the end of the compilation pipeline: PR #417
  • Support more Tact expressions in the constant evaluator: conditional expressions, struct instances, struct field accesses, emptyMap(): PR #432 and PR #445
  • The fromCell and fromSlice methods for struct and message parsing: PR #418 and PR #454
  • The return-statement reachability analysis now takes into account the throw and nativeThrow functions: PR #447

Changed

  • Trailing semicolons in struct and message declarations are optional now: PR #395
  • Tests are refactored and renamed to convey the sense of what is being tested and to reduce the amount of merge conflicts during development: PR #402
  • let-statements can now be used without an explicit type declaration and determine the type automatically if it was not specified: PR #198 and PR #438
  • The outdated TextMate-style grammar files for text editors have been removed (the most recent grammar files can be found in the tact-sublime repo): PR #404
  • The JSON schema for tact.config.json has been moved to the schemas project folder: PR #404
  • Allow underscores as unused variable identifiers: PR #338
  • The default compilation mode does not decompile BoC files anymore, to additionally perform decompilation at the end of the pipeline, set the fullWithDecompilation mode in the mode project properties of tact.config.json: PR #417
  • Trait lists, parameters and arguments in the Tact grammar were assigned their own names in the grammar for better readability and code deduplication: PR #422
  • The semicolon (;) terminating a statement is optional if the statement is the last one in the statement block: PR #434

Fixed

  • Return type of skipBits now matches FunC and does not lead to compilation errors: PR #388
  • Typechecking of conditional expressions when one branch's type is a subtype of another, i.e. for optionals and maps/null: PR #394
  • Typechecking of conditional expressions when the types of their branches can be generalized, i.e. for non-optionals and null can be inferred an optional type: PR #429
  • External fallback receivers now work properly: PR #408
  • Int as coins as a value type of a map in persistent storage does not throw compilation error anymore: PR #413
  • The semantics of the Tact arithmetic operations in the constant evaluator to perform rounding towards negative infinity: PR #432
  • Better error messages for the void type: PR #442
  • Fixed the native function binding for the stdlib function nativeThrowWhen (it needed to be throw_if instead of throw_when) and also renamed it to nativeThrowIf for consistency with FunC: PR #451

Release contributors

Special thanks

For opening numerous issues and making thoughtful suggestions we'd like to thank

Don't miss a new tact release

NewReleases is sending notifications on new releases.