Releases
0.9.0
0.9.0 - 2024-02-25
Language
Breaking Change - repeat ⍥
with infinity ∞
now does a fixed-point iteration rather than an infinite loop
You can still do an infinite loop with do ⍢
(…)1
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 ∞
Breaking Change - &ad
and &imd
now return an encoding format as a string in addition to the media data
They are also now deprecated in favor of using un °
with &ae
or &ime
Overhaul the module system
Details can be found in the updated Modules tutorial
Deprecate &i
, as it is no longer necessary
Enabling experimental allows a module path of the form git: <repo url>
to load a module from a git repository
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 common fork ⊃
pattern in a more readable way
join ⊂
can now be used with under ⍜
This only works when the joined arrays have different ranks
join ⊂
can now be used with un °
to separate the first row of an array from the rest
try ⍣
'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
fill ⬚
can now match the lengths of inputs to rows ≡
Add recursion via refering to a binding's name within its body
Extend some math functions to work with characters
range ⇡
can now be used with negative numbers
eta η
, pi π
, tau τ
and infinity ∞
are now parsed as numbers rather than functions
This lets them syntactically bind with ¯
or form fraction literals
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 with inventory ⍚
. Code using ⊔
will continue to work and will be formatted as ◇
.
content ◇
can now be used with under ⍜
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 for fork ⊃
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 with under ⍜
This is only useful when pop ◌
is composed with other functions
Breaking Change - Flip the order of send
's arguments
Add the pool
modifier, which is identical to spawn
but spawns a thread in a thread pool
&rs
can now take a count of infinity ∞
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
Add the experimental signature
modifier, which returns the arguments and output of its function without calling it
Add the experimental &ffi
system function, which allows calling functions from shared libraries
FFI is still a work in progress, but it is currently useful for foreign functions that aren't too complex
Bindings for Raylib are being worked on as a proof of concept. You can find them in the rayua repository.
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
Add experimental shapes
and types
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
Interpreter
Lots of bug and crash fixes
Lots of performance improvements and optimizations
Optimize the pattern for adjacency: ≡
/
F
◫
It is as much as 800x faster in some cases
Optimize ≡
/
Square matrices are now transposed in-place
..and more
Numbers that seem to have a floating-point epsilon rounding error will be output with the epsilon noted
Language Server
Add completions
Add diagnostics
Add semantic highlighting
Add inline function hovering
Show un °
/under ⍜
compatibility for user-defined functions
Website
You can’t perform that action at this time.