Skip to content

Latest commit

 

History

History
828 lines (783 loc) · 60.3 KB

changelog.md

File metadata and controls

828 lines (783 loc) · 60.3 KB

Uiua Changelog

Uiua is not yet stable.

0.11.0 - 2024-06-??

This version is not yet released. If you are reading this on the website, then these changes are live 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 ⊸!
  • 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
  • Add experimental array swizzles, which allow extracting rows from an array in a concise way
    • Swizzles are written with a followed by a list of letters
    • Letters up to m start from the first row, Letters back from z start from the last row
    • Capital letters un box the corresponding value
    • The formats from '' when it is in front of the letters
  • keep ▽ now works with un °
    • It splits array into counts and an adjacent deduplication
  • Add the json function, which encodes and decodes JSON data
  • Add the xlsx function, which encodes and decodes XLSX data
  • bits ⋯ can now take negative numbers
  • un ° bits ⋯ can now take non-booleans
  • Add un ° duplicate . pattern matching
  • Add un ° min ↧ and un ° max ↥ pattern matching
  • insert can now be used with un ° to extract a map entry and pattern match it
  • fill ⬚ed keep ▽'s fill value may now be a list
  • infinity ∞ can now be passed in a list to take ↙ or drop ↘ to take/drop every row along an axis
  • reduce / 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
  • try ⍣ signature checking is now more permissive
  • Add the &exit system function, which exits the program with a status code
  • Add the &memcpy system function, which copies the data from &ffi pointers to an array
  • Add the &memfree system function, which frees memory allocated by &ffi functions
  • Add &tlsc and &tlsl system functions, which allow making TLS connections
    • These are currently experimental, but they will likely replace &httpsw
  • &rs will now attempt to read additional bytes to resolve a UTF-8 character
  • 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
  • Add argument documentation comments
  • Add some useful shadowable constants for working with compile-time file paths
    • ThisFile - The relative path of the current source file
    • ThisFileName - The name of the current source file
    • ThisFileDir - The directory of the current source file
    • WorkingDir - The compile-time working directory
  • 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
  • setinv now emits a warning if the functions do not have opposite signatures
  • Add the --io flag to the uiua fmt command, which formats code from stdin to stdout
  • Lots of bug fixes

Website

0.10.3 - 2024-04-09

Interpreter

  • Fix a crash involving pervasive operations on some 0-length arrays

0.10.2 - 2024-04-08

Interpreter

0.10.1 - 2024-04-07

Interpreter

  • under ⍜ of pattern matching now works correctly
  • under ⍜ un ° scan \\ now works correctly
  • Style and advice diagnostics are no longer emitted from macros

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 functions insert, has, get, and remove 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
  • 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 change
  • un ° scan \\ now works with equals = and not equals ≠
  • group ⊕ can now take multidimensional index arrays
  • partition ⊜ can now take multidimensional marker arrays
  • under ⍜ select ⊏ and pick ⊡ now work with duplicate indices if the values at those indices are the same
  • rotate ↻ now works through boxes
  • fold ∧ now works with under ⍜ if its function does
  • inventory ⍚ can now take 3 or more arrays
  • repeat ⍥ 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 with un ° to separate into classify ⊛ and deduplicate ◴
  • Characters can now be multiply ×d or divide ÷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 for dip ⊙ fix ¤
  • Existing macros are now called "stack macros" to distinguish them from the new "array macros"
  • 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
  • un ° pop ◌ can now be used to retrieve the fill ⬚ value
    • See more details in fill ⬚'s documentation
  • 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 index
  • 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
    • It undermines the priniciples of the language
    • It makes certain optimizations impossible
    • fill ⬚ and/or map can be used to achieve similar effects
  • Deprecate deal
    • It is rarely used and easy to express with other functions
  • Deprecate experimental shapes and types 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 the uiua 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
  • Lots of bug and crash fixes

Website

  • Tutorials
  • 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 with Ctrl+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

0.9.5 - 2024-02-28

Interpreter

  • Fix a crash in each ∵ of 3 or more arrays

0.9.4 - 2024-02-28

Interpreter

  • Fix a bug with filled multi-dimensional take ↙
  • Fix a crash in rows ≡ of 3 or more arrays

