Skip to content

v0.30.0

Latest

Choose a tag to compare

@github-actions github-actions released this 03 Sep 14:24
· 400 commits to main since this release
16c9057

Language

  • Complete soft-keyword parsing for declaration words such as actor,
    class, extension, from, import, protocol, and type, keeping them
    usable as names inside functions, classes, protocols, extensions, and actors
    while reporting imports after module definitions as a clear parse error.
    [#3038]

Compiler & Build

  • Preserve hidden protocol-witness fields when importing constrained generic
    classes, fixing subclass layout corruption and serialization round-trips for
    generic classes subclassed from another module. [#3037]
  • Avoid duplicate visible protocol witnesses when importing and defining
    extensions, keeping witness lookup canonical when the same protocol/type
    pair is available through rival modules or ancestry paths. [#3061]
  • Cache imported module closures and attribute-owner lookups during type
    checking, cutting repeated import and attribute scans so large generated
    modules with many attribute selections type-check in seconds again instead
    of minutes. [#3073]
  • Resolve inherited protocol-witness slots during type checking instead of
    late C generation, making witness classes complete for diamond, generic,
    cyclic, and imported extensions while reporting conflicting inherited
    signatures as compiler errors. [#3049]
  • Use ThinLTO for non-debug Linux release builds, preserving cross-module
    optimization while making final links faster and less memory intensive for
    large projects. [#3060]
  • Keep scalar parameters boxed when overriding generic class methods, so calls
    through the generic method slot unbox values inside the callee correctly and
    parameter rebinding does not mutate the caller's box. [#3043]
  • Compile list, set, and dict comprehensions used in if, elif, and while
    conditions without moving the generated comprehension helper out of scope.
    [#3041]
  • Deduplicate protocol witnesses for parameterized extensions by comparing
    their schematic types, so generic classes with equivalent constraints do not
    lose needed witness lookups when type parameter names differ. [#3065]
  • Commit refreshed cached module interfaces before later compiler phases read
    them, so incremental builds see a reliable front-end completion boundary and
    keep progress reporting balanced. [#3068]
  • Compile postfix ! on actor calls inside dict, list, and set comprehensions,
    preserving effects and type conversions so generated C uses the correct
    calling convention. [#3057]
  • Compile forced unwrap and optional chaining through named and positional tuple
    selections, and report unsupported row-rest selectors normally instead of
    crashing the compiler. [#3055]
  • Escape generated C identifiers that match C keywords using order-independent
    lookup, including underscore-prefixed keywords and C23 typeof_unqual, so
    generated code avoids reserved-word collisions. [#3044]
  • Compile base, std, and generated project C with -fwrapv, making fixed-size
    signed integer arithmetic wrap consistently in debug and release builds,
    including overflowing left shifts. [#3050]

Runtime & Standard Library

  • Decode JSON integers into Acton int or bigint values without losing
    precision, including oversized signed and unsigned tokens, and encode
    bigint values as JSON numbers by default with a bigint_as_string option
    for string-based consumers. [#3047] [#3053]
  • Add Acton Object Notation support through new aon modules, with
    source-aware parsing, deterministic encoding, nested sections, lists, named
    tuples, comments, and direct conversion through the same data representation
    as JSON. [#3077]
  • Build tuples in one allocation by storing components inline with the tuple
    object, reducing construction memory use and keeping deserialized tuples in
    the same compact layout. [#3070]
  • Handle set elements whose hashes use the high bit without hanging lookups,
    keeping membership, deletion, reinsertion, resizing, and serialized
    tombstones consistent across supported target widths. [#3075]
  • Return both coalesced HTTP responses to pipelined http.Client callbacks,
    preserving the parser remainder so later responses stay matched to the
    correct outstanding request. [#3067]
  • Fix base64.encode() and base64.decode() for empty byte strings, and make
    invalid base64 input raise ValueError instead of aborting the process.
    [#3066]
  • Upgrade the bundled yyjson JSON library to 0.12.0. [#3052]

Testing & CI

  • Add core-language regression tests for await values, exceptions, chaining,
    fan-in, fan-out, queued messages, timers, and mixed outcomes, pinning the
    observable semantics before runtime future/message handling is reworked.
    [#3034]
  • Stabilize the project-lock regression test by waiting for the child compiler
    to report that it is blocked on the lock before releasing it. [#3069]