Skip to content

0.16.0

Compare
Choose a tag to compare
@github-actions github-actions released this 18 May 23:28
· 199 commits to main since this release

0.16.0 - 2025-05-18

You can find the release announcement here.

Language

  • Breaking Change - rows ≡ numeric subscripts now function identically to each ∵'s specifying the rank to operate at
    • Deprecate each ∵, as it is almost never used except for this subscript behavior
    • The formatter will turn existing uses of subscripted each ∵ into subscripted rows ≡
  • Breaking Change - repeat ⍥ and do ⍢ now accumulate excess values into arrays if their function has more outputs than arguments
    • This makes a lot of accumulation patterns much shorter and simpler
    • These loops now always have well-defined signatures
    • This breaks the common pattern of wrapping these loops in []s, which is now unnecessary and will need to be changed in your code
  • Breaking Change - fill ⬚ed scan \\ no longer uses the fill value as the first row
  • Breaking Change - fft now works along every axis of an array rather than only its last
    • This is more consistent with other functions
  • Breaking Change - Overhaul number literals
    • Literals involving eta η, pi π, tau τ, and e may now have a leading coefficient in addition to a denominator, and the symbol may be in the denominator
      • Examples: , 3π/4, 1/τ, 1.5η, 3e
    • Add complex literals
      • The real and imaginary parts are suffixed with r and i respectively. Both can be used alone.
      • Work with fractions and other constants above
      • Examples: 3r4i, 5i, πi/2
  • Breaking Change - Special casing for un ° backward ˜ join ⊂ has been removed
  • There are no longer signature restrictions on try ⍣'s functions
  • Allow for mixed numeric and sided subscripts
  • Stabilize sided subscripts for rows ≡ and inventory ⍚
  • Stabilize un ° under ⍜ for monadic functions
  • Add un ° group ⊕ and un ° partition ⊜ for monadic functions
  • Stabilize negate ¯ subscripts
  • Stabilize base ⊥
  • Stabilize fft
  • Stabilize inline macros
  • The first argument to rotate ↻ can now be rank > 1.
    • This creates an array with multiple copies of the target array rotated by different amounts
  • Output comments now show values on the stack after their line rather than before it
  • Add un ° fill ⬚ed take ↙
  • Add un ° add +, un ° multiply × and un ° divide ÷
    • These split into fraction and whole, sign and magnitude, and denominator and numerator respectively
  • Add un ° inverses for reduce / with a dyadic function (when the function is invertible)
  • Functions can now contains scoped local bindings
    • This allows for simple helper functions as well as passing bindings to macros
  • Give base ⊥ a glyph
  • Add the ln function, which computes the natural logarithm
  • Add the pretty function, which gives the string representation of an array's pretty-printed output
  • Add numeric subscripts for length ⧻ to get the length of a specific axis
  • Add numeric subscripts for shape △ to get the shape of the first few axes
  • Add numeric subscripts for range ⇡ to offset the range
  • Add support for mixed numeric and sided subscripts
  • Greeks rejoice! η, π, and τ can now be used in names (just not as the first letter)
  • Add apng and &apngs functions for encoding and showing APNG animations
  • Deprecate with ⤙ and off ⤚ on noadic and monadic functions
    • There was a lot of disagreement about what the behavior should be
    • They made the movement of data on the stack harder to follow
    • Breaking Change - Change how off ⤚ works on monadic functions
      • This change was made before deprecation was decided
  • Deprecate various environment-relate constants and replace them with noadic functions
    • This prevents the details of the compiling environment being used instead of the details from the actual running environment
    • Deprecrated: Os, Family, Arch, ExeExt, DllExt, Sep, NumProcs
    • Replacements: os, osfamily, arch, exeext, dllext, pathsep, numprocs
  • Add experimental evert ⧋ modifier for operating on the last axes of arrays.
  • Add experimental occurrences ⧆ for marking each row in an array with its occurent count
  • Add experimental progressive indexof ⊘ for finding sequential indices of each row of an array in another
  • Add experimental lexical ordering syntax
    • This enables some function packs and array notation to execute in the order they are normally read
  • Add experimental sided fill ⬚
    • This allows filling from the left instead of the right
  • Add experimental voxels function, which orthographically projects a 3D voxel array to an image
  • Add experimental bytes function for encoding and decoding byte arrays
  • Remove previously deprecated around ’
  • Remove previously deprecated astar
  • Remove previously deprecated trace ⸮

Interpreter

  • Improve pretty-printed array layout
    • High-rank arrays take up less vertical space and more horizontal space
    • Box arrays take up less space
  • Complex arrays are now compatible with image and GIF functions and will display as such automatically in the pad
    • Each pixel is colored via a domain coloring function
  • Remove errors when a line is too long
  • The formatter will now allow putting multiple function pack branches on a single line
  • Optimizations
    • stencil ⧈ is now optimized when used with with monadic functions that are optimized for rows ≡
    • Add sortedness flags to arrays to allow short-circuiting some operations
    • Optimize tuples ⧅ with ⋅⋅1 and ⋅⧻
    • The main sorting algorith for sort ⍆ is now implemented in the interpreter source code rather than a library
      • This allows it to sort arrays in place without allocating memory
      • Observed performance improvements of ~2.5x
    • sort ⍆ on lists of bytes now uses counting sort, for massive performance improvements
  • LSP improvements
    • Completions now properly respect scoping
    • Unused private bindings are now dimmed
  • Images in the native output window can now be easily copied to the clipboard
  • Add an -x/--experimental flag to the uiua repl command to pre-enable experimental features