0.9.3 - 2024-02-27

Interpreter

  • Fix a major bug with negative take ↙

0.9.2 - 2024-02-25

Interpreter

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

0.9.1 - 2024-02-25

Crate

  • Improve Rust library API for getting bindings' values

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 - 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 hex digits 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 - 2023-12-18

Interpreter

  • Fix some bugs and crashes

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 - 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 - 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 - 2023-12-02

Interpreter

0.5.0 - 2023-12-02

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 - 2023-11-30

Interpreter

  • Fix a bug with nested custom modifiers

0.4.0 - 2023-11-30

Language

  • windows ◫ can now take negative window sizes
  • Add an experimental distinction for some functions/modifiers
    • Experimental features are opt-in and must be enabled by putting an # Experimental! comment at the top of a file
  • Add the experimental all ⋔ modifier, which is a variadic generalization of both ∩
  • Add the experimental rectify ⌅ modifier, which sets a function's inverse to itself
  • Add the experimental setinv modifier, which sets the inverse of a function
  • Add the experimental setunder modifier, which sets the under ⍜-compatible inverse of a function
  • Add the experimental this ↬ modifier, which sets a function to recur to
  • Add the experimental recur ↫ modifier, which calls a function recursively
  • Allow custom modifiers to use switch function syntax
  • sign ± now normalizes complex numbers
  • Change type mapping
  • Deprecate reach ⟜

Interpreter

  • Fix some bugs and crashes
  • Improve some formatting with multiline functions and switch functions
  • identity ∘ no longer formats from ()
  • Allow uiua <file> [args] as a shortcut for uiua run <file> [args]

Website

  • Allow disabling autorun for pad links

0.3.1 - 2023-11-20

Interpreter

  • Fix some bugs and crashes

0.3.0 - 2023-11-19

Language

  • Big Change
    • Deprecate all ocean functions
    • Deprecate level ≑ and combinate ◳
    • Deprecate tribute ≐ and distribute ∺
    • fold ∧ no longer takes a rank list
  • Add the rerank ☇ function, which changes the rank of an array's rows
    • This fills the void left by level ≑ and combinate ◳
  • Add the fix ¤ function, which adds a length 1 axis to an array
  • rows ≡ now repeats the rows of an arrays that have exactly 1 row
    • This in combination with fix ¤ fills the void left by tribute ≐ and distribute ∺
  • cross ⊠ can now take more than 2 arguments
  • Switch functions are now less strict about branch signature compatibility and can take arrays as conditions
  • A single switch function can now be used as a list of functions for dyadic modifiers
  • Remove if ?, as all its use cases are now covered by switch functions. It will continue to parse, but ?ab will be formatted as (b|a)
  • flip :'s glyph is now just a colon (it was RATIO ∶)
  • under ⍜ now works with absolute value ⌵
  • Remove break ⎋ for good

Interpreter

  • Lots of bug and crash fixes
  • Lots of performance improvements

Website

0.2.0 - 2023-11-09

Language

Interpreter

  • Fix a bunch of bugs
  • Several performance optimizations
    • transpose ⍉ is now much faster
    • distribute ∺ and tribute ≐ are now much faster if their function is a pervasive built-in
    • Some other functions are also a bit faster

Website

  • Hold shift when copying a link to copy a Markdown link
  • Add embeddable editor. Replace the pad in pad links with embed or embedpad.

0.1.0 - 2023-11-03

Language

  • Add complex numbers, which can be created with the complex ℂ function
  • Add the do ⍢ modifier, which repeatedly calls a function as long as a condition holds
  • Deprecate break ⎋
  • Add multi-dimensional where ⊚
  • join ⊂ to an empty list now always works regardless of rank of the other array
  • each ∵ and rows ≡ now work with under ⍜
  • All ocean functions now work with under ⍜
  • Allow multiple values to be returned from each ∵, rows ≡, distribute ∺, tribute ≐, table ⊞, and cross ⊠
  • invert ⍘ atangent ∠ now produces the sine and cosine of an angle
  • &i now treats paths as relative to the file calling it rather than the current working directory
  • Rank list functions for the rank-generic modifiers can now take any number of arguments. For any number of aguments greater that 0, an empty numeric list will be pushed before the function is called.
  • Add fraction literals with /
  • Parsing multiple formattable functions from words is now smarter
  • Remove bind '. It made code hard to read. It will continue to parse, but will be formatted as (…)

