Skip to content

0.10.0

Compare
Choose a tag to compare
@github-actions github-actions released this 05 Apr 02:41
· 2536 commits to main since this release

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