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