Interpreter

  • Add the uiua stand command, which creates a standalone executable

Website

0.0.25 - 2023-10-29

Interpreter

  • Fix a bug with watch mode

0.0.24 - 2023-10-29

Language

  • Add the reach ⟜ modifier, which removes the second value from the stack and calls its function.
  • Change how short spellings of dip ⊙, gap ⋅, and identity ∘ work
    • Instead of allowing them to be spelled with 2 characters, they can now be spelled with 1 character as long as there are at least 2 in the sequence.
    • If present, 'i' may only come last.
    • reach ⟜ is included.
  • Add 2-letter spellings of deep ≊, abyss ≃, and seabed ∸ to make them consistent with rock ⋄.

Interpreter

  • Fix a bunch of bugs and crashes
  • The formatter now indents bindings that start with a bound function that starts with &i
  • The native interpreter no longer automatically checks for updates. You can still check manually with uiua update?.

Website

Crate

0.0.23 - 2023-10-25

Language

Interpreter

  • The interpreter now formats its own diagnostic messages instead of delegating to a library
  • Fix a bunch of bugs and crashes
  • Add uiua repl command
  • Optimize (), (), (), and () to be O(n) instead of O(nlogn)
  • Optimize () to not materialize the indices array

Website

  • &ast now works on the website by generating a fixed amount of audio
    • How long the generated audio is can be configured in the editor settings
  • Error and diagnostic messages are no-longer all one color
  • The pad editor now inserts a trailing newline on format
  • Increase thresholds for arrays automatically becoming images or audio
  • Split up system functions into more categories on the main docs page
  • The bell character @\b now plays a sound if printed with &p or &pf

Community

0.0.22 - 2023-10-21

Language

  • Custom modifier placeholders (^) must now be immediately followed by a signature. This reduces the number of signatures that have to be declared everywhere else.

0.0.21 - 2023-10-21

Language

  • Massive Change - Functions are no longer first-class values. This has many implications:
    • Functions can no longer be put in arrays or manipulated as stack values
    • Inline functions can now only appear as modifier arguments or bindings
    • call ! has been removed, as there is nothing on the stack to call
    • Modules have been reworked. &i now handles both loading a module from a file and importing items from that module.
    • --- scopes are now test scopes. ~~~ scopes have been removed.
    • Remove use, as it is no longer necessary
    • Boxes still work as normal, but are now their own type distinct from functions
    • Remove sig, as everything that can be on the stack now has the same signature
  • Add new syntax for defining custom modifiers
  • Add new syntax for calling a function from a list of functions
  • Add the pack ⊐ modifier, which calls its function and implicitly boxes/unboxes values
  • Add the combinate ◳ modifier, which is a rank-generic version of table ⊞
  • fold ∧ is now rank-generic and requires a rank list
  • Add the tribute ≐ modifier, which is a flipped version of distribute ∺
  • Change level ≑'s glyph to reflect its relationship with each ∵, rows ≡, distribute ∺, and tribute ≐. Code using will continue to work and will be formatted as .
  • Add rock ⋄, surface ~, deep ≊, abyss ≃, and seabed ∸, which build rank lists to be used with level ≑ and the new rank-generic modifiers
  • Change trace ⸮'s glyph to let surface ~ use ~.
  • Change match ≍'s glyph to avoid confusion with the new ocean functions' glyphs. Code using will continue to work and will be formatted as .
  • Stack signatures found to be incorrect at runtime produce an error
  • Dyadic math operations now work with under ⍜ even if both arguments are outside under ⍜'s function
  • Some mathematical functions that previously did not work with invert ⍘ and under ⍜ when accompanied by flip : now do

Website

0.0.20 - 2023-10-16

