Uiua is not yet stable.
If you are reading this on the website, then these changes are live here.
- 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 inmin
⌊
andmax
⌈
- 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. There is a basic example in the tutorial. - 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