Uiua is not yet stable.
- Fix a bug in
repeat ⍥
withinfinity ∞
signature inference
under ⍜
of pattern matching now works correctlyunder ⍜
un °
scan \\
now works correctly- Style and advice diagnostics are no longer emitted from macros
You can find the release announcement here.
- Breaking Change - Multiline strings are now also raw strings which do not require escaping
- They are no longer format strings by default
- Raw strings can be made format strings with an extra
$
, i.e.$$ …
- Breaking Change -
try ⍣
's handler function is now passed the original arguments before the error try ⍣
now works with function packs of more than 2 functions- This tries each function in the pack in order
- Switch functions now format to use
⟨⟩
brackets- This makes them easier to identify when reading
- It also allows switch functions to be used as modifier arguments without extra nesting
- Switch functions now work with
under ⍜
- Add pattern matching with
un °
- Constant values can now be inverted to form a function which errors if the top value on the stack does not match
- Format strings can be inverted to extract substrings
- Read more in the new Pattern Matching tutorial
- Git modules are no longer experimental
- Modules are added automatically as Git submodules when imported
- See the Modules tutorial for more information
map
and related functionsinsert
,has
,get
, andremove
are no longer experimental- Add the
mask ⦷
function, which creates a mask of occurrences of one array in another- This works similarly to
find ⌕
, but is better when you need a mask or to distinguish between adjacent occurrences
- This works similarly to
- Change
sine ∿
's glyph∿
is more representative of what it does- Most circle glyphs like
○
are used for array functions or stack manipulation ○
will continue to work and will be formatted as∿
under ⍜
join ⊂
now works with arrays of the same rank as long as the row count does not changeun °
scan \\
now works withequals =
andnot equals ≠
group ⊕
can now take multidimensional index arrayspartition ⊜
can now take multidimensional marker arraysunder ⍜
select ⊏
andpick ⊡
now work with duplicate indices if the values at those indices are the samerotate ↻
now works through boxesfold ∧
now works withunder ⍜
if its function doesinventory ⍚
can now take 3 or more arraysrepeat ⍥
can now take non-scalar repetition counts- This repeats the function a different number of times for each row of the inputs
select ⊏
can now be used withun °
to separate intoclassify ⊛
anddeduplicate ◴
- Characters can now be
multiply ×
d ordivide ÷
d by numbers to possibly toggle their case - Add the
csv
function, which encodes and decodes CSV data - Add the
&clget
and&clset
system functions, which allow copying and pasting text to and from the system clipboard - Add more shadowable constants
- Importing modules that use the
# Experimental!
comment now requires the# Experimental!
comment in the importing file - Doc comments may now be placed at the end of single-line functions
- Non-alphabetic identifiers can now be suffixed with
!
to make macros - Add
df
,ddf
, etc shortcuts fordip ⊙
fix ¤
- Existing macros are now called "stack macros" to distinguish them from the new "array macros"
- Stack macros are now hygienic
- Add array macros, which allow code to be generated and manipulated at compile time as strings
- These are specified with a
^
immediately following a binding's arrow - They are documented in the Macros tutorial
- These are specified with a
un °
pop ◌
can now be used to retrieve thefill ⬚
value- See more details in
fill ⬚
's documentation
- See more details in
- Add the wildcard constant
W
, which matches any number, and@\W
, which matches any character - Add the experimental
coordinate ⟔
function, which searches an array for a value and returns a multidimensional indexcoordinate ⟔
is topick ⊡
asindexof ⊗
is toselect ⊏
- Experimental function strands now use the
‿
character, which formats from__
- Add the experimental
by ⊸
modifier, which duplicates a function's last argument before calling it - Add the experimental
quote
modifier, which converts a string to code at compile time- This is useful in array macros
- Add
# No inline!
semantic comment, which prevents a function and its callers from being inlined- This enables better stack traces on errors
- Deprecate
bind
- Deprecate
deal
- It is rarely used and easy to express with other functions
- Deprecate experimental
shapes
andtypes
modifiers in favor of pattern matching - Remove
cross ⊠
for good - Remove
unpack ⊐
for good - Remove
rectify ⌅
for good - Remove
&i
for good - Make
reduce /
with a monadic function a hard error
- Code is now analyzed for purity
- All pure top-level expressions will attempt to evaluate at compile time
- All fragments of code that are pure and have a signature
|0.n
will be evaluated at compile time
- Add lots of LSP features
- Find references
- Rename is now cross-file
- On-type formatting (can be toggled in settings)
- Inlay hints (each can be toggled in settings)
- Binding function signatures
- Inline function signatures
- Values of top-level expressions
- Code actions
- Macro expansion
- Remove output comment
- Convert between strand and array syntax
- Completions
- Shadowable constants
- Module items when the module reference is partially typed
- Add the
--file <file>
option to theuiua repl
command- This runs a file before starting the REPL
- Improve the supported binding type coverage of
&ffi
- Add warnings for when a loop in an array may have a variable signature
- Various performance improvements
- Optimize and multithread
⊞(/+×)
, which is a common component of matrix multiplication
- Optimize and multithread
- Lots of bug and crash fixes
- Tutorials
- Add a Working with Strings tutorial
- Add array macros to the Macros tutorial
- Add the Pattern Matching tutorial
- Add some modifier compatibility tables to documentation
- Hide experimental glyphs in the editor by default
- They can be toggled on in the settings
- An
# Experimental!
comment can now be easily inserted via a settings button or withCtrl+E
- Add horizontal scrolling to pad output
- Pad tabs are now given titles according to their contents
- The pad now renders strings that are SVG as images
- Add a pad setting for autoplaying audio
- Fix a crash in
each ∵
of 3 or more arrays
- Fix a major bug with negative
take ↙
- Fix a bug involving patterns like
°°[…]
- Improve Rust library API for getting bindings' values
- Breaking Change -
repeat ⍥
withinfinity ∞
now does a fixed-point iteration rather than an infinite loop- You can still do an infinite loop with
do ⍢
(…)1
- You can still do an infinite loop with
- Breaking Change -
reshape ↯
with a shape with negative dimensions now reverses that axis rather than acting as a "fill" value- The "fill" behavior can still be achieved by setting an axis to
infinity ∞
- The "fill" behavior can still be achieved by setting an axis to
- Breaking Change -
&ad
and&imd
now return an encoding format as a string in addition to the media data - Overhaul the module system
- Custom modifiers are now called "macros"
- Rather than requiring signatures, placeholders are now a sort of function that operates on the macro's arguments
- This allows for more complex and flexible code-reuse
- Existing code should continue to work. Existing placeholders will be formatted into the new syntax.
- You can read more about macros in the updated Macros tutorial
- Add the
on ⟜
modifier, which captures a commonfork ⊃
pattern in a more readable way join ⊂
can now be used withunder ⍜
- This only works when the joined arrays have different ranks
join ⊂
can now be used withun °
to separate the first row of an array from the resttry ⍣
's handler's function signature is now more flexible- This makes it easier to either provide a default value, process the error itself, or do something different with the inputs
- A
fill ⬚
value set outside a looping modifier will now no longer be available inside the loop- This should make it easier to scope
fill ⬚
correctly
- This should make it easier to scope
fill ⬚
can now match the lengths of inputs torows ≡
- Add recursion via refering to a binding's name within its body
- Extend some math functions to work with characters
sign ±
gets the case of a characterabsolute value ⌵
uppercases a characternegate ¯
toggles the case of a character
range ⇡
can now be used with negative numberseta η
,pi π
,tau τ
andinfinity ∞
are now parsed as numbers rather than functions- This lets them syntactically bind with
¯
or form fraction literals
- This lets them syntactically bind with
- Add the
inventory ⍚
modifier, which iterates over the unboxed items of an array and re-boxes the results- This shortens a lot of box array code
- Change
content ◇
's glyph to reflect its relationship withinventory ⍚
. Code using⊔
will continue to work and will be formatted as◇
. content ◇
can now be used withunder ⍜
if its function does- Macros with 2 or more arguments can now use
‼
at the end of their names. Macro names with any combination of!
and‼
will be automatically parsed and formatted as‼
s followed by one!
if necessary. f
can now be used at the beginning of planet notation shorthand forfork ⊃
- Inline functions are no longer required to be in a binding or modifier
- This allows arbitrary code to be wrapped and marked with a signature
- Remove cosine and arccosine optimizations
- The inverse of the cosine idiom created a logical inconsistency
pop ◌
can now be used withunder ⍜
- This is only useful when
pop ◌
is composed with other functions
- This is only useful when
- Breaking Change - Flip the order of
send
's arguments - Add the
pool
modifier, which is identical tospawn
but spawns a thread in a thread pool &rs
can now take a count ofinfinity ∞
to read until the end of the stream- Add the
&runs
system function, which runs a command and returns an IO stream handle - Add the experimental
stringify
modifier, which turns its function into a string without calling it- This is useful in macros
- Add the experimental
signature
modifier, which returns the arguments and output of its function without calling it- This is useful in macros
- Add the experimental
&ffi
system function, which allows calling functions from shared libraries - Add experimental function strands. Putting a
_
between two functions (or a function and a constant), is equivalent to putting them in()
s- This is experimental because it remains to be seen how this may affect readability
- Add experimental labels, denoted by a
$
immediately followed by an identifier, which attach a name to an array. This has two uses:- Labels are visible in output and in
stack
diagnostics - Labels in code make it easier to understand when reading
- Labels are visible in output and in
- Add experimental
shapes
andtypes
modifiers, which validate the shape and type of an array or arrays- These both check array properties at runtime and serve as a form of documentation
&var
now throws an error if the variable is not found- Deprecate
pop ◌
formatting from;
- Deprecate
all ⋔
- It was rarely used and was hard to reason about
- Add an experimental
repr
function that produces a string representation of a value in a format that can be read by the interpreter
- Lots of bug and crash fixes
- Lots of performance improvements and optimizations
- Numbers that seem to have a floating-point epsilon rounding error will be output with the epsilon noted
- Language Server
- Add Tutorial Introduction
- Add primitives.json for use with tooling
- Tutorials are now in a
/tutorial
route instead of/docs
- Add the
content ◇
modifier, which unboxes its function's arguments before calling it - Add the
unique ◰
function, which creates a mask of the first occurrence of each unique value in an array- Change
deduplicate ◴
's glyph to reflect its relationship withunique ◰
. Code using⊖
will continue to work and will be formatted as◴
.
- Change
table ⊞
now works on rows of arrays but keeps it's optimizations for lists- You never wanted element-wise combinations of multi-dimensional arrays anyway
- Deprecate
cross ⊠
, as it is now redundant - This is technically a breaking change, but it is unlikely to break much code
fill ⬚
can now be used to specify default accumulators forreduce /
,group ⊕
, andpartition ⊜
- Breaking Change - Reducing
group ⊕
andpartition ⊜
no longer take a required accumulator - Breaking Change -
fill ⬚
can no longer be temporarily disabled. Try to scope it to the smallest function.
- Breaking Change - Reducing
- Breaking Change - Most non-pervasive monadic functions no longer implicitely unbox their argument
- This impliciteness led to some unexpected behavior, particularly when getting the
length ⧻
orshape △
of a boxed array - Exceptions are
reverse ⇌
andtranspose ⍉
, which work on box elements without unboxing them
- This impliciteness led to some unexpected behavior, particularly when getting the
- Unicode escape sequences that are not 2 or 4 hex digits long can now be specified with
\u{…}
- Change
pop ◌
's glyph to make it look good in planet notation. Code using;
will continue to work and will be formatted as◌
. un °
reduce /
multiply ×
now gives the prime factorization of a numberclassify ⊛
anddeduplicate ◴
now work withunder ⍜
&fras
and&frab
now work withunder ⍜
- Completely remove the deprecated
unbox ⊔
- Add experimental hashmap functions, which operate on a box array as if it is a hashmap
- Add experimental
bind
modifier, which binds local values within a function- This introduces some non-tacitness to the language
- The internal byte array type is now used in more places, which should improve performance a bit
&ime
and&imd
now support the QOI image format- Lots of bug and crash fixes
- Add a new tutorial: Thinking With Arrays
- Fix some bugs and crashes
- An entire Uiua codebase is now compiled before it is executed, rather than compiling and executing line-by-line
- Add the
memo
modifier, which memoizes a function - Add the
comptime
modifier, which runs a function at compile time &i
can now only be used as the first function in a bindingrepeat ⍥
can no longer use a negative number of repetitionsrepeat ⍥
can now be used withun °
andunder ⍜
reshape ↯
now works withunder ⍜
scan \
now works withun °
in some casessetinv
andsetund
are no longer experimental- Add output comments, which the formatter fills with values from the stack
- Make an empty comment starting with
n
additional#
s - The formatter will replace the comment with the top
n
values from the stack - Output comments in functions will show a number of values present on the stack for each time the function is called
- Make an empty comment starting with
- LSP improvements
- Add hover information on binding references
- Add signatures to binding hover information
- Add same-file binding rename support
- Add same-file goto definition support
- Add the
uiua build
command, which emits a.uasm
bytecode file uiua run
can now run a.uasm
bytecode fileuiua stand
now embeds the bytecode assembly in the executable- Multiple compiler errors can now be emitted at once
- Bug and crash fixes
- Performance improvements
- Add an Inverses tutorial
- Each tutorial challenge now contains 1 or 2 answers
- Make proxy values a little less leaky
- Make placeholders work properly with
both ∩
- Some other bug and crash fixes
fix ¤
now works with binary pervasive functions- This removes the need for some uses of
rows ≡
and should be a bit faster
- This removes the need for some uses of
fill ⬚
can now be disabled for a function by filling with an empty listparse ⋕
now has a glyph and is semi-pervasive- It was being used enough to warrant a glyph
sign ±
,floor ⌊
,ceiling ⌈
, andround ⁅
now work withunder ⍜
- Add some missing arithmetic inverses and unders involving
flip :
- Change
pack
's name tounpack ⊐
, and it no longer implicitly boxes values (only unboxes them)- Implicit boxing could lead to unexpected and inconsistent behavior
- Change
invert
's name and glyph toun °
. Code using⍘
will continue to work and will be formatted as°
.°
is a nicer glyph, andun
composes more nicely with the names of invertible functions
- Deprecate
unbox ⊔
in favor ofun °
box □
- It can still be typed the same way!
- Deprecate
reduce /
with a monadic function- This created poorly-defined stack signatures that changed depending on the length of the array being reduced
un °
with stack array and planet notations, i.e.°[⊙⊙∘]
, can be used instead, as it has a well-defined signature- For operating on just part of an array, use
under ⍜
take ↙
,drop ↘
, orselect ⊏
box □
ed arrays can once again be compared lexicographically
- Make
stack ?
anddump
output show call stack - Show type and shape information when pretty-printing empty arrays with rank 2 or greater
- Improve language server hover information
- Bug and crash fixes
- Add a token count to the editor (in settings)
- Files can now be dragged into the editor to open them with
&fras
&fld
now works on the website
- Fix
stack ?
signature
invert ⍘
andunder ⍜
now work with stack array notation.- Add the
stack ?
function, which debug-prints the entire stack dump
now works withinvert ⍘
andunder ⍜
fill ⬚
andpack ⊐
are now exclusive- Change how
regex
works to be more powerful - Add special syntax for splitting/joining lines of code
'
will split a line without changing semantics''
will combine two lines without changing semantics
- The way pervasive functions work with
box □
ed arrays is now more consistent - Remove
reach
,distribute
,tribute
,level
,combinate
, and all ocean functions for good
- Add a style diagnostic about lines that are too long
- Add some other style diagnostics
- Replace
uiua check-update
withuiua update
, which will update the interpreter by installing a new version with Cargo - Bug and crash fixes
- Multiline strings can now be toggled like comments with ctrl+4
- Fix a bug with nested custom modifiers
windows ◫
can now take negative window sizes- Add an experimental distinction for some functions/modifiers
- Experimental features are opt-in and must be enabled by putting an
# Experimental!
comment at the top of a file
- Experimental features are opt-in and must be enabled by putting an
- Add the experimental
all ⋔
modifier, which is a variadic generalization ofboth ∩
- Add the experimental
rectify ⌅
modifier, which sets a function's inverse to itself - Add the experimental
setinv
modifier, which sets the inverse of a function - Add the experimental
setunder
modifier, which sets theunder ⍜
-compatible inverse of a function - Add the experimental
this ↬
modifier, which sets a function to recur to - Add the experimental
recur ↫
modifier, which calls a function recursively - Allow custom modifiers to use switch function syntax
sign ±
now normalizes complex numbers- Change
type
mapping - Deprecate
reach ⟜
- Fix some bugs and crashes
- Improve some formatting with multiline functions and switch functions
identity ∘
no longer formats from()
- Allow
uiua <file> [args]
as a shortcut foruiua run <file> [args]
- Allow disabling autorun for pad links
- Fix some bugs and crashes
- Big Change
- Deprecate all ocean functions
- Deprecate
level ≑
andcombinate ◳
- Deprecate
tribute ≐
anddistribute ∺
fold ∧
no longer takes a rank list
- Add the
rerank ☇
function, which changes the rank of an array's rows- This fills the void left by
level ≑
andcombinate ◳
- This fills the void left by
- Add the
fix ¤
function, which adds a length 1 axis to an array rows ≡
now repeats the rows of an arrays that have exactly 1 row- This in combination with
fix ¤
fills the void left bytribute ≐
anddistribute ∺
- This in combination with
cross ⊠
can now take more than 2 arguments- Switch functions are now less strict about branch signature compatibility and can take arrays as conditions
- A single switch function can now be used as a list of functions for dyadic modifiers
- Remove
if ?
, as all its use cases are now covered by switch functions. It will continue to parse, but?ab
will be formatted as(b|a)
flip :
's glyph is now just a colon (it wasRATIO ∶
)under ⍜
now works withabsolute value ⌵
- Remove
break ⎋
for good
- Lots of bug and crash fixes
- Lots of performance improvements
- Update the Advanced Array Manipulation Tutorial to reflect the changes in this version
under ⍜
withtake ↙
anddrop ↘
is now less strict about shape/rank changesrange ⇡
called on a list of 0 or 1 values is now more consistentfill ⬚
now works withrotate ↻
to give non-wrapping behaviorfill ⬚
now works withfind ⌕
if the searched-for array is longer than the array being searchedparse
now works withinvert ⍘
andunder ⍜
- The output of
find ⌕
is now the same shape as the array being searched
- Fix a bunch of bugs
- Several performance optimizations
transpose ⍉
is now much fasterdistribute ∺
andtribute ≐
are now much faster if their function is a pervasive built-in- Some other functions are also a bit faster
- Hold shift when copying a link to copy a Markdown link
- Add embeddable editor. Replace the
pad
in pad links withembed
orembedpad
.
- Add complex numbers, which can be created with the
complex ℂ
function - Add the
do ⍢
modifier, which repeatedly calls a function as long as a condition holds - Deprecate
break ⎋
- Add multi-dimensional
where ⊚
join ⊂
to an empty list now always works regardless of rank of the other arrayeach ∵
androws ≡
now work withunder ⍜
- All ocean functions now work with
under ⍜
- Allow multiple values to be returned from
each ∵
,rows ≡
,distribute ∺
,tribute ≐
,table ⊞
, andcross ⊠
invert ⍘
atangent ∠
now produces the sine and cosine of an angle&i
now treats paths as relative to the file calling it rather than the current working directory- Rank list functions for the rank-generic modifiers can now take any number of arguments. For any number of aguments greater that 0, an empty numeric list will be pushed before the function is called.
- Add fraction literals with
/
- Parsing multiple formattable functions from words is now smarter
- Remove
bind '
. It made code hard to read. It will continue to parse, but will be formatted as(…)
- Add the
uiua stand
command, which creates a standalone executable
- Add Optimizations page
- Add Images and GIFs tutorial
- Fix a bug with watch mode
- Add the
reach ⟜
modifier, which removes the second value from the stack and calls its function. - Change how short spellings of
dip ⊙
,gap ⋅
, andidentity ∘
work- Instead of allowing them to be spelled with 2 characters, they can now be spelled with 1 character as long as there are at least 2 in the sequence.
- If present,
'i'
may only come last. reach ⟜
is included.
- Add 2-letter spellings of
deep ≊
,abyss ≃
, andseabed ∸
to make them consistent withrock ⋄
.
- Fix a bunch of bugs and crashes
- The formatter now indents bindings that start with a bound function that starts with
&i
- The native interpreter no longer automatically checks for updates. You can still check manually with
uiua update?
.
- Add challenges to the end of tutorial sections
- Make the introductory examples on the main page less esoteric
- Update the Advanced Stack Manipulation Tutorial to include
reach ⟜
- The Uiua Rust crate is now fully documented and has a decent API
- Implement
under ⍜
multi-indexpick ⊡
- Implement
under ⍜
partition ⊜
- Implement
under ⍜
group ⊕
- Add
send
,recv
, andtryrecv
functions for sending values between threads - Add
&fde
and&ftr
system functions for deleting/trashing files and directories under ⍜
with system functions that return stream handles calls&cl
as an inverse- Add the
&raw
system function for setting the terminal to raw mode - Add the
&gifd
system function for decoding GIFs
- The interpreter now formats its own diagnostic messages instead of delegating to a library
- Fix a bunch of bugs and crashes
- Add
uiua repl
command - Optimize (
⊢
⍏
), (⊢
⇌
⍏
), (⊢
⍖
), and (⊢
⇌
⍖
) to be O(n) instead of O(nlogn) - Optimize (
⊢
⊚
) to not materialize the indices array
&ast
now works on the website by generating a fixed amount of audio- How long the generated audio is can be configured in the editor settings
- Error and diagnostic messages are no-longer all one color
- The pad editor now inserts a trailing newline on format
- Increase thresholds for arrays automatically becoming images or audio
- Split up system functions into more categories on the main docs page
- The bell character
@\b
now plays a sound if printed with&p
or&pf
- The GitHub Discussions are now open!
- Custom modifier placeholders (
^
) must now be immediately followed by a signature. This reduces the number of signatures that have to be declared everywhere else.
- Massive Change - Functions are no longer first-class values. This has many implications:
- Functions can no longer be put in arrays or manipulated as stack values
- Inline functions can now only appear as modifier arguments or bindings
call !
has been removed, as there is nothing on the stack to call- Modules have been reworked.
&i
now handles both loading a module from a file and importing items from that module. ---
scopes are now test scopes.~~~
scopes have been removed.- Remove
use
, as it is no longer necessary - Boxes still work as normal, but are now their own type distinct from functions
- Remove
sig
, as everything that can be on the stack now has the same signature
- Add new syntax for defining custom modifiers
- Add new syntax for calling a function from a list of functions
- Add the
pack ⊐
modifier, which calls its function and implicitly boxes/unboxes values - Add the
combinate ◳
modifier, which is a rank-generic version oftable ⊞
fold ∧
is now rank-generic and requires a rank list- Add the
tribute ≐
modifier, which is a flipped version ofdistribute ∺
- Change
level ≑
's glyph to reflect its relationship witheach ∵
,rows ≡
,distribute ∺
, andtribute ≐
. Code using⍚
will continue to work and will be formatted as≑
. - Add
rock ⋄
,surface ~
,deep ≊
,abyss ≃
, andseabed ∸
, which build rank lists to be used withlevel ≑
and the new rank-generic modifiers - Change
trace ⸮
's glyph to letsurface ~
use~
. - Change
match ≍
's glyph to avoid confusion with the new ocean functions' glyphs. Code using≅
will continue to work and will be formatted as≍
. - Stack signatures found to be incorrect at runtime produce an error
- Dyadic math operations now work with
under ⍜
even if both arguments are outsideunder ⍜
's function - Some mathematical functions that previously did not work with
invert ⍘
andunder ⍜
when accompanied byflip :
now do
- Add 3 new tutorials
- The orientation of stack values in the output can be flipped in the settings
- Add
regex
function for matching regular expressions - Add
utf
function for UTF-8 encoding and decoding - Add
&invk
system function for invoking a path to be opened with the system's default program fill ⬚
can now be used withfirst ⊢
- Most functions that expect strings as arguments will now dig arbitrarily deep into boxes
- Make
if ?
signature checking more permissive - The presence of
break ⎋
in arepeat ⍥
always requires a stack signature - The
&runi
and&runc
functions now return exit codes - Multiline string now only insert
\n
at the end of each line instead of\r\n
- Bugfixes and performance improvements
- Add a page listing common stack idioms
- Add
under ⍜
both ∩
- Remove
restack ⇵
for good - Remove
roll ↷
andunroll ↶
for good @\s
can now be used in addition to@
to get a space character
- Many performance improvements and memory usage reductions
- Many bug and crash fixes
- Add some additional style diagnostics
- Add more semantic token types to the language server
- Stop using deprecated MarkedString in the language server
- The editor's font size can now be changed
- Improve brackets/quotes behavior in the editor
- HTML is now properly escaped in the editor
- Formatting can now put the cursor to the left of the current token (toggleable in the settings)
- Major Change
distribute ∺
now takes the array being distributed as its last argument, rather than its first - Add
where ⊚
function, which returns the indices of an array that have non-zero values if ?
's branches can now have a different number of arguments (but not outputs)if ?
's condition can now be a list of conditions, and the branch will be chosen for each row in the argument(s)- The reducing versions of
group ⊕
andpartition ⊜
now take accumulators. Aggregating versions are unchanged. spawn
andwait
no longer have glyphs. Code using↰
and↲
will continue to work and will be formatted asspawn
andwait
.&n
is no longer a system function and is now callednow
under ⍜
now
can be used to time thingscall !
can now call functions that return any number of values, not just one- Add hex character escape sequences for string and character literals.
\xNN
for short ASCII codes\uNNNN
for full Unicode sequences
- The formatter now aligns consecutive end-of-line comments
NaN
s no longer propogate inminimum ⌊
andmaximum ⌈
- Fix a bug that prevented
under ⍜
multidimensionaltake ↙
anddrop ↘
from working - Fix a bug in how
fold ∧
ordered multiple accumulators - Fix a bug that allowed incorrect signatures to be declared for functions
- Fix a bunch of other bugs and crashes
- Add the Uiua386 font as an option in the editor
- Add GIF encoding with
&gife
- Rename
constant
tobox □
. - Add
unbox ⊔
, which unboxes a boxed array - Major Change: Some uses of
call !
will no longer compile without declaring a stack signature. When unboxingbox □
ed arrays, you can useunbox ⊔
instead, which has a well-defined signature. - Add
fall ⍖
function, which gives the indices of the array if it were sorted descending - Change
grade ⌂
name and glyph torise ⍏
to reflect its relationship withfall ⍖
. Code using⌂
will continue to work and will be formatted as⍏
. try ⍣
now puts arguments to its first function above the error value when calling the error handlerfold ∧
can now use multiple accumulators- Improve
dump
output formatting dump
is now a monadic modifier. Its function preprocesses each value before dumping it.- Add the
sig
function, which returns the stack signature of a value - A negative dimensions in the shape passed to
reshape ↯
can now be in any position, not just the first or last - Functions with ASCII glyphs now also format from their names
- Add a advice diagnostic about the captialization of binding names
- Add GIF output
- Execution time limit is now 2 seconds by default but can be customized
- Fix a crash and a bug that could occur when creating nested arrays that pull in values.
This version changes a lot of glyphs. If you are coming from the previous version, most of the old glyphs will be automatically formatted to the new ones. The only change you may need to make is replacing all ^
s with |
s.
You may want to read the new version of the Advanced Stack Manipulation Tutorial to understand the reason for so many of these changes.
- Add the
bracket ⊓
modifier, which calls two functions each on different arguments - Change
fill ⬚
's glyph to reflect its relationship withbox □
. Code using⍛
with continue to work and will be formatted as⬚
. - Change
share ⇉
name and glyph tofork ⊃
. Code using⇉
will continue to work and will be formatted as⊃
. - Change
noop ·
name and glyphs toidentity ∘
to reflect its relationship withgap ⋅
anddip ⊙
. Code using·
will continue to work and will be formatted as∘
. - Change
identity ∘
's signature from|0.0
to|1.1
- Add the
gap ⋅
modifier, which discards a value then calls its function. It is mainly intended to be used withfork ⊃
. - Change
dip ⊙
's glyph to reflect its relationship withgap ⋅
andidentity ∘
. Code using→
will continue to work and will be formatted as⊙
. - Change
both ∩
's glyph to reflect its relationship withfork ⊃
. Code using∷
will continue to work and will be formatted as∩
. distribute ∺
now works with any number of arguments. Only the first argument is distributed.fill ⬚
now works withreshape ↯
reshape ↯
now allow negative numbers to denote derived dimensions- Change the modifier termination character to
|
instead of^
- Remove old versions of
fork
andtrident
- Add the
&httpsw
function for making HTTPS requests
- Add formatter configuration options. See the readme for details.
- Checking for updates is less zealous, and can be disabled with the
--no-update
flag touiua run
oruiua watch
- Running code in the Pad editor updates the URL to prevent work from accidentally being lost
- Add the
share ⊃
modifier, which unifies and deprecatesfork ⊃
andtrident ∋
bind '
no longer calls its functions immediately. This should not change any reasonable existing code.- Change how
partition ⊜
andgroup ⊕
work with dyadic functions to be consistent withreduce /
- Deprecate
restack ⇵
. It was never a good idea. - Remove the overloaded behavior of
call !
. It no longer behaves like an if-else when used with a list of functions.- You can replace all existing instances of that use case with
!⊡:
- You can replace all existing instances of that use case with
- Add the
if ?
modifier, which calls one of two functions based on a condition
both ∩
can now be used with a function that takes any number of arguments.- Various bug and crash fixes
- Tell the user when the interpreter can be updated
- Add the
dip ⊙
modifier, which temporarily pops a value - Deprecate
roll↷
andunroll↶
- Add
under ⍜
keep ▽
- Add
dump
function, which prints the entire stack
- Remove the
|1.1
signature restriction forunder ⍜
's second function - Remove the rank
∴
function - Remove the restriction that all functions in a non-scalar function array all have the compatible signatures
- Whether a binding is a constant or a function is now independent of how many values are on the stack
- Add a system for non-error diagnostics
- Add advice about redundant uses of
each ∵
- Add advice about redundant uses of
- Allow passing
--no-format
touiua watch
&sc
now returns0
if EOF is input
&sc
now works on the website by showing a prompt
- Make binding names case-sensitive
- Add
^
syntax to terminate modifier parsing. - Add
&runi
and&runc
functions for running commands - Add
&cd
function for changing the current working directory - Add shadowable constants like
e
andos
- Change
trident ∋
argument order to make it easier to reason about - Enable
fill ⬚
forkeep ▽
if the amount list is shorter than the kept array
- Add
uiua eval
command which evaluates a Uiua expression and prints the result - Watch commands no longer try to open the file being watched
- Fix a bug that made numbers that were
≤ 1e-12 ⌵
format to0
- Make a space character
@
more visible by underlining the space - Improve cursor movement when formatting in the editor
- Add this changelog
- Add
trace ~
function- Debug-prints the value on top of the stack without popping it
- Shows the line and column number too
- Add
both ∩
modifier- This can change code like
/(|2 ⊂!:!:) {"a" "bc" "def"}
- To just
/'⊂∩! {"a" "bc" "def"}
- This can change code like
- Turn the term pair syntactic construct into a modifier called
bind '
- Fix some correctness bugs related to
under ⍜
andinvert
- Fix a crash when trying to reverse an empty array
- Add a right-to-left explanation page