Language

  • Add regex function for matching regular expressions
  • Add utf function for UTF-8 encoding and decoding
  • Add &invk system function for invoking a path to be opened with the system's default program
  • fill ⬚ can now be used with first ⊢
  • Most functions that expect strings as arguments will now dig arbitrarily deep into boxes
  • Make if ? signature checking more permissive
  • The presence of break ⎋ in a repeat ⍥ always requires a stack signature
  • The &runi and &runc functions now return exit codes
  • Multiline string now only insert \n at the end of each line instead of \r\n

Interpreter

  • Bugfixes and performance improvements

Website

0.0.19 - 2023-10-13

Language

  • Add under ⍜ both ∩
  • Remove restack ⇵ for good
  • Remove roll ↷ and unroll ↶ for good
  • @\s can now be used in addition to @ to get a space character

Interpreter

  • Many performance improvements and memory usage reductions
  • Many bug and crash fixes
  • Add some additional style diagnostics
  • Add more semantic token types to the language server
  • Stop using deprecated MarkedString in the language server

Website

  • The editor's font size can now be changed
  • Improve brackets/quotes behavior in the editor
  • HTML is now properly escaped in the editor
  • Formatting can now put the cursor to the left of the current token (toggleable in the settings)

0.0.18 - 2023-10-10

Language

  • Major Change distribute ∺ now takes the array being distributed as its last argument, rather than its first
  • Add where ⊚ function, which returns the indices of an array that have non-zero values
  • if ?'s branches can now have a different number of arguments (but not outputs)
  • if ?'s condition can now be a list of conditions, and the branch will be chosen for each row in the argument(s)
  • The reducing versions of group ⊕ and partition ⊜ now take accumulators. Aggregating versions are unchanged.
  • spawn and wait no longer have glyphs. Code using and will continue to work and will be formatted as spawn and wait.
  • &n is no longer a system function and is now called now
  • under ⍜ now can be used to time things
  • call ! can now call functions that return any number of values, not just one
  • Add hex character escape sequences for string and character literals.
    • \xNN for short ASCII codes
    • \uNNNN for full Unicode sequences

Interpreter

  • The formatter now aligns consecutive end-of-line comments
  • NaNs no longer propogate in minimum ⌊ and maximum ⌈
  • Fix a bug that prevented under ⍜ multidimensional take ↙ and drop ↘ from working
  • Fix a bug in how fold ∧ ordered multiple accumulators
  • Fix a bug that allowed incorrect signatures to be declared for functions
  • Fix a bunch of other bugs and crashes

Website

  • Add the Uiua386 font as an option in the editor

0.0.17 - 2023-10-07

Language

  • Add GIF encoding with &gife
  • Rename constant to box □.
  • Add unbox ⊔, which unboxes a boxed array
  • Major Change: Some uses of call ! will no longer compile without declaring a stack signature. When unboxing box □ed arrays, you can use unbox ⊔ instead, which has a well-defined signature.
  • Add fall ⍖ function, which gives the indices of the array if it were sorted descending
  • Change grade ⌂ name and glyph to rise ⍏ to reflect its relationship with fall ⍖. Code using will continue to work and will be formatted as .
  • try ⍣ now puts arguments to its first function above the error value when calling the error handler
  • fold ∧ can now use multiple accumulators
  • Improve dump output formatting
  • dump is now a monadic modifier. Its function preprocesses each value before dumping it.
  • Add the sig function, which returns the stack signature of a value
  • A negative dimensions in the shape passed to reshape ↯ can now be in any position, not just the first or last
  • Functions with ASCII glyphs now also format from their names
  • Add a advice diagnostic about the captialization of binding names

Interpreter

Website

  • Add GIF output
  • Execution time limit is now 2 seconds by default but can be customized

0.0.16 - 2023-10-05

Interpreter

  • Fix a crash and a bug that could occur when creating nested arrays that pull in values.

0.0.15 - 2023-10-05

This version changes a lot of glyphs. If you are coming from the previous version, most of the old glyphs will be automatically formatted to the new ones. The only change you may need to make is replacing all ^s with |s.

You may want to read the new version of the Advanced Stack Manipulation Tutorial to understand the reason for so many of these changes.

