Releases: elixir-crab/rustq
Releases · elixir-crab/rustq
Release list
v1.0.0-rc.9
Added
- Support named fields and attributes on Rust enum variants, and attributes on
match arms, enabling feature-gated event declarations and dispatch. - Add explicit move captures with
move(fn ... end), tuple-pattern closure
parameters, and structural closure arguments with optional Rust types. - Add
R.implfor native callable types using ordinary Elixir function
signatures, with:fn,:fn_mut, and:fn_oncekinds, additional traits,
and explicit lifetime bounds. - Preserve foreign callable-trait parameter and return types, and specialize
supported generic method arguments from known receiver and argument types. - Expand supported source-defined Rust type aliases for receiver inference,
including generic aliases and grouped imports. Resolve known standard-library
shared pointers, mutex lock results, and guard receivers without guessing
from unrelated method names.
Fixed
- Render matching struct-field bindings in shorthand form for Clippy-clean
generated patterns while preserving explicit renamed bindings. - Reject enum variants that mix tuple and named fields.
- Preserve reference and unary-expression precedence in method receivers.
- Infer borrows for dereferenced values and supported
StringandVecclone
results, including expressions derived from typed callback parameters. - Keep closure parameter types scoped to the callback instead of inheriting
shadowed outer-variable types. - Omit redundant unit returns, use struct-expression field shorthand, and
simplify supported ignored-error result matches for Clippy-clean output. - Avoid unnecessary mutable bindings for local references while preserving
explicit mutation requirements. - Respect generic-parameter shadowing during alias expansion, refresh aliases
after source edits, and diagnose conflicting generic substitutions. - Reject unsupported lifetime-alias expansion and inconsistent specialization
of opaque foreign trait bounds rather than silently changing their meaning.
Defer unsupported nested or ambiguous alias diagnostics until expansion
requests them.
v1.0.0-rc.8
Added
- Add
@cfgfor conditional Rust helper, method, and NIF implementations with
shared signatures and separate clause groups. - Support nested attribute metadata, including
not,all, andany
predicates, with typed path, name/value, and list representations. - Select conditional functions with
RustQ.Meta.AST.function!/3and a:cfg
option.
Changed
- Reject ambiguous function selectors instead of choosing the first conditional
implementation. - Diagnose stacked or dangling conditions, duplicate conditions, mixed
unconditional/conditional definitions, and inconsistent NIF scheduling policies.
Fixed
- Preserve authored receiver names and lexical shadowing in
defrustimpl
methods through a local binding to the Rust receiver. - Gate generated NIF result codecs and implementation helpers consistently
with their conditional entrypoints while retaining one Elixir export.
v1.0.0-rc.7
Changed
- Reject integer operands for
/with an actionable diagnostic; use explicit
floating-point conversion when floating-point division is intended. - Validate generated Cargo dependency names, options, and duplicates, and
serialize manifests with a TOML encoder for correct string escaping.
Fixed
- Load generated native libraries correctly on macOS.
- Preserve native result types through NIF boundary encoding, recursive calls,
composed calls, closures, and named captures; diagnose generated-name conflicts. - Preserve expected result types in
condbranches and typedEnum.mapclosures. - Resolve local type aliases in decoding expressions and external struct
constructor paths consistently with their remote typespecs. - Infer the decoded value type for return-position
.decode()and optional
return types for checked integer arithmetic methods. - Preserve argument evaluation and infer result propagation for shape queries.
- Refresh callable metadata after provider recompilation and source changes,
including same-size edits with unchanged timestamps. - Render nested conditionals as
else ifwhere appropriate for Clippy-clean output.
Security
- Update maintainer HTTP dependencies to versions without the reported security
advisories and remove unused dependency lock entries.
v1.0.0-rc.6
- Infer mutable owned Rust arguments from mutating collection method calls and
render them directly asmutparameters, including metadata-backed mutable
receivers and supportedVecand set/map insertion methods.
v1.0.0-rc.5
- Add focused
RustQ.Meta.ASTselectors for generated Rust items, type items,
enums, structs, and inherent or trait implementation blocks.
v1.0.0-rc.4
- Add
defrustimplfor generating inherent and trait Rust implementation
methods directly from typed Rusty-Elixir, including&selfand&mut self
receiver inference and implementation visibility, attributes, and lifetimes.
v1.0.0-rc.3
- Generate optional Rustler term filters with typed
Option::filtercalls for
compatibility with Rust 1.97 Clippy. - Highlight fenced Rust examples in generated HexDocs.
RustQ 1.0.0-rc.2
- Add composable
RustQ.Test.rust_source!/1,2andnif_exported?/3helpers that preserve ordinary ExUnit assertions and diffs; reorganize the suite around focused source values, parameterized schema/corpus cases, compiled support fixtures, and ExUnit-managed temporary directories. - Decode precise-capturing
impl Trait + use<'a>bounds without relying on pre-existing runtime atoms, as exercised by currentskia-safemetadata. - Funnel compiled
defrustAST access and internal rendering through the documentedRustQ.Meta.ASTandRustQ.Rustboundaries. - Preserve inferred tuple types as structural
RustQ.Rust.AST.TypeTuplenodes instead of raw rendered type strings. - Preserve imported Rust reference lifetimes and fixed-array lengths, lowering them through structural
TypeRef,TypeArray, andTypePathnodes. - Add structural bare-function types with bound lifetimes, unsafe and ABI qualifiers, named input metadata, variadics, and return types.
- Preserve ordered Rust path generic arguments and
impl Traitbounds in Syn metadata, and lower complete bound lists through structuralTypeImplTrait. - Document
defnifnormal, dirty CPU, and dirty IO scheduler policy and the preferred@nif schedule: :dirty_cpu | :dirty_iospelling. - Replace the README reference manual with a focused project overview and move template, AST, splice, metadata, and validation details into a generation guide.
- Lower supported remote calls in Elixir pipelines and carry expected collection types through materialized Enum stages, preserving eager semantics while avoiding ambiguous Rust
collect()inference.
v1.0.0-rc.1
- Define the RustQ 1.x compatibility contract and ship the policy with the
package, HexDocs, and agent skill. - Add
RustQ.Native, publicdefnif, privatedefrustp, generated Cargo
crates, native loading, Cargo dependency metadata, and dirty-scheduler
normalization for zero-handwritten-bridge-Rust NIFs. - Derive directional Rustler boundaries for scalars, strings, binaries, tuples,
lists, options, tagged results, typed maps, Elixir structs and exceptions,
structural unions, unit enums, and explicitly declared resources. - Expand Rusty-Elixir lowering with multiple clauses, recursion, list/map/struct
patterns, guards, comprehensions, and structural slice-pattern AST support;
normalize semantics-preserving Kernel, Enum, List, typed Map, String, Tuple,
and Range calls through focused hidden lowerers with call-specific typing. - Add external/precompiled-crate native preparation through
use RustQ.Native, build: false, load: false, with public
RustQ.Native.items/1and implicitnif_env/0injection that preserves BEAM
arity. - Add packaged
RustQ.TestExUnit assertions for focuseddefrustsource,
defnifexports/attributes, and generated Rust validity. - Expose all compiled
defrustfunction AST nodes through the documented
RustQ.Meta.AST.functions/1generator boundary. - Validate documented public APIs, package contents, checked generation, and a
formatted, Clippy-clean zero-Rust native crate through structured external
consumer fixtures containing no checked-in Rust or Cargo files.
v0.11.1
- Lower named
Enum.map/2function captures and multi-statement closure bodies,
and dogfood them for generated native AST collection decoders. - Generate Rustler term decoders structurally, including cached struct keys, and
add an AST-backed unsafe block for isolated low-level Rustler operations.