Skip to content

Releases: uiua-lang/uiua

0.9.2

26 Feb 01:33
Compare
Choose a tag to compare

0.9.2 - 2024-02-25

Interpreter

  • Fix a bug involving patterns like °°[…]

0.9.0

25 Feb 20:53
Compare
Choose a tag to compare

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

0.8.0

31 Jan 16:18
Compare
Choose a tag to compare

0.8.0 - 2024-01-31

Language

  • Add the content ⊔ modifier, which unboxes its function's arguments before calling it
  • Add the unique ◰ function, which creates a mask of the first occurrence of each unique value in an array
    • Change deduplicate ◴'s glyph to reflect its relationship with unique ◰. Code using will continue to work and will be formatted as .
  • table ⊞ now works on rows of arrays but keeps it's optimizations for lists
    • You never wanted element-wise combinations of multi-dimensional arrays anyway
    • Deprecate cross ⊠, as it is now redundant
    • This is technically a breaking change, but it is unlikely to break much code
  • fill ⬚ can now be used to specify default accumulators for reduce /, group ⊕, and partition ⊜
    • Breaking Change - Reducing group ⊕ and partition ⊜ no longer take a required accumulator
    • Breaking Change - fill ⬚ can no longer be temporarily disabled. Try to scope it to the smallest function.
  • Breaking Change - Most non-pervasive monadic functions no longer implicitely unbox their argument
    • This impliciteness led to some unexpected behavior, particularly when getting the length ⧻ or shape △ of a boxed array
    • Exceptions are reverse ⇌ and transpose ⍉, which work on box elements without unboxing them
  • Unicode escape sequences that are not 2 or 4 bytes long can now be specified with \u{…}
  • Change pop ◌'s glyph to make it look good in planet notation. Code using ; will continue to work and will be formatted as .
  • un °reduce /multiply × now gives the prime factorization of a number
  • classify ⊛ and deduplicate ◴ now work with under ⍜
  • &fras and &frab now work with under ⍜
  • Completely remove the deprecated unbox ⊔
  • Add experimental hashmap functions, which operate on a box array as if it is a hashmap
  • Add experimental bind modifier, which binds local values within a function
    • This introduces some non-tacitness to the language

Interpreter

  • The internal byte array type is now used in more places, which should improve performance a bit
  • &ime and &imd now support the QOI image format
  • Lots of bug and crash fixes

Website

0.7.1

19 Dec 02:00
Compare
Choose a tag to compare
0.7.1 Pre-release
Pre-release

0.7.1 - 2023-12-18

Interpreter

  • Fix some bugs and crashes

0.7.0

16 Dec 06:16
Compare
Choose a tag to compare
0.7.0 Pre-release
Pre-release

0.7.0 - 2023-12-15

Language

  • An entire Uiua codebase is now compiled before it is executed, rather than compiling and executing line-by-line
  • Add the memo modifier, which memoizes a function
  • Add the comptime modifier, which runs a function at compile time
  • &i can now only be used as the first function in a binding
  • repeat can no longer use a negative number of repetitions
  • repeat can now be used with un ° and under
  • reshape now works with under
  • scan \ now works with un ° in some cases
  • setinv and setund are no longer experimental
  • Add output comments, which the formatter fills with values from the stack
    • Make an empty comment starting with n additional #s
    • The formatter will replace the comment with the top n values from the stack
    • Output comments in functions will show a number of values present on the stack for each time the function is called

Interpreter

  • LSP improvements
    • Add hover information on binding references
    • Add signatures to binding hover information
    • Add same-file binding rename support
    • Add same-file goto definition support
  • Add the uiua build command, which emits a .uasm bytecode file
  • uiua run can now run a .uasm bytecode file
  • uiua stand now embeds the bytecode assembly in the executable
  • Multiple compiler errors can now be emitted at once
  • Bug and crash fixes
  • Performance improvements

Website

  • Add an Inverses tutorial
  • Each tutorial challenge now contains 1 or 2 answers

0.6.1

07 Dec 18:19
Compare
Choose a tag to compare
0.6.1 Pre-release
Pre-release

0.6.1 - 2023-12-07

Interpreter

  • Make proxy values a little less leaky
  • Make placeholders work properly with both
  • Some other bug and crash fixes

0.6.0

07 Dec 01:51
Compare
Choose a tag to compare
0.6.0 Pre-release
Pre-release

0.6.0 - 2023-12-06

Language

  • fix ¤ now works with binary pervasive functions
    • This removes the need for some uses of rows and should be a bit faster
  • fill can now be disabled for a function by filling with an empty list
  • parse now has a glyph and is semi-pervasive
    • It was being used enough to warrant a glyph
  • sign ±, floor , ceiling , and round now work with under
  • Add some missing arithmetic inverses and unders involving flip :
  • Change pack's name to unpack , and it no longer implicitly boxes values (only unboxes them)
    • Implicit boxing could lead to unexpected and inconsistent behavior
  • Change invert's name and glyph to un °. Code using will continue to work and will be formatted as °.
    • ° is a nicer glyph, and un composes more nicely with the names of invertible functions
  • Deprecate unbox in favor of un ° box
    • It can still be typed the same way!
  • Deprecate reduce / with a monadic function
    • This created poorly-defined stack signatures that changed depending on the length of the array being reduced
    • un ° with stack array and planet notations, i.e. °[⊙⊙∘], can be used instead, as it has a well-defined signature
    • For operating on just part of an array, use under take , drop , or select
  • box ed arrays can once again be compared lexicographically

Interpreter

  • Make stack ? and dump output show call stack
  • Show type and shape information when pretty-printing empty arrays with rank 2 or greater
  • Improve language server hover information
  • Bug and crash fixes

Website

  • Add a token count to the editor (in settings)
  • Files can now be dragged into the editor to open them with &fras
  • &fld now works on the website

0.5.1

03 Dec 04:22
Compare
Choose a tag to compare
0.5.1 Pre-release
Pre-release

0.5.1 - 2023-12-02

Interpreter

0.5.0

03 Dec 00:37
Compare
Choose a tag to compare
0.5.0 Pre-release
Pre-release

0.5.0 - 2023-12-2

Language

  • invert and under now work with stack array notation.
  • Add the stack ? function, which debug-prints the entire stack
  • dump now works with invert and under
  • fill and pack are now exclusive
  • Change how regex works to be more powerful
  • Add special syntax for splitting/joining lines of code
    • ' will split a line without changing semantics
    • '' will combine two lines without changing semantics
  • The way pervasive functions work with box ed arrays is now more consistent
  • Remove reach, distribute, tribute, level, combinate, and all ocean functions for good

Interpreter

  • Add a style diagnostic about lines that are too long
  • Add some other style diagnostics
  • Replace uiua check-update with uiua update, which will update the interpreter by installing a new version with Cargo
  • Bug and crash fixes

Website

  • Multiline strings can now be toggled like comments with ctrl+4

0.4.1

30 Nov 21:19
Compare
Choose a tag to compare
0.4.1 Pre-release
Pre-release

0.4.1 - 2023-11-30

Interpreter

  • Fix a bug with nested custom modifiers