Language

  • Add the bracket ⊓ modifier, which calls two functions each on different arguments
  • Change fill ⬚'s glyph to reflect its relationship with box □. Code using with continue to work and will be formatted as .
  • Change share ⇉ name and glyph to fork ⊃. Code using will continue to work and will be formatted as .
  • Change noop · name and glyphs to identity ∘ to reflect its relationship with gap ⋅ and dip ⊙. Code using · will continue to work and will be formatted as .
  • Change identity ∘'s signature from |0.0 to |1.1
  • Add the gap ⋅ modifier, which discards a value then calls its function. It is mainly intended to be used with fork ⊃.
  • Change dip ⊙'s glyph to reflect its relationship with gap ⋅ and identity ∘. Code using will continue to work and will be formatted as .
  • Change both ∩'s glyph to reflect its relationship with fork ⊃. Code using will continue to work and will be formatted as .
  • distribute ∺ now works with any number of arguments. Only the first argument is distributed.
  • fill ⬚ now works with reshape ↯
  • reshape ↯ now allow negative numbers to denote derived dimensions
  • Change the modifier termination character to | instead of ^
  • Remove old versions of fork and trident
  • Add the &httpsw function for making HTTPS requests

Interpreter

  • Add formatter configuration options. See the readme for details.
  • Checking for updates is less zealous, and can be disabled with the --no-update flag to uiua run or uiua watch

Website

  • Running code in the Pad editor updates the URL to prevent work from accidentally being lost

Pre-Version Updates

2023-10-03

Language

  • Add the share ⊃ modifier, which unifies and deprecates fork ⊃ and trident ∋
  • bind ' no longer calls its functions immediately. This should not change any reasonable existing code.
  • Change how partition ⊜ and group ⊕ work with dyadic functions to be consistent with reduce /
  • Deprecate restack ⇵. It was never a good idea.
  • Remove the overloaded behavior of call !. It no longer behaves like an if-else when used with a list of functions.
    • You can replace all existing instances of that use case with !⊡:
  • Add the if ? modifier, which calls one of two functions based on a condition

2023-10-02

Language

  • both ∩ can now be used with a function that takes any number of arguments.
  • Various bug and crash fixes

Interpreter

  • Tell the user when the interpreter can be updated

2023-10-01

  • Add the dip ⊙ modifier, which temporarily pops a value
  • Deprecate roll↷ and unroll↶
  • Add under ⍜ keep ▽
  • Add dump function, which prints the entire stack

2023-09-30

Language

  • Remove the |1.1 signature restriction for under ⍜'s second function
  • Remove the rank function
  • Remove the restriction that all functions in a non-scalar function array all have the compatible signatures
  • Whether a binding is a constant or a function is now independent of how many values are on the stack
  • Add a system for non-error diagnostics
    • Add advice about redundant uses of each ∵

Interpreter

  • Allow passing --no-format to uiua watch
  • &sc now returns 0 if EOF is input

Website

  • &sc now works on the website by showing a prompt

2023-09-29

Language

  • Make binding names case-sensitive
  • Add ^ syntax to terminate modifier parsing.
  • Add &runi and &runc functions for running commands
  • Add &cd function for changing the current working directory
  • Add shadowable constants like e and os
  • Change trident ∋ argument order to make it easier to reason about
  • Enable fill ⬚ for keep ▽ if the amount list is shorter than the kept array

Interpreter

  • Add uiua eval command which evaluates a Uiua expression and prints the result
  • Watch commands no longer try to open the file being watched
  • Fix a bug that made numbers that were ≤ 1e-12 ⌵ format to 0

Website

  • Make a space character @ more visible by underlining the space
  • Improve cursor movement when formatting in the editor

2023-09-28

Language

  • Add this changelog
  • Add trace ~ function
    • Debug-prints the value on top of the stack without popping it
    • Shows the line and column number too
  • Add both ∩ modifier
    • This can change code like /(|2 ⊂!:!:) {"a" "bc" "def"}
    • To just /'⊂∩! {"a" "bc" "def"}
  • Turn the term pair syntactic construct into a modifier called bind '

Interpreter

  • Fix some correctness bugs related to under ⍜ and invert
  • Fix a crash when trying to reverse an empty array

Website