Releases: uiua-lang/uiua
Releases · uiua-lang/uiua
0.12.0-dev.2
You can find the working changelog here.
0.12.0-dev.1
You can find the working changelog here.
0.11.1
0.11.1 - 2024-06-06
Interpreter
- Some bug and crash fixes
0.11.0
0.11.0 - 2024-06-02
You can find the release announcement here.
Language
- Breaking Change -
un °
fix ¤
now does pattern matching - Breaking Change -
un °
on ⟜
now does pattern matching in some cases- This makes its bevahior 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 ▽
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 ⬚
values are no longer accessible through function calls - Stabilize
by ⊸
! - Stabilize
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 ¤
the corresponding value - The
λ
formats from'
when it is in front of the letters
- Swizzles are written with a
- Add experimental array swizzles, which allow extracting rows from an array in a concise way
keep ▽
now works withun °
- It splits an array into counts and an adjacent deduplication
- Add the
json
function, which encodes and decodes JSON strings - Add the
xlsx
function, which encodes and decodes XLSX data bits ⋯
can now take negative numbersun °
bits ⋯
can now take non-booleans- Add
un °
duplicate .
pattern matching - Add
un °
min ↧
andun °
max ↥
pattern matching insert
can now be used withun °
to extract a map entry and pattern match itfill ⬚
edkeep ▽
's fill value may now be a listinfinity ∞
can now be passed in a list totake ↙
ordrop ↘
to take/drop every row along an axisreduce /
can now take a function with more than 2 arguments- Each additional argument increases the number of arguments passed to
reduce /
by 1 - Additional arguments are passed to the function on every iteration
- Each additional argument increases the number of arguments passed to
try ⍣
signature checking is now more permissive- Switch function signature checking is now more permissive with branches that have an
assert ⍤
that always triggers first ⊢
,first ⊢
reverse ⇌
,rise ⍏
, andfall ⍖
can now be used on scalars- Add the
&exit
system function, which exits the program with a status code - Add the experimental
&memcpy
system function, which copies the data from&ffi
pointers to an array - Add the experimental
&memfree
system function, which frees memory allocated by&ffi
functions - Add
&tlsc
and&tlsl
system functions, which allow making TLS connections &rs
will now attempt to read additional bytes to resolve a UTF-8 character- [
&gife
] and [&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
…
- Sequences of repeated digits are now replaced with
- Add argument documentation comments
- You can read more about this in the new Documenting Code tutorial
- Add some useful shadowable constants for working with compile-time file paths
ThisFile
- The relative path of the current source fileThisFileName
- The name of the current source fileThisFileDir
- The directory of the current source fileWorkingDir
- 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 compatibile 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 ⊕
andpartition ⊜
withlength ⧻
,first ⊢
, andfirst ⊢
reverse ⇌
- Optimize iterating modifiers with a top-level
fork ⊃
orbracket ⊓
- Optimize
≡
⋅
constant
and∵
⋅
constant
patterns- The speed improvement is on the order of 70x
- Optimize the pattern
[⍥⚂…
- Optimize
length ⧻
deduplicate ◴
- Optimize the pattern
setinv
now emits a warning if the functions do not have opposite signatures- Add the
--io
flag to theuiua fmt
command, which formats code from stdin to stdout - Lots of bug and crash fixes
Website
- Add a Documenting Code tutorial
- Add a Files and Streams tutorial
- Add an Experimental Features page
- Rewrite the pad code to use a
<textarea>
rather than acontenteditable
<div>
- This should make it work better in more browsers, especially on mobile
- You can now ctrl+click on a glyph in the editor to open its documentation
0.10.3
0.10.3 - 2024-04-09
Interpreter
- Fix a crash involving pervasive operations on some 0-length arrays
0.10.2
0.10.1
0.10.0
0.10.0 - 2024-04-04
You can find the release announcement here.
Language
- 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
Interpreter
- 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
Website
- 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