Skip to content

0.9.0

Compare
Choose a tag to compare
@github-actions github-actions released this 25 Feb 20:53
· 2618 commits to main since this release

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
    • 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
    • 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