# Uiua Changelog Uiua is not yet stable. ## 0.20.0 - 2026-??-?? This version is not yet released. If you are reading this on the website, then these changes are live here. ### Language - Add based integer literals ([numbers tutorial](https://uiua.org/tutorial/Types#numbers)) - Add [`un °`](https://uiua.org/docs/un)[`validate ⊨`](https://uiua.org/docs/validate) for getting the type spec of an array. - The formatter will now format text inside comments and strings that is surrounded with `\\(...)`. - Add [`anti ⌝`](https://www.uiua.org/docs/anti)[`&var`](https://www.uiua.org/docs/%26var) for setting environment variables. - Add native matrix division (spelt `⌝(⊞(/+×)⊙⍉)`) as the [`anti ⌝`](https://www.uiua.org/docs/anti) to matrix multiplication (spelt `⊞(/+×)⊙⍉`). - Add [`"f16"`](https://en.wikipedia.org/wiki/Half-precision_floating-point_format) format to [`bytes`](https://www.uiua.org/docs/bytes) ### Interpreter - The pretty printer now shows simple box lists using `{}`s and spaces instead of box drawing characters. - This make reading simple box arrays much easier - Add aliases - `sum` - `prod` - `csc` - `sec` - `cot` - `avg` ### Website - Separate [Aliases](https://uiua.org/docs/aliases) page from the [Idioms](https://uiua.org/docs/idioms) page. - Add [APL387](https://dyalog.github.io/APL387/) font to pad - Remove Pixua font from pad ## 0.19.1 - 2026-09-03 ### Interpreter - Fix a bug related to optimizations on arrays flagged as boolean - Fix compilation with `--no-default-features` ## 0.19.0 - 2026-08-26 ### Language - **Breaking Change** - Monadic [`tuples ⧅`](https://uiua.org/docs/tuples) now gives the power set rather than prefixes. - Sided [`tuples ⧅`](https://uiua.org/docs/tuples) now gives prefixes or suffixes. - Change module member access syntax from `~`/`≈` to `.`/`‥`, which is easier to type and looks nicer - Add [`oklch`](https://uiua.org/docs/oklch) function - Add [`un °`](https://uiua.org/docs/un)[`reshape ↯`](https://uiua.org/docs/reshape) to output the deshaped array alongside its shape - Add `$_` syntax to remove labels - Add [`cos`](https://uiua.org/docs/cos), [`tan`](https://uiua.org/docs/tan), [`sinh`](https://uiua.org/docs/sinh), [`cosh`](https://uiua.org/docs/cosh) functions, and [`tanh`](https://uiua.org/docs/tanh) functions, with associated inverses - Add [`un °`](https://uiua.org/docs/un)[`apng`](https://uiua.org/docs/apng) for APNG decoding - Add sided subscripts for [`negate ¯`](https://uiua.org/docs/negate), which get the conjugate or negative conjugate - Add numeric subscripts for [`rise ⍏`](https://uiua.org/docs/rise) and [`fall ⍖`](https://uiua.org/docs/fall), which give [`pick ⊡`](https://uiua.org/docs/pick)-compatible indices - Allow for multiple outputs from monadic [`tuples ⧅`](https://uiua.org/docs/tuples) - Allow sided [`stencil ⧈`](https://uiua.org/docs/stencil) with non-monadic functions - [`under ⍜`](https://uiua.org/docs/under)[`group ⊕`](https://uiua.org/docs/group) now promotes low-rank groups like [`keep ▽`](https://uiua.org/docs/keep) and others do. - Lone numeric subscripts now format to number literals, making it easier to split them off - Add `NoInit` constructor to data definitions construct data without running initializers (but still running validators) - Allow for function arguments to macros to be indicated in a signature comment - Put signature comments for each function between `()`s at the beginning of the macro's signature comment - Allow for subfolder imports from Git repos specified like `~ "git: example.com/user/repo subfolder"` - Format left `⌞` and right `⌟` subscripts from `,,` and `,.` respectively - Add experimental `ᵢ` and `ᵣ` subscripts, which format from `,i` and `,r` respectively - Only currently compatible with dyadic pervasives and custom subscripts, but may be used for other things in the future - Rework experimental [Geometric Algebra](https://uiua.org/docs/experimental#geometric-algebra) system - Add experimental [`multivector 𝕍`](https://uiua.org/docs/multivector) function, which creates an array of geometric algebra multivectors - Add experimental [`inner product ⨰`]() function - Add experimental [`outer product ⨱`]() function - Add experimental [blade literals](https://uiua.org/docs/experimental#blade-literals) - Remove experimental `geometric ⩜` modifier - Add experimental [custom subscript functions]() - Remove previously deprecated `log ₙ` function, which syntactically conflicted - Add experimental [Type Checking](https://uiua.org/docs/experimental#type-checking) - Add experimental [`validate ⊨`](https://uiua.org/docs/validate) function to help with type checking - Add experimental [`pattern ⍡`](https://uiua.org/docs/pattern) modifier, which makes big pattern match lists easier to debug and maintain - Remove the previously deprecated `indexof ⊗` function - As planned, [`indexin ⊗`](https://uiua.org/docs/indexin)'s glyph has been changed, and the old one will format to `⊗`. - Remove experimental `&b` (breakpoint) - It was half-baked and poorly implemented - Remove old version of [`reach ∪`](https://uiua.org/docs/reach) that used the `𝄐` glyph ### Interpreter - Tweak the formatter to make indentation always a multiple of 2 - Add number output rules for some square roots - Remove proxy values, which where a hacky solution to maintaining correct types and shapes when iterating over arrays with 0 rows. - The type analyzer for these cases has been improved to make them mostly unnecessary - New aliases - `raze` alias for `/◇⊂` - `cis` alias for `°⍉` - `#exp` alias for `# Experimental!` - `kbm` and `knbm` aliases for `▽⊸∊` and `▽¬⊸∊` - Allow modules to be unclosed - The closing delimiter will be formatted in - Uncaught errors in threads now immediately print to stderr - Optimize `⧋/` on pervasive dyadic functions - Improve some behavior of primitive name splitting - Optimize prime checking with `=⊣⊸°/×` ### Website - Add an example selector to the showcase pad on the main page ## 0.18.1 - 2026-02-14 ### Interpreter - Fix a crash in filled dyadic pervasives - Fix signature of [`&invk`](https://uiua.org/docs/&invk) - Fix parsing of `=` followed by subscript - Fix some built-in macros not being experimental ## 0.18.0 - 2026-02-05 ### Language - **Breaking Change** - Subscripted [`range ⇡`](https://uiua.org/docs/range) now makes the range inclusive up to the maximum while still changing the start, rather than offsetting the entire range - This breaks all uses of subscripted [`range ⇡`](https://uiua.org/docs/range) *other* than `⇡₁` - Stabilize [data functions]() - Allow for multiple [`fill ⬚`](https://uiua.org/docs/fill) values by returning multiple values from the fill function. - Add [`anti ⌝`](https://uiua.org/docs/anti)[`by ⊸`](https://uiua.org/docs/by) for dyadic functions - Add digit separators for number literals with `,`. Ex: `123,456.078,9` - Rename `stack ?` to [`args ?`](https://uiua.org/docs/args) - Enable mutually recursive functions if one function is defined inside another - Make sided [`fill ⬚`](https://uiua.org/docs/fill) work with [`stencil ⧈`](https://uiua.org/docs/stencil) - Add sided subscripts for [`join ⊂`](https://uiua.org/docs/join), which joins with one side as the list - Add numeric subscripts for [`classify ⊛`](https://uiua.org/docs/classify), which classifies all subrows of a given rank - Add numeric subscripts for [`table ⊞`](https://uiua.org/docs/table), which operates on all combinations of subrows of a given rank - Add sided subscripts for [`stencil ⧈`](https://uiua.org/docs/stencil) for simpler chunking - Add [chained field accessors]() for data definitions - [`anti ⌝`](https://uiua.org/docs/anti) [`keep ▽`](https://uiua.org/docs/keep) now accepts non-boolean integers - [`parse ⋕`](https://uiua.org/docs/parse) now ignores leading and trailing whitespace - Stabilize [`evert ⧋`](https://uiua.org/docs/evert) modifier - Stabilize [`reciprocal ⨪`](https://uiua.org/docs/reciprocal) function - Add [`compress`](https://uiua.org/docs/compress) function to compress arrays of bytes - A function/constant and a module with the same name can now be in scope at the same time - Allow `≁` for private imports/exports from modules - Change [`reach ∪`](https://uiua.org/docs/reach)'s glyph - Change how sided [`reach ∪`](https://uiua.org/docs/reach) works - Add `shuf` and `shuffle` aliases for [`un °`](https://uiua.org/docs/un)[`sort ⍆`](https://uiua.org/docs/sort) - Remove the 2-character ASCII aliases for comparison functions in favor of 2-letter aliases - These symbolic aliases created conflicts with other language syntax - `!=` for [`not equals ≠`]() is now `ne` - `<=` for [`less or equal ≤`]() is now `le` - `>=` for [`greater or equal ≥`]() is now `ge` - Add `inc` and `dec` aliases - Add `bw` alias for [`backward ˜`](https://uiua.org/docs/backward) - Add `fla` alias for [`deshape ♭`](https://uiua.org/docs/deshape), which is a prefix of `flat` - Add `eps`/`epsilon` alias for `ε`, for easy access to the machine epsilon - Stabilize [`un °`](https://uiua.org/docs/un) [`under ⍜`](https://uiua.org/docs/under) - Add [`hsv`](https://uiua.org/docs/hsv) function - Add [`json`](https://uiua.org/docs/json)`₅` for serializing to pretty JSON5 - Add [`&camlist`](https://uiua.org/docs/&camlist) function to list available webcams - [`&camcap`](https://uiua.org/docs/&camcap) may now take a webcam name instead of an index - Add Capacity optional argument for [`map`](https://uiua.org/docs/map) to preallocate space for n keys - Add modifier version of [`gif`](https://uiua.org/docs/gif), written as `gif!` - Operates similar to [`fold ∧`](https://uiua.org/docs/fold) - Encodes frames as they are generated - Good for when gif frames don't fit all at once in memory - Add experimental [`noise`](https://uiua.org/docs/noise) function, which generates random noise from a seed and coordinates - Add experimental [`&fetch`](https://uiua.org/docs/&fetch) function to easily fetch data from a url - Add experimental monadic and triadic [`backward ˜`](https://uiua.org/docs/backward) - Add experimental sided subscripts for [`under ⍜`](https://uiua.org/docs/under), which automatically [`dip ⊙`](https://uiua.org/docs/dip) on net-positive second functions - Add experimental [`fold ∧`](https://uiua.org/docs/fold) function packs, which allows a condition to be specified for early termination. You can read more [here](https://uiua.org/docs/experimental#fold-function-packs) - Add mathematical constants `φ` (golden ratio) and `γ` (Euler-Mascheroni) - Add `PlanetSymbols` and `ZodiacSymbols` constants, symbolic versions of `Planets` and `Zodiac` - Add `Elements` and `ElementSymbols` constants listing the chemical elements - Change experimental subscripted [`transpose ⍉`](https://uiua.org/docs/transpose) to transpose the first N axes - Deprecate [`duplicate .`](https://uiua.org/docs/duplicate) - Deprecate [`flip :`](https://uiua.org/docs/flip) - Remove the previously deprecated signature promoting behavior of [`with ⤙`](https://uiua.org/docs/with) and [`off ⤚`](https://uiua.org/docs/off), allowing them to work on monadic functions - Remove previously deprecated `progressive indexof ⊘` function - Remove previously deprecated `tag` function ### Interpreter - Upgrade to Rust 2024 edition - Increase minimum Rust version to `1.88.0` - Many bug/crash fixes - Compiled dependecies are now cached, increasing performance with large dependencies in the online pad and local LSP - Gifs now use Floyd-Steinberg dithering rather than color quantization - It's both faster and looks better - Add option to provide folder as test cases destination - Add an `Amen` audio constant - Add `ogg` support to [`audio`](https://uiua.org/docs/audio) - Optimize [`evert ⧋`](https://uiua.org/docs/evert) on pervasives - Optimize `°ₑ₂` and `°ₑ₁₀` to be both faster and more correct - Optimize `˙×⌵` on complex numbers to not do a square root - Optimize `⊢⍆` and `⊣⍆` to be O(n) - Extend [`table ⊞`](https://uiua.org/docs/table) list optimizations to non-lists - Values generated on the same line in code will appear on the same line in output - Add `-i/--stdin` flag to `uiua run` and `uiua eval` to pipe stdin to the first argument in a program - Add `-` flag to `uiua run` to run stdin as a program - Add `gh:` prefix for import strings to shorten GitHub imports - Add support for multiline input in REPL by ending lines with a `\` - Change map empty and tombstone characters to U+2ffff and U+2fffe ### Website - Reword all documentation and tutorials to no longer refer to a stack - Introduce argument manipulation modifiers earlier in the tutorial - Remove hidden cases from tutorial challenges - Pad links will automatically be compressed if it would be shorter - Add gray color option for pad ## 0.17.3 - 2025-10-07 ### Interpreter - Fix a bug in [`fill ⬚`](https://uiua.org/docs/fill)ed multidimensional [`rotate ↻`](https://uiua.org/docs/rotate) - Fix a bug in [`under ⍜`](https://uiua.org/docs/under) subscripted [`both ∩`](https://uiua.org/docs/both) - Fix a bug in multidimensional [`drop ↘`](https://uiua.org/docs/drop) - Fix a bug in [`under ⍜`](https://uiua.org/docs/under) [`first ⊢`](https://uiua.org/docs/first)/[`last ⊣`](https://uiua.org/docs/last) ## 0.17.2 - 2025-10-02 ### Interpreter - Fix a bug in `/``F``⊞``G` - Fix a bug in function callability checking - Fix a bug in [`fill ⬚`](https://uiua.org/docs/fill)ed adjacent [`stencil ⧈`](https://uiua.org/docs/stencil) - Fix a bug in [`fill ⬚`](https://uiua.org/docs/fill)ed [`scan \`](https://uiua.org/docs/scan) ## 0.17.1 - 2025-09-27 ### Interpreter - Fix a bug in `/◇⊂⍚` - Fix a bug in [`repr`](https://uiua.org/docs/repr) ## 0.17.0 - 2025-09-23 ### Language - **Breaking Change** - Numeric subscripted [`join ⊂`](https://uiua.org/docs/join) now joins that many arrays - **Breaking Change** - Remove combining `e` number literals - It was confusing when combined with `e` scientific number notation - **Breaking Change** - [`under ⍜`](https://uiua.org/docs/under)[`shape △`](https://uiua.org/docs/shape) now tiles the original array to match the new shape instead of [`reshape ↯`](https://uiua.org/docs/reshape)ing - **Breaking Change** - [`dip ⊙`](https://uiua.org/docs/dip) and [`on ⟜`](https://uiua.org/docs/on) function packs no longer apply their modifier to the leftmost function - This change makes most usecases of these function packs cleaner, as `A⊙(B|C)` changes to `⊙(A|B|C)` and likewise for [`on ⟜`](https://uiua.org/docs/on) - **Breaking Change** - [`reverse ⇌`](https://uiua.org/docs/reverse), [`transpose ⍉`](https://uiua.org/docs/transpose), and [`rotate ↻`](https://uiua.org/docs/rotate) no longer work through boxes - This caused consistency issues and was rarely used anyway - **Breaking Change** - The FFI function API has been changed considerably, read more in the documentation for [`&ffi`](https://uiua.org/docs/&ffi), [`&memcpy`](https://uiua.org/docs/&memcpy), and [`&memset`](https://uiua.org/docs/&memset) - Add [`parse ⋕`](https://uiua.org/docs/parse) subscripts to parse strings in different bases - Allow for private [modules](https://uiua.org/tutorial/Modules#private-scoped-modules), [imports](https://uiua.org/tutorial/Modules#private-imports), and [data definitions](https://uiua.org/tutorial/Data Definitions#visibility) - Modules containing data definition variants now contains a `Variants` binding that lists their names - Add array pack syntactic sugar. This lets you write code like `[⊃(+|×)]` as `⊃[+|×]`. - Subscripts can now be typed with `,` instead of `__`s - Binding names can now end with prime characters `′`, `″`, and `‴` - These will format from `'` at the end of a binding name - Add numeric subscripts for [`keep ▽`](https://uiua.org/docs/keep) to keep along a number of dimensions - Add [`under ⍜`](https://uiua.org/docs/under) capability to [`fork ⊃`](https://uiua.org/docs/fork)s of monadic functions - This allows using [`un °`](https://uiua.org/docs/un)[`by ⊸`](https://uiua.org/docs/by)[`fork ⊃`](https://uiua.org/docs/fork) to set multiple properties at once - Add `^` shorthand for `^0` in index macros - Stabilize [`self ˙`](https://uiua.org/docs/self) - Add experimental sided subscripts for [`self ˙`](https://uiua.org/docs/self) - Stabilize [`occurrences ⧆`](https://uiua.org/docs/occurrences) - Add experimental sided subscripts for [`backward ˜`](https://uiua.org/docs/backward) - Add numeric subscripts for [`occurrences ⧆`](https://uiua.org/docs/occurrences) - Add [`indexin ⊗`](https://uiua.org/docs/indexin) function, which is a flipped version of `indexof ⊗` - This makes its calling convention match [`memberof ∊`](https://uiua.org/docs/memberof) - It also matches the argument order of the more common case - [`indexof ⊗`](https://uiua.org/docs/indexof) has been deprecated - The formatter will automatically convert existing code - Deprecate experimental [`progressive indexof ⊘`](https://uiua.org/docs/progressiveindexof) in favor of [`occurrences ⧆`](https://uiua.org/docs/occurrences) - Add the [`exponential ₑ`](https://uiua.org/docs/exponential) function, which computes the exponential function - Deprecate [`logarithm ₙ`](https://uiua.org/docs/logarithm) in favor of [`exponential ₑ`](https://uiua.org/docs/exponential) - Deprecate [`unique ◰`](https://uiua.org/docs/logarithm) in favor of subscripted [`occurrences ⧆`](https://uiua.org/docs/occurrences) - `◰` will automatically format to `⧆₁` - Remove experimental `ln` in favor of [`exponential ₑ`](https://uiua.org/docs/exponential) - Add [`&seek`](https://uiua.org/docs/&seek) function for working with large files - Calling [`&tcpa`](https://uiua.org/docs/&tcpa) on a TLS listener created with [`&tlsl`](https://uiua.org/docs/&tlsl) now automatically tries conducting a TSL handshake - Make subscripted [`args ?`](https://uiua.org/docs/args) merge adjacent non-subscripted [`args ?`](https://uiua.org/docs/args) chains - Implement [`under ⍜`](https://uiua.org/docs/under)[`regex`](https://uiua.org/docs/regex) for replacing using regex (called `gsub` in some other languages) - Add functions to work with UDP: - [`&udpb`](https://uiua.org/docs/&udpb) to bind a socket - [`&udpr`](https://uiua.org/docs/&udpr) to receive a datagram - [`&udps`](https://uiua.org/docs/&udps) to send a datagram - [`&udpsml`](https://uiua.org/docs/&udpsml) to set the maximum message length - Rename `◿ modulus` to [`modulo ◿`](https://uiua.org/docs/modulo) - "Modulo" is the correct term for the operation this function conducts - Add [`un °`](https://uiua.org/docs/un) and [`under ⍜`](https://uiua.org/docs/under) capability to [`&cd`](https://uiua.org/docs/&cd) - [`un °`](https://uiua.org/docs/un)[`&cd`](https://uiua.org/docs/&cd) will output the current working directory - [`under ⍜`](https://uiua.org/docs/under)[`&cd`](https://uiua.org/docs/&cd) will return to the original directory afterward - Add experimental [`reciprocal ⨪`](https://uiua.org/docs/reciprocal) function, which computes the multiplicative inverse AKA reciprocal of a number - Add experimental [`recur`](https://uiua.org/docs/recur) modifier, which generalizes recursive algorithms - This would replace existing recursive functions - Add experimental [data functions](https://www.uiua.org/docs/experimental#data-functions) with optional arguments - Remove existing experimental non-tacit data functions and methods - [`layout`](https://uiua.org/docs/layout) and [`voxels`](https://uiua.org/docs/voxels) now use this system for configuration - `@\_` and `@\W` now roundtrip through [`pretty`](https://uiua.org/docs/pretty) and [`repr`](https://uiua.org/docs/repr) (previously they would be formatted as `@\x¯01` and `@�` respectively) - Remove previously deprecated `signature` and `stringify` modifiers ### Interpreter - Many bug and crash fixes - Emit a diagnostic when most modifiers are not provided enough arguments - Emit a diagnostic for redundant subscripts - [`below ◡`](https://uiua.org/docs/below) now accepts noadic and dyadic functions - An advice/style diagnostic will be emitted - Speed up the implementation of [`or ∨`](https://uiua.org/docs/or) - The fomatter no longer truncates trailing decimal `0`s from number literals - Implement filled adjacent [`stencil ⧈`](https://uiua.org/docs/stencil) - Optimize `=1⧻◴` - Remove `rkok` alias and change `kork` to format to `▽₂` - Add `each` alias for `≡₀` - Add `elem` alias for `∊` - Add `log` alias for [`un °`](https://uiua.org/docs/un)[`exponential ₑ`](https://uiua.org/docs/exponential) - Add `set` alias for [`un °`](https://uiua.org/docs/un)[`by ⊸`](https://uiua.org/docs/by) - Improve "Array would be too large" error messages - Change short form of the `--experimental` flag for `uiua eval` to use `-x` instead of `-e` - This is consistent with the corresponding flag for `uiua repl` - Remove the `ⁿ÷:1` ("root" pattern) optimization - It inverted incorrectly when used with [`under ⍜`](https://uiua.org/docs/under) - Existing uses should be replaced with [`anti ⌝`](https://uiua.org/docs/anti)[`power ⁿ`](https://uiua.org/docs/power) ### Pad - Add `primitives.json` to the pre-included files in the pad ## 0.16.2 - 2025-05-21 ### Interpreter - Fix a formatter bug ## 0.16.1 - 2025-05-21 ### Interpreter - Fix a bug in [`rows ≡`](https://uiua.org/docs/rows) [`rotate ↻`](https://uiua.org/docs/rotate) - Fix a bug in [`base ⊥`](https://uiua.org/docs/base) - Fix a bug in [`indexof ⊗`](https://uiua.org/docs/indexof) - Fix a bug in subscripted [`inventory ⍚`](https://uiua.org/docs/inventory) ## 0.16.0 - 2025-05-18 You can find the release announcement [here](https://uiua.org/blog/uiua-0.16.0). ### Language - **Breaking Change** - [`rows ≡`](https://uiua.org/docs/rows) numeric subscripts now function identically to [`each ∵`](https://uiua.org/docs/repeat)'s specifying the rank to operate at - Deprecate [`each ∵`](https://uiua.org/docs/repeat), as it is almost never used except for this subscript behavior - The formatter will turn existing uses of subscripted [`each ∵`](https://uiua.org/docs/repeat) into subscripted [`rows ≡`](https://uiua.org/docs/rows) - **Breaking Change** - [`repeat ⍥`](https://uiua.org/docs/repeat) and [`do ⍢`](https://uiua.org/docs/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 ⬚`](https://uiua.org/docs/fill)ed [`scan \`](https://uiua.org/docs/scan) no longer uses the fill value as the first row - **Breaking Change** - [`fft`](https://uiua.org/docs/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 η`](https://uiua.org/docs/eta), [`pi π`](https://uiua.org/docs/pi), [`tau τ`](https://uiua.org/docs/tau), and `e` may now have a leading coefficient in addition to a denominator, and the symbol may be *in* the denominator - Examples: `2π`, `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 °`](https://uiua.org/docs/un) [`backward ˜`](https://uiua.org/docs/backward) [`join ⊂`](https://uiua.org/docs/join) has been removed - There are no longer signature restrictions on [`try ⍣`](https://uiua.org/docs/try)'s functions - Allow for [mixed](https://uiua.org/docs/subscripts#mixed) numeric and sided subscripts - Implemented for [`both ∩`](https://uiua.org/docs/both), [`rows ≡`](https://uiua.org/docs/rows), and [`inventory ⍚`](https://uiua.org/docs/inventory) - Stabilize sided subscripts for [`rows ≡`](https://uiua.org/docs/rows) and [`inventory ⍚`](https://uiua.org/docs/inventory) - Stabilize [`un °`](https://uiua.org/docs/un) [`under ⍜`](https://uiua.org/docs/under) for monadic functions - Add [`un °`](https://uiua.org/docs/un) [`group ⊕`](https://uiua.org/docs/group) and [`un °`](https://uiua.org/docs/un) [`partition ⊜`](https://uiua.org/docs/partition) for monadic functions - Stabilize [`negate ¯`](https://uiua.org/docs/negate) subscripts - Stabilize [`base ⊥`](https://uiua.org/docs/fft) - Stabilize [`fft`](https://uiua.org/docs/fft) - Stabilize [inline macros](https://uiua.org/tutorial/Macros#inline-macros) - The first argument to [`rotate ↻`](https://uiua.org/docs/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 °`](https://uiua.org/docs/un) [`fill ⬚`](https://uiua.org/docs/fill)ed [`take ↙`](https://uiua.org/docs/take) - Add [`un °`](https://uiua.org/docs/un) [`add +`](https://uiua.org/docs/add), [`un °`](https://uiua.org/docs/un) [`multiply ×`](https://uiua.org/docs/multiply) and [`un °`](https://uiua.org/docs/un) [`divide ÷`](https://uiua.org/docs/divide) - These split into fraction and whole, sign and magnitude, and denominator and numerator respectively - Add [`un °`](https://uiua.org/docs/un) inverses for [`reduce /`](https://uiua.org/docs/reduce) with a dyadic function (when the function is invertible) - Functions can now contain scoped local bindings - This allows for simple helper functions as well as passing bindings to macros - Give [`base ⊥`](https://uiua.org/docs/base) a glyph - Add the [`ln`](https://uiua.org/docs/ln) function, which computes the natural logarithm - Add the [`pretty`](https://uiua.org/docs/pretty) function, which gives the string representation of an array's pretty-printed output - Add numeric subscripts for [`length ⧻`](https://uiua.org/docs/length) to get the length of a specific axis - Add numeric subscripts for [`shape △`](https://uiua.org/docs/shape) to get the shape of the first few axes - Add numeric subscripts for [`range ⇡`](https://uiua.org/docs/range) to offset the range - Greeks rejoice! `η`, `π`, and `τ` can now be used in names (just not as the first letter) - Add [`apng`](https://uiua.org/docs/apng) and [`&apngs`](https://uiua.org/docs/&apngs) functions for encoding and showing APNG animations - Deprecate [`with ⤙`](https://uiua.org/docs/with) and [`off ⤚`](https://uiua.org/docs/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 ⤚`](https://uiua.org/docs/off) works on monadic functions - This change was made before deprecation was decided - Deprecate various environment-related 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 ⧋`](https://uiua.org/docs/evert) modifier for operating on the last axes of arrays. - Add experimental [`occurrences ⧆`](https://uiua.org/docs/occurrences) for marking each row in an array with its occurent count - Add experimental [`progressive indexof ⊘`](https://uiua.org/docs/progressive) for finding sequential indices of each row of an array in another - Add experimental [lexical ordering](https://uiua.org/docs/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 ⬚`](https://uiua.org/docs/fill) - This allows filling from the left instead of the right - Add experimental [`voxels`](https://uiua.org/docs/voxels) function, which orthographically projects a 3D voxel array to an image - Add experimental [`bytes`](https://uiua.org/docs/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 ⧈`](https://uiua.org/docs/stencil) is now optimized when used with monadic functions that are optimized for [`rows ≡`](https://uiua.org/docs/rows) - Add sortedness flags to arrays to allow short-circuiting some operations - Optimize [`tuples ⧅`](https://uiua.org/docs/tuples) with `⋅⋅1` and `⋅⧻` - The main sorting algorithm for [`sort ⍆`](https://uiua.org/docs/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 ⍆`](https://uiua.org/docs/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 ## 0.15.1 - 2025-04-06 ### Interpreter - Fix builds on some systems ## 0.15.0 - 2025-04-03 You can find the release announcement [here](https://uiua.org/blog/uiua-0.15.0). ### Language - **Breaking Change** - [`repeat ⍥`](https://uiua.org/docs/repeat) and [`do ⍢`](https://uiua.org/docs/do) with net-negative signatures now preserve lower stack values between iterations - **Breaking Change** - [`atangent ∠`](https://uiua.org/docs/atan) now interacts with [`under ⍜`](https://uiua.org/docs/under) similarly to [`couple ⊟`](https://uiua.org/docs/couple) and [`complex ℂ`](https://uiua.org/docs/complex) - Add subscripted [`on ⟜`](https://uiua.org/docs/on), [`by ⊸`](https://uiua.org/docs/by), [`with ⤙`](https://uiua.org/docs/with), and [`off ⤚`](https://uiua.org/docs/off) - These preserve N arguments rather than just the first or last - Add data definition methods - Stabilize most of data definitions - A new [section]() has been added to the tutorial - Things not stabilized: - Data functions - Methods - Field validators - Stabilize subscripted [`random ⚂`](https://uiua.org/docs/random) - Signature comments can now use a `$` rather than a `?` to automatically label arguments and outputs - Change [`backward ˜`](https://uiua.org/docs/backward)'s glyph back. `𝄈` will continue to work and will be formatted as `˜`. - This glyph has much better font support - Stabilize [`backward ˜`](https://uiua.org/docs/backward) - Add [`anti ⌝`](https://uiua.org/docs/anti) [`keep ▽`](https://uiua.org/docs/keep) for parity with [`select ⊏`](https://uiua.org/docs/select) - Add subscripts for [`bits ⋯`](https://uiua.org/docs/bits) to force the number of bits - Allow [`tuples ⧅`](https://uiua.org/docs/tuples) to take [`infinity ∞`](https://uiua.org/docs/infinity) as a first argument - Deprecate [`over ,`](https://uiua.org/docs/over) - It is part of a stack manipulation paradigm that Uiua is slowly moving away from - [`with ⤙`](https://uiua.org/docs/with) and [`below ◡`](https://uiua.org/docs/below) replace the vast majority of [`over ,`](https://uiua.org/docs/over)'s use cases - You can find a short blog post about this change [here](https://uiua.org/blog/its-so-over) - Stabilize [sided subscripts](https://uiua.org/tutorial/evenmoreargument#sided-subscripts) for [`both ∩`](https://uiua.org/docs/both) and [`bracket ⊓`](https://uiua.org/docs/bracket) - Add [`un °`](https://uiua.org/docs/un) [`with ⤙`](https://uiua.org/docs/with) and [`un °`](https://uiua.org/docs/un) [`off ⤚`](https://uiua.org/docs/off) - Add sided subscripts for [`reach ∪`](https://uiua.org/docs/reach) - Add the [`# External!`](https://www.uiua.org/tutorial/documentation#external) semantic comment to mark functions that are provided via Rust code - These functions don't require a Uiua implementation and will show up in the LSP - Calling an `# External!` function that hasn't been bound will throw an error - Add experimental [`self ˙`](https://uiua.org/docs/self) modifier - Add experimental subscripts to [`negate ¯`](https://uiua.org/docs/negate) - This will [`multiply ×`](https://uiua.org/docs/multiply) a number by the Nth root of unity - Remove `&clget` alias for [`&clip`](https://uiua.org/docs/&clip) - Remove previously deprecated `&httpsw` ### Interpreter - Add `UIUA_MAX_MB` environment variable to set the maximum size of an array in megabytes - This allows catching memory errors on different systems - Optimize [`absolute value ⌵`](https://uiua.org/docs/absolute)[`complex ℂ`](https://uiua.org/docs/complex) to not create intermediate [`complex ℂ`](https://uiua.org/docs/complex) array ### Website - Add an expanded mode to the pad. Click the ⤢ button to toggle it. - Change pad icons - Add new [Data Definitions](https://uiua.org/tutorial/Data Definitions) tutorial - Add a [Format String Tricks](https://uiua.org/tutorial/strings#format-string-tricks) section to the [Working with Strings](https://uiua.org/tutorial/strings) tutorial ## 0.14.1 - 2024-12-23 ### Interpreter - Various bug fixes related to shapes, types, fills, and optimizations ## 0.14.0 - 2024-12-20 You can find the release announcement [here](https://uiua.org/blog/uiua-0.14.0). ### Language - **Breaking Change**: Multi-argument [`group ⊕`](https://uiua.org/docs/group) and [`partition ⊜`](https://uiua.org/docs/partition) no longer do reduction. Instead, multiple groups are passed to the function. - The reducing versions were rarely used - This new behavior is more useful - **Breaking Change**: [`un °`](https://uiua.org/docs/un) [`json`](https://uiua.org/docs/json) no longer attempts to form multidimensional arrays - This makes deserializing JSON more consistent - **Breaking Change**: [`fill ⬚`](https://uiua.org/docs/fill)ed [`scan \`](https://uiua.org/docs/scan) now sets the initial value as well as filling row shapes - This behavior is hard to get otherwise - Fixes to existing code should be simple - **Breaking Change**: [`obverse ⌅`](https://uiua.org/docs/obverse) with a single function now just nullifies the inverse - This makes a lot of common [`under ⍜`](https://uiua.org/docs/under) patterns much simpler - **Breaking Change**: Negative indices to [`pick ⊡`](https://uiua.org/docs/pick) and [`select ⊏`](https://uiua.org/docs/select) now always use a fill value if available - Stabilize [subscripts](https://uiua.org/docs/subscripts)! - They make available a lot of nice functionality - Allow negative subscripts - Add experimental [sided subscripts](https://uiua.org/docs/subscripts#sided) - [`rows ≡`](https://uiua.org/docs/rows), [`inventory ⍚`](https://uiua.org/docs/inventory), and [`each ∵`](https://uiua.org/docs/each) now support subscripts - [`deshape ♭`](https://uiua.org/docs/deshape) now supports subscripts - Axes are collapsed to get the given rank - Deprecate [`rerank ☇`](https://uiua.org/docs/rerank) - It was basically always used with a static rank, and that functionality has been subsumed by subscripted [`deshape ♭`](https://uiua.org/docs/deshape) and/or the iterating modifiers listed above - The dynamic behavior can still be accessed with `°⊸(⧻△)` (though when you would need this is unclear) - Add the [`stencil ⧈`](https://uiua.org/docs/stencil) modifier, which is a generalization of [`windows ◫`](https://uiua.org/docs/windows) - `⧈∘` is equivalent to [`windows ◫`](https://uiua.org/docs/windows) - [`windows ◫`](https://uiua.org/docs/windows) has been deprecated. All existing uses will continue to work and will be formatted as `⧈∘`. - [`get`](https://uiua.org/docs/get), [`has`](https://uiua.org/docs/has), and [`remove`](https://uiua.org/docs/remove) now support working on multiple key-value pairs at once - Deprecate [`trace ⸮`](https://uiua.org/docs/trace) - It is equivalent to subscripted [`args ?`](https://uiua.org/docs/args) - Sequential `?`s, which formatted to [`trace ⸮`](https://uiua.org/docs/trace)s, now format to subscripted [`args ?`](https://uiua.org/docs/args) - Stabilize [`tuples ⧅`](https://uiua.org/docs/tuples) - Stabilize [`sort ⍆`](https://uiua.org/docs/sort) - Sorting is a very common operation, and it's useful to have such simple access to it - Stabilize [`last ⊣`](https://uiua.org/docs/last) - Getting the last row is a very common operation - Stabilize [`case ⍩`](https://uiua.org/docs/case) - Add the [`path`](https://uiua.org/docs/path) modifier, which finds shortest paths - Replaces and deprecates [`astar`](https://uiua.org/docs/astar) - `astar`'s functionality is still available via [`path`](https://uiua.org/docs/path) with a function pack - Add the `A₁`, `A₂`, `A₃`, `C₂`, `C₃`, and `E₃` constants which are various kinds of adjacency offsets - They are great for working with [`path`](https://uiua.org/docs/path) - Declared signatures that do not match the inferred signature will now cause a warning rather than an error - The function is edited to make the signature correct - [`orient ⤸`](https://uiua.org/docs/orient) can now use [`fill ⬚`](https://uiua.org/docs/fill) to fill in new dimensions - [`un °`](https://uiua.org/docs/un) [`reduce /`](https://uiua.org/docs/reduce) (format string) now splits a string by a delimiter - [`do ⍢`](https://uiua.org/docs/do) now runs its functions at least once, even if their signatures are invalid - This is helpful when initially setting up a loop - [`un °`](https://uiua.org/docs/un) now works with [`repeat ⍥`](https://uiua.org/docs/repeat) without a repetition count - This counts the number of repetitions required to converge - Add an `ε` shadowable constant for the machine epsilon - You can type it as `\\epsilon` - Other greek letters can also be typed this way - Add [`&ep`](https://uiua.org/docs/&ep) and [`&epf`](https://uiua.org/docs/&epf) system functions for easier printing to stderr - Functions that work with audio such as [`audio`](https://uiua.org/docs/audio) now treat the first axis as samples and the second axis as channels - Add [`# Deprecated!`](https://www.uiua.org/tutorial/documentation#deprecated) semantic comments - Change [`backward 𝄈`](https://uiua.org/docs/backward)'s glyph to `𝄈`. Code using `˜` will continue to work and will be formatted as `𝄈`. - Add the experimental [`or ∨`](https://uiua.org/docs/or) function - It has a useful reduction identity - It is also GCD - Add experimental [inline macros](https://www.uiua.org/docs/experimental#inline-macros) - Deprecate the experimental `stringify` and `signature` modifiers in favor of inline code macros - Add experimental [`binary`](https://uiua.org/docs/binary) function, which encodes and decodes arrays into a compact binary representation - Add experimental [`&b`](https://uiua.org/docs/breakpoint) function, which pauses execution and prints the stack - Remove the previously deprecated `member ∊` function - As planned, [`memberof ∊`](https://uiua.org/docs/memberof)'s glyph has been changed, and the old one will format to `∊`. - Remove the previously deprecated experimental `⟔ coordinate` function - Remove the previously deprecated experimental `struct` modifier - Remove the previously deprecated `setinv` and `setund` modifiers - Remove the previously deprecated `choose` and `permute` functions - Remove the previously deprecated experimental `◹ triangle` modifier - Remove the previously deprecated experimental `⑄ chunks` function ### Interpreter - The compiler and interpreter have been almost entirely rewritten to use a tree-based execution model rather than a bytecode model - This massively simplifies compilation as well as optimizations and the derivation of inverses - This should not affect any language semantics - Improve pattern matching error messages - Optimize the "root" pattern `ⁿ%:1` - Optimize format strings applied to strings or boxed strings - Optimize common [`partition ⊜`](https://uiua.org/docs/partition) patterns - Add an `-e`/`--experimental` flag to the `uiua eval` command to enable experimental features - Add the `uiua check` command, which checks that Uiua files compile - More system functions are now run for output comments - Improve formatting of more complex arrays with format strings and [`&p`](https://uiua.org/docs/&p) ### Website - Add a new pad setting to show line values to the right of the code - Add [Subscripts](https://uiua.org/docs/subscripts) page - Update [More Stack Manipulation](https://uiua.org/tutorial/More Argument Manipulation) and [More Array Manipulation](https://uiua.org/tutorial/advancedarray) tutorials to include subscripts - Change their titles from "Advanced" to "More" - Add new [Idioms](https://uiua.org/docs/idioms) page ## 0.13.0 - 2024-10-21 You can find the release announcement [here](https://uiua.org/blog/uiua-0.13.0). ### Language - **Breaking Change** - [`minimum ↧`](https://uiua.org/docs/minimum) and [`maximum ↥`](https://uiua.org/docs/maximum) now compare boxes lexicographically - This makes them consistent with comparison functions like [`less than <`](https://uiua.org/docs/less%20than) - **Breaking Change** - [`gen`](https://uiua.org/docs/gen) now takes a shape argument and no longer outputs a new seed - **Breaking Change** - [`&clip`](https://uiua.org/docs/&clip) now unifies `&clget` and `&clset` - **Breaking Change** - [`type`](https://uiua.org/docs/type) numbers are now: - `0` for normal numbers - `1` for characters - `2` for boxes - `3` for complex numbers - This orders the types more or less as you're likely to need to handle them - In the future, if another number type is added, it can go at the end next to complex numbers - The experimental `chunks ⑄` function's behavior has been moved to an extension on [`windows ◫`](https://uiua.org/docs/windows) - This also allows the specification of "stride" - This is inspired by APL's `stencil ⌺` behavior - `chunks ⑄` has been deprecated - Stabilize [`orient ⤸`](https://uiua.org/docs/orient) - Change its glyph to something with broader font support - `⮌` will continue to work and will be formatted as `⤸` - Add [`anti ⌝`](https://uiua.org/docs/anti) modifier, which simplifies choosing certain inverses - Add related new [`anti ⌝`](https://uiua.org/docs/anti) inverses for [`drop ↘`](https://uiua.org/docs/drop), [`select ⊏`](https://uiua.org/docs/select), and [`pick ⊡`](https://uiua.org/docs/pick) (though many more already existed) - Add [`obverse ⌅`](https://uiua.org/docs/obverse) modifier, which unifies the specification of inverses - This unifies, replaces, and extends [`setinv`](https://uiua.org/docs/setinv) and [`setund`](https://uiua.org/docs/setund) - Deprecate [`setinv`](https://uiua.org/docs/setinv) and [`setund`](https://uiua.org/docs/setund) - [`un °`](https://uiua.org/docs/un) [`by ⊸`](https://uiua.org/docs/by) can now be used to access the "undo" part of a function's [`under ⍜`](https://uiua.org/docs/under) functionality - Stabilize [`below ◡`](https://uiua.org/docs/below) - Rename `⤙ but` and `⤚ with` to [`with ⤙`](https://uiua.org/docs/with) and [`off ⤚`](https://uiua.org/docs/off) - [`with ⤙`](https://uiua.org/docs/with) has been stabilized - "Stack macros" are now called "index macros" - Stabilize existing placeholder indexing syntax (`^0`, `^1`, etc.) - Deprecate existing stack-based macro placeholders (`^!`, `^.`, etc.) - [`assert ⍤`](https://uiua.org/docs/assert) at the beginning of a line is now interpreted as a test in some contexts - See the updated [Testing Tutorial](https://uiua.org/tutorial/Testing) for more information - [`parse ⋕`](https://uiua.org/docs/parse) now parses complex values from both `arbi`and `a+bi` formats - [`un °`](https://uiua.org/docs/un)[`parse ⋕`](https://uiua.org/docs/parse)'s return value uses the `arbi` format - [`un °`](https://uiua.org/docs/un) [`orient ⤸`](https://uiua.org/docs/orient) is now equivalent to [`range ⇡`](https://uiua.org/docs/range) [`length ⧻`](https://uiua.org/docs/length) [`shape △`](https://uiua.org/docs/shape) [`duplicate .`](https://uiua.org/docs/duplicate) - This is analogous to the behavior of [`un °`](https://uiua.org/docs/un) [`select ⊏`](https://uiua.org/docs/select) - Add a feature to some [`under ⍜`](https://uiua.org/docs/under) functions that makes them more permissive of changes in rank - Applies to [`select ⊏`](https://uiua.org/docs/select), [`keep ▽`](https://uiua.org/docs/keep), [`first ⊢`](https://uiua.org/docs/first), [`first ⊢`](https://uiua.org/docs/first)[`reverse ⇌`](https://uiua.org/docs/reverse) - The value that is "put back" can have its rank changed - Lower rank arrays get repeated to match the original shape - Higher rank arrays extend the length of the array - [`under ⍜`](https://uiua.org/docs/under) [`un °`](https://uiua.org/docs/un) [`bits ⋯`](https://uiua.org/docs/bits) now preserves a minimum bit length - [`under ⍜`](https://uiua.org/docs/under) [`reverse ⇌`](https://uiua.org/docs/reverse), [`transpose ⍉`](https://uiua.org/docs/transpose), and [`rotate ↻`](https://uiua.org/docs/rotate) are now smarter with respect to the signature of [`under ⍜`](https://uiua.org/docs/under)'s second function - For example `⍜⇌°⊂` behaves in a more useful way - [`under ⍜`](https://uiua.org/docs/under) [`length ⧻`](https://uiua.org/docs/len) now reshapes an array to have the transformed length - `NaN` and `∞` indices for [`pick ⊡`](https://uiua.org/docs/pick) and [`select ⊏`](https://uiua.org/docs/select) now get the [`fill ⬚`](https://uiua.org/docs/fill) value - [`scan \`](https://uiua.org/docs/scan) now accepts functions that take more than 2 arguments - The behavior is similar to the analogous behavior for [`reduce /`](https://uiua.org/docs/reduce) - Allow [`on ⟜`](https://uiua.org/docs/on) to use function packs - Allow [`under ⍜`](https://uiua.org/docs/under) of scalar [`keep ▽`](https://uiua.org/docs/keep) - Add the [`graphemes`](https://uiua.org/docs/graphemes) function, which splits a string into unicode grapheme clusters - Add the [`&fmd`](https://uiua.org/docs/&fmd) system function, which creates a directory - Very large arrays are now displayed more concisely in output - Change and enhance the behavior of `;` and `;;` - You can read about the new behavior [here](https://uiua.org/tutorial/codetactility#line-manipulation) - Add unicode escape sequences for entering arbitrary characters - A double backslash followed by a unicode hex number will format to the corresponding glyph - Add the [`timezone`](https://uiua.org/docs/timezone) function, which gets the local timezone offset in hours - Scoped modules are now delimited by `┌─╴` and `└─╴` - These both format from the existing `---` delimiters - Add a `Lorem` constant, which contains the Lorem Ipsum text - Add several color constants - Add pride flag constants - Add `Cats` image constant - Allow [`&raw`](https://uiua.org/docs/&raw) to be inverted, acting as a getter for the raw state of the terminal - [`under ⍜`](https://uiua.org/docs/under)[`&raw`](https://uiua.org/docs/&raw) sets raw mode, and then returns it to the previous state - Experimentally allow [`fold ∧`](https://uiua.org/docs/fold) to work with any signature - Excess values are collected into arrays - Add the experimental [`around ’`](https://uiua.org/docs/around) function, which duplicates the top value on the stack to the third-to-top position - Add experimental [`tuples ⧅`](https://uiua.org/docs/tuples) modifier - This unifies and extends the behavior of the `choose` and `permute` functions, which are now deprecated - This also replaces and deprecates the `triangle` modifier - Add experimental [`base`](https://uiua.org/docs/base) function - This converts to and from base-N digits - Add an experimental [`sort ⍆`](https://uiua.org/docs/sort) function - Sorting is very common - [`un °`](https://uiua.org/docs/un) [`sort ⍆`](https://uiua.org/docs/sort) shuffles an array - Add an experimental [`last ⊣`](https://uiua.org/docs/last) function - Getting the last row of an array is very common - Add experimental subscript modifiers - They modify the behavior of some functions and modifiers - You can read more about them [here](https://uiua.org/docs/subscripts) - Add experimental [data definitions](https://uiua.org/docs/experimental#data-definitions) - These allow for structured data similar to `struct`s and `enum`s in other languages - They also allow a limited form of namable function arguments - The experimental `struct` modifier/macro has been deprecated in favor of data definitions - Add the experimental [`layout`](https://uiua.org/docs/layout) function, which renders text into an image array - [`astar`](https://uiua.org/docs/astar) no longer errors if no paths are found - Remove previously deprecated function strands ### Interpreter - Add the `uiua find` command, which finds Uiua code that matches the given unformatted text - Add the `uiua doc` command, which shows the documentation for a function or modifier - Add checking for end-of-line signature comments - These are documented in the [Documenting Code](https://uiua.org/tutorial/documentation) tutorial - Add `webp` support to [`img`](https://uiua.org/docs/img) - Some optimizations - Pervasive function machinery has been totally rewritten - Observed performance improvements of up to 12x - [`fill ⬚`](https://uiua.org/docs/fill)ed array creation has been totally rewritten - Observed performance improvements: - ~1.2x in the best case - ~5x in the average case - ~450x in the worst case - [`rows ≡`](https://uiua.org/docs/rows) [`on ⟜`](https://uiua.org/docs/on)/[`by ⊸`](https://uiua.org/docs/by) [`random ⚂`](https://uiua.org/docs/random)/`constant` - [`memberof ∊`](https://uiua.org/docs/memberof)[`range ⇡`](https://uiua.org/docs/range) for scalar inputs to [`range ⇡`](https://uiua.org/docs/range) - [`memberof ∊`](https://uiua.org/docs/memberof)[`rerank ☇`](https://uiua.org/docs/rerank)`1`[`range ⇡`](https://uiua.org/docs/range) for rank 1 inputs to [`range ⇡`](https://uiua.org/docs/range) - [`first ⊢`](https://uiua.org/docs/first)[`un °`](https://uiua.org/docs/un)[`sort ⍆`](https://uiua.org/docs/sort) to just pick an element - Tweak the formatter to reduce excess vertical space - The formatter now aligns consecutive single-line bindings - `uiua repl` now has a `-s/--stack` flag to disable clearing the stack after each line - Clearing the stack is now the default - The `-c/--clear` has been removed - After programs finish executing, the terminal raw mode will be automatically disabled if it was left on. ### Website - Add [Ranges](https://uiua.org/tutorial/ranges) tutorial - Update the [Inverses](https://uiua.org/tutorial/inverses) tutorial with information about [`anti ⌝`](https://uiua.org/docs/anti) and [`obverse ⌅`](https://uiua.org/docs/obverse) - Add an [RSS Feed](https://uiua.org/blog/feed.rss) for the blog - Update the [Testing Tutorial](https://uiua.org/tutorial/Testing) - In the pad, files created with [`&fwa`](https://uiua.org/docs/&fwa) will now persist between runs - Add the option to decouple running and formatting in the pad - Add a dropdown to the pad to insert named functions - Add buttons to the pad to download code and copy a markdown link - Git import URLs in the pad can now be Ctrl+clicked to open in a new tab - Improve the [Constants](https://uiua.org/docs/constants) page ## 0.12.3 - 2024-08-17 ### Language - Rename `imen`, `gifen`, and `auden` to [`img`](https://uiua.org/docs/img), [`gif`](https://uiua.org/docs/gif), and [`audio`](https://uiua.org/docs/audio) to match the naming convention of other functions - The existing names will continue to work and will be formatted to the new names ## 0.12.2 - 2024-08-16 ### Interpreter - Fix a bug in formatting `¯0` - Fix a bug with uasm serialization of non-standard numbers ## 0.12.1 - 2024-08-16 ### Interpreter - Use custom version of `nokhwa` crate so that [`&camcap`](https://uiua.org/docs/&camcap) can build ## 0.12.0 - 2024-08-16 You can find the release announcement [here](https://uiua.org/blog/uiua-0.12.0). ### Language - **Breaking Change** - [`&runs`](https://uiua.org/docs/&runs) now returns 3 handles rather than 1 - This gives more precise control over stdin, stdout, and stderr - **Breaking Change** - [`un °`](https://uiua.org/docs/un) [`select ⊏`](https://uiua.org/docs/select) is now equivalent to [`range ⇡`](https://uiua.org/docs/range) [`length ⧻`](https://uiua.org/docs/length) [`duplicate .`](https://uiua.org/docs/duplicate) - **Breaking Change** - [`auden`](https://uiua.org/docs/audio) now takes a sample rate argument, and [`un °`](https://uiua.org/docs/un)[`auden`](https://uiua.org/docs/audio) now returns the sample rate - This allows you to work with audio that is not at Uiua's default sample rate - **Breaking Change** - [`fill ⬚`](https://uiua.org/docs/fill) no longer fills the shapes of inputs to [`rows ≡`](https://uiua.org/docs/rows) - It could lead to some unexpected behavior when trying to fill the shapes of outputs - **Breaking Change** - disable pattern matching inverses resulting from [`under ⍜`](https://uiua.org/docs/under) - This is basically never what you want - Pattern matching via [`un °`](https://uiua.org/docs/un) still works as normal - Deprecate `member ∊` and add [`memberof ∊`](https://uiua.org/docs/memberof) - `member ∊` almost always required flipping the arguments - [`memberof ∊`](https://uiua.org/docs/memberof) is the same, but with the arguments flipped - In the future, `member ∊` will be removed, and [`memberof ∊`](https://uiua.org/docs/memberof)'s glyph will be changed and format to `∊` - Rename media en/decoding system functions `&ime`, `&gife`, and `&ae` to non-system functions [`imen`](https://uiua.org/docs/img), [`gifen`](https://uiua.org/docs/gif), and [`auden`](https://uiua.org/docs/audio) - Their implementation is not actually system-dependent - Existing `&*e` will format to the new names - The previously deprecated `&*d` decoding functions have been removed (use [`un °`](https://uiua.org/docs/un) on the encoding function) - Switch functions have been replaced with a [`switch ⨬`](https://uiua.org/docs/switch) modifier - This makes the language more uniform - Code with existing switch functions in `⟨⟩`s will continue to work and will format to use `⨬` and `()`s - Identifiers can now contain subscript numbers - They format from `__` followed by some numbers - For example, `X__1` will format to `X₁` - The `utf` function has been renamed to [`utf₈`](https://uiua.org/docs/utf₈) - Stabilize labels - You can read about them in the new [Code Tactility Tutorial](https://uiua.org/tutorial/codetactility#labels) - [`windows ◫`](https://uiua.org/docs/windows) can now use a [`fill ⬚`](https://uiua.org/docs/fill) value to pad the array - This is useful for convolutions - Add new [Scoped Modules](https://uiua.org/tutorial/Modules#scoped-modules) - These allow you to create a module without creating a file - A `Call` or `New` function inside a module can now be called via the module's name - A module name used as a macro with `!` now imports all names from the module into the macro's function's scope - This can shorten code when accessing many items from the same module - Add the [`datetime`](https://uiua.org/docs/datetime) function, which splits a time into its date and time components - [`un °`](https://uiua.org/docs/un) [`shape △`](https://uiua.org/docs/shape) now generates an array with the given shape and incrementing elements - [`un °`](https://uiua.org/docs/un) [`pick ⊡`](https://uiua.org/docs/pick) is now equivalent to [`range ⇡`](https://uiua.org/docs/range) [`shape △`](https://uiua.org/docs/shape) [`duplicate .`](https://uiua.org/docs/duplicate) - [`keep ▽`](https://uiua.org/docs/keep) will now cycle counts if the counts array is shorter than the counted array - [`keep ▽`](https://uiua.org/docs/keep) now works with non-integer scalar counts to scale an array - [`under ⍜`](https://uiua.org/docs/under) [`keep ▽`](https://uiua.org/docs/keep) now allows increasing the kept array's rank - [`under ⍜`](https://uiua.org/docs/under) now works with common [`by ⊸`](https://uiua.org/docs/by) patterns - [`join ⊂`](https://uiua.org/docs/join) with rank differences greater than 1 can now extend the smaller array - [`couple ⊟`](https://uiua.org/docs/couple) with different ranks can now extend the smaller array - [`indexof ⊗`](https://uiua.org/docs/indexof) now works with [`fill ⬚`](https://uiua.org/docs/fill) to set the default for when a value is not found - [`un °`](https://uiua.org/docs/un) [`join ⊂`](https://uiua.org/docs/join) is now easier to combine with other inverses - [`repeat ⍥`](https://uiua.org/docs/repeat) can now repeat a negative number of times, which will repeat the inverse - [`un °`](https://uiua.org/docs/un) [`repeat ⍥`](https://uiua.org/docs/repeat) now requires the repetition count to be inside the [`un °`](https://uiua.org/docs/un) function - This makes the inverted signature correct - [`inventory ⍚`](https://uiua.org/docs/inventory) no longer does [`each ∵`](https://uiua.org/docs/each)-like behavior - This got in the way more than it helped - Non-scalar [`switch ⨬`](https://uiua.org/docs/switch) and [`repeat ⍥`](https://uiua.org/docs/repeat) now follow the same distribution and [`fix ¤`](https://uiua.org/docs/fix) rules as [`rows ≡`](https://uiua.org/docs/rows) - Add the `# Track caller!` semantic comment, which prevents stack traces from going below the function that contains it - Add the experimental [`chunks ⑄`](https://uiua.org/docs/chunks) function, which splits an array into chunks of a given size - Add the experimental [`choose`](https://uiua.org/docs/choose) and [`permute`](https://uiua.org/docs/permute) functions for combinatorics solutions - Add the experimental [`triangle ◹`](https://uiua.org/docs/triangle) modifier, which calls a function on shrinking suffixes of an array's rows - Add the experimental [`orient`](https://uiua.org/docs/orient) function, which arranges an array's axes in a specified order - Add the experimental [`fft`](https://uiua.org/docs/fft) function, which performs the Fast Fourier transform - The inverse FFT is also supported via [`un °`](https://uiua.org/docs/un) - Add the experimental [`astar`](https://uiua.org/docs/astar) modifier, which performs the A* pathfinding algorithm - Add the experimental [`but ⤙`](https://uiua.org/docs/but) and [`with ⤚`](https://uiua.org/docs/with) modifiers, which are complements to [`on ⟜`](https://uiua.org/docs/on) and [`by ⊸`](https://uiua.org/docs/by) - Add the experimental [`above ◠`](https://uiua.org/docs/above) and [`below ◡`](https://uiua.org/docs/below) modifiers, which keep all arguments to a function above or below the outputs on the stack - Add the experimental [`struct`](https://uiua.org/docs/struct) macro, which generates constructor and getter functions given some names - Un-deprecate [`dip ⊙`](https://uiua.org/docs/dip) function packs - Deprecate the experimental [`coordinate ⟔`](https://uiua.org/docs/coordinate) function, as it is seldom needed and easy to implement with other functions - It can be mostly replaced with `⊢⊚⌕` - Deprecate experimental stack and array swizzles - They don't fit my vision for the language - Deprecate implicit GitHub domain in `"git: ..."` modules - GitHub should not be a default - Adjacent [`trace ⸮`](https://uiua.org/docs/trace)s now function as a single [`trace ⸮`](https://uiua.org/docs/trace) of more values - N+1 adjacent [`args ?`](https://uiua.org/docs/args)s now format to N [`trace ⸮`](https://uiua.org/docs/trace)s - Add the [`&camcap`](https://uiua.org/docs/&camcap) system function, which captures a frame from a camera ### Interpreter - A ton of bug and crash fixes - Some optimizations - Optimize [`length ⧻`](https://uiua.org/docs/length)[`where ⊚`](https://uiua.org/docs/where) - Optimize [`≡`](https://uiua.org/docs/rows)[`□`](https://uiua.org/docs/box)[`◫`](https://uiua.org/docs/windows) - Small optimizations to rank-1 cases of [`find ⌕`](https://uiua.org/docs/find) and [`mask ⦷`](https://uiua.org/docs/mask) - Optimize [`group ⊕`](https://uiua.org/docs/group) and [`partition ⊜`](https://uiua.org/docs/partition) with [`⋅`](https://uiua.org/docs/gap)[`identity ∘`](https://uiua.org/docs/identity) and [`dip ⊙`](https://uiua.org/docs/dip)[`pop ◌`](https://uiua.org/docs/pop) - Optimize [`rows ≡`](https://uiua.org/docs/rows) [`first ⊢`](https://uiua.org/docs/first) - Git modules are now cloned instead of being added as submodules - Add the `uiua module` command to list or update cloned modules - Add some media constants: - `Logo` - the Uiua logo - `Lena` - a good example image for image processing - `Music` - a snippet of musical audio - LSP improvements - Show array shapes on hover - Code action to insert `# Experimental!` comment - REPL improvements - The stack is now preserved between REPL lines - Pass the `-c`/`--clear` flag to clear it automatically after each line - Add some commands, which can be listed by typing `help` in the repl - Allow Uiua-specific tokens types to be disabled in the LSP ### Website - Add new [Tacit Code Tutorial](https://uiua.org/tutorial/Tacit Code) - Add new [Code Tactility Tutorial](https://uiua.org/tutorial/codetactility) - Fix a bug where running pad code that has end-of-line comments via ctrl+Enter would cause the cursor to move every time - Remove the Uiuisms page - It provided a "definitive" implementation of many algorithms where the best implementation is subjective and/or context-dependent - It is not how I want people to approach learning Uiua - It is not something I am interested in maintaining ## 0.11.1 - 2024-06-06 ### Interpreter - Some bug and crash fixes ## 0.11.0 - 2024-06-02 You can find the release announcement [here](https://uiua.org/blog/uiua-0.11.0). ### Language - **Breaking Change** - [`un °`](https://uiua.org/docs/un) [`fix ¤`](https://uiua.org/docs/fix) now does pattern matching - [`under ⍜`](https://uiua.org/docs/under) [`fix ¤`](https://uiua.org/docs/fix) retains the old behavior - Collapsing the top two dimensions of an array can still be done with [`reduce /`](https://uiua.org/docs/reduce)[`join ⊂`](https://uiua.org/docs/join) - **Breaking Change** - [`un °`](https://uiua.org/docs/un) [`on ⟜`](https://uiua.org/docs/on) now does pattern matching in some cases - This makes its behavior conform to the rule that a function's inverse must have the opposite signature - Some other cases, such as `°⟜+`, now properly invert the function - **Breaking Change** - [`keep ▽`](https://uiua.org/docs/keep) with a scalar counts array now copies each row that many times - This matches the behaviors of APL and BQN, and is generally more useful - The old behavior can be achieved with `/⊂↯` - **Breaking Change** - [`fill ⬚`](https://uiua.org/docs/fill) values are no longer accessible through function calls - This makes it harder to accidentally use a fill value without meaning to - This does not affect [`un °`](https://uiua.org/docs/un)[`pop ◌`](https://uiua.org/docs/pop) - This can be circumvented with [`fill ⬚`](https://uiua.org/docs/fill)[`un °`](https://uiua.org/docs/un)[`pop ◌`](https://uiua.org/docs/pop) - Stabilize [`by ⊸`](https://uiua.org/docs/by)! - Stabilize [`repr`](https://uiua.org/docs/repr) - Add experimental **stack swizzles**, which allow for more flexible stack reordering - Swizzles are written with a `λ` followed by a list of letters - Capital letters [`fix ¤`](https://uiua.org/docs/fix) the corresponding value - The `λ` formats from `'` when it is in front of the letters - Add experimental **array swizzles**, which allow extracting rows from an array in a concise way - Swizzles are written with a `⋊` followed by a list of letters - Letters up to `m` start from the first row, Letters back from `z` start from the last row - Capital letters [`un °`](https://uiua.org/docs/un) [`box □`](https://uiua.org/docs/box) the corresponding value - The `⋊` formats from `''` when it is in front of the letters - [`keep ▽`](https://uiua.org/docs/keep) now works with [`un °`](https://uiua.org/docs/un) - It splits an array into counts and an adjacent deduplication - Add the [`json`](https://uiua.org/docs/json) function, which encodes and decodes JSON strings - Add the [`xlsx`](https://uiua.org/docs/xlsx) function, which encodes and decodes XLSX data - [`bits ⋯`](https://uiua.org/docs/bits) can now take negative numbers - [`un °`](https://uiua.org/docs/un) [`bits ⋯`](https://uiua.org/docs/bits) can now take non-booleans - Add [`un °`](https://uiua.org/docs/un) [`duplicate .`](https://uiua.org/docs/duplicate) pattern matching - Add [`un °`](https://uiua.org/docs/un) [`min ↧`](https://uiua.org/docs/min) and [`un °`](https://uiua.org/docs/un) [`max ↥`](https://uiua.org/docs/max) pattern matching - [`insert`](https://uiua.org/docs/insert) can now be used with [`un °`](https://uiua.org/docs/un) to extract a map entry and pattern match it - [`fill ⬚`](https://uiua.org/docs/fill)ed [`keep ▽`](https://uiua.org/docs/keep)'s fill value may now be a list - [`infinity ∞`](https://uiua.org/docs/infinity) can now be passed in a list to [`take ↙`](https://uiua.org/docs/take) or [`drop ↘`](https://uiua.org/docs/drop) to take/drop every row along an axis - [`reduce /`](https://uiua.org/docs/reduce) can now take a function with more than 2 arguments - Each additional argument increases the number of arguments passed to [`reduce /`](https://uiua.org/docs/reduce) by 1 - Additional arguments are passed to the function on every iteration - [`try ⍣`](https://uiua.org/docs/try) signature checking is now more permissive - Switch function signature checking is now more permissive with branches that have an [`assert ⍤`](https://uiua.org/docs/assert) that always triggers - [`first ⊢`](https://uiua.org/docs/first), [`first ⊢`](https://uiua.org/docs/first) [`reverse ⇌`](https://uiua.org/docs/reverse), [`rise ⍏`](https://uiua.org/docs/rise), and [`fall ⍖`](https://uiua.org/docs/fall) can now be used on scalars - Add the [`&exit`](https://uiua.org/docs/&exit) system function, which exits the program with a status code - Add the experimental [`&memcpy`](https://uiua.org/docs/&memcpy) system function, which copies the data from [`&ffi`](https://uiua.org/docs/&ffi) pointers to an array - Add the experimental [`&memfree`](https://uiua.org/docs/&memfree) system function, which frees memory allocated by [`&ffi`](https://uiua.org/docs/&ffi) functions - Add [`&tlsc`](https://uiua.org/docs/&tlsc) and [`&tlsl`](https://uiua.org/docs/&tlsl) system functions, which allow making TLS connections - [`&tlsc`](https://uiua.org/docs/&tlsc) replaces [`&httpsw`](https://uiua.org/docs/&httpsw), which is now deprecated - [`&tlsl`](https://uiua.org/docs/&tlsl) is currently experimental and mostly untested - [`&rs`](https://uiua.org/docs/&rs) will now attempt to read additional bytes to resolve a UTF-8 character - [`&gife`](https://uiua.org/docs/gif) and [`&gifs`](https://uiua.org/docs/&gifs) now support binary transparency - Signatures can now be specified in stack array notation immediately after a `[` or `{` - Change how long decimal numbers are formatted - Sequences of repeated digits are now replaced with `…` - Add argument documentation comments - You can read more about this in the new [Documenting Code](https://uiua.org/tutorial/documentation) tutorial - Add some useful shadowable constants for working with compile-time file paths - `ThisFile` - The relative path of the current source file - `ThisFileName` - The name of the current source file - `ThisFileDir` - The directory of the current source file - `WorkingDir` - The compile-time working directory - Deprecate function strands - They ended up making code less readable - Remove previously deprecated primitives: - `this ↬` - `recur ↫` - `all ⋔` - `cascade ⪾` - `bind λ` - `types` - `shapes` - Remove several backward compatible glyphs from the lexer - This frees up some glyphs that can now be used as function names ### Interpreter - Lots of optimizations - Optimize the pattern `/F⊞F` to use much less memory and be an order of magnitude faster in some cases - Optimize [`group ⊕`](https://uiua.org/docs/group) and [`partition ⊜`](https://uiua.org/docs/partition) with [`length ⧻`](https://uiua.org/docs/length), [`first ⊢`](https://uiua.org/docs/first), and [`first ⊢`](https://uiua.org/docs/first)[`reverse ⇌`](https://uiua.org/docs/reverse) - Optimize iterating modifiers with a top-level [`fork ⊃`](https://uiua.org/docs/fork) or [`bracket ⊓`](https://uiua.org/docs/bracket) - Optimize [`≡`](https://uiua.org/docs/rows)[`⋅`](https://uiua.org/docs/gap)`constant` and [`∵`](https://uiua.org/docs/each)[`⋅`](https://uiua.org/docs/gap)`constant` patterns - The speed improvement is on the order of 70x - Optimize the pattern `[⍥⚂…` - Optimize [`length ⧻`](https://uiua.org/docs/length) [`deduplicate ◴`](https://uiua.org/docs/deduplicate) - [`setinv`](https://uiua.org/docs/setinv) now emits a warning if the functions do not have opposite signatures - Add the `--io` flag to the `uiua fmt` command, which formats code from stdin to stdout - Lots of bug and crash fixes ### Website - Add a [Documenting Code](https://uiua.org/tutorial/documentation) tutorial - Add a [Files and Streams](https://uiua.org/tutorial/filesandstreams) tutorial - Add an [Experimental Features](https://uiua.org/docs/experimental) page - Rewrite the pad code to use a `