All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Fix rune-cli build when building with default features, as it does when installing from crates.io (#368) (thanks tgolsson!).
- Fix shadowed variables being incorrectly captured (#363).
For a guide on how to go from 0.9.x 0.10.x, see the upgrade guide for 0.9.x to 0.10.x.
- Rune is now a single
rune
crate instead of being divided betweenrunestick
andrune
. - Completely overhauled how rune is compiled.
- Changed how diagnostics is emitted.
- Macros now take an explicit
ctx
macro rather than relying onTLS
(#304). - Native functions no longer have to be
Copy
(#329). - Many types that used to be publicly exported are now hidden.
rune test
(andrune bench
) now captures all output (#354).
- We can now compile rune source inside of macros (#302).
- Basic benchmarking tool has been added to
rune-cli
throughrune bench
(#296). Vm::with
has been added so we can call functions likeValue::string_display
that "must be run withing a virtual machine" (#291).
- Fixed issue when expanding template literals which prevents properly using them as expressions (#326) (thanks Steven0351!).
- Constant values are not exported so they can be looked up in the unit (#316, #317) (thanks pkolaczk and tgolsson!).
- Make
SyncFunction
documentation visible (#279).
- Fixed memory leak when defining functions (#273) (thanks MicahSchiewe).
- Enable passing Deref/DerefMut into Rune as Values (#269) (thanks tgolsson).
- Support for deriving
Any
on generic types (#268) (thanks tgolsson). - Add display implementations for byte and bool (#258) (thanks Roba1993).
- Correctly mark AnyObj::{from_ref, from_mut} as both super unsafe (#265)
- Various internal refactorings (thanks Roba1993).
- rune-modules now uses tokio 1.x.
Vm::async_call
didn't use async completion functions ([#253]) (thanks Roba1993!).
- Support for
#[test]
annotations (#218, #222) (thanks tgolsson!). - Add
file!()
andline!()
macros (#168) (thanks tgolsson!). - Support for field functions and derives to implement them (#169, #170).
- Support for
crate
in modules (#172). std::any
APIs for runtime inspection of types (#178) (thanks tgolsson!).- Support for range expressions (#180).
- Missing implementations for
FromValue
conversions fori16
andu16
(#235) (thanks genusistimelord!). - More APIs and iterator-heavy benchmark (#232) (thanks tgolsson!).
- Added initial benchmarks (#189).
- Added cellular automata benchmark (#220) (thanks tgolsson!).
- Added fibonacci and brainfuck benchmarks (#193) (thanks tgolsson!).
- Projection APIs for internal
Ref
/RefMut
(#211). - Many API additions and fixes (#219, #229, #233, #241, #196, #199, #185) (thanks tgolsson!).
- Annotations to improve measuring the performance of individual operations in the VM (#190).
- Pattern matching for booleans (#188) (thanks genusistimelord!).
- Added support for
continue
inside of loops (#183). - Add support for registering and accessing runtime constants (#239).
- Support for panicking pattern binding in function arguments (#195).
- Added parsing for yet-to-be supported path segments (#206).
- Add basic support for threaded execution (#97).
- Minor changes (#247, #208).
- Improved CLI with
cargo
-like subcommands (#223) (thanks tgolsson!). - Compile-time metadata has been simplified (#163, #164).
- Internal compiler improvements (#173, #174).
- Make types used in
Context
iteration APIs public (#176). - Slim down the size of runtime meta (#177).
- Change and improve how protocol functions are called (#210, #209).
- Improve performance of runtime hashing (#191).
- Improve diagnostics when using an exclusive reference which is not exclusive (#213).
- Improve performance by reducing the number of copies generated (#194).
- Make compile hooks refcounted for increased flexibility (#221).
- Expose LSP server as a modular library for custom uses (#186) (thanks tgolsson!).
- Improve performance of small objects by using BTreeMap for field storage (#231) (thanks tgolsson!).
- Report errors and warnings through same diagnostics structure (#227, #228).
- Minor fixes (#198, #201).
- Documentation fixes and improvements (#248, #234, #242) (thanks robojumper, maxmcd, and hvithrafn!).
- Fix negative fractional literals (#184) (thanks tgolsson!).
- Various fixes for use in OxidizeBot (#161).
- Bug with using wrong protocol for
MUL
andDIV
(#167). - Add missing macro modules in rune-wasm (#171) (thanks tgolsson!).
- Fixed buggy visibility checks for paths (#175).
- Various fixes and improvements due to AoC (#181, #187, #192, #197, #203, #204, #205, #216, #217).
- Give
SourceLoader
a lifetime (#245) (thanks tgolsson!). - Fix miscompilation in struct literals (#246) (thanks robojumper!).
- Fix miscompilation in pattern matching (#214).
- Introduced and fixed binding bug (#202).
- Fix so that different variants of the same enum have different equalities (#215).
- Make float associated fns associated (#240) (thanks tgolsson!).
- Bump nanorand to fix incorrect generation of random numbers in
rand
module (#243) (thanks tgolsson!). - Fixed broken assembly of more than one
if else
(#230).
- The Rune project now has a Code of Conduct (#12).
- Support for bitwise operations on numbers (#13, #20).
- Book now has support for highlighting
rune
blocks (#14). - Preliminary support for modules without visibility (#16, #17).
- Debug information for function variable names now reflect source (#24).
- Initial support for macros (#29, #30, #31, #114, #135, #136, #137, #138, #141, #142, #143, #144).
- Add cargo build cache (#36) (thanks shekohex!).
- Rust
quote!
macro for Rune macro authors (#34). - Support for object- and tuple-like field assignments (#38, #39, #40, #66).
- Support for lazy evaluation for and/or (
&&
/||
) (#50) (thanks seanchen1991!). - Add
AsTokens
,FromValue
,ToValue
, andSpanned
derives (#41, #85, #87, #88, #113). - Visual studio code extension with syntax highlighting and basic language server (#46, #47, #48, #60, #74) (thanks killercup!).
- Non-zero exit status on script errors (#58, #59) (thanks killercup!).
- Improve CLI by parsing arguments using
structopt
(#51) (thanks shekohex!). - Executing functions in the virtual machine can use external references (#52).
- Remove unused instruction in
loop
(#53) (thanks genusistimelord!). - Tweak module dependencies to use native Rust modules (#54) (thanks killercup!).
- Internal changes to support a future C FFI (#55).
- Improving module API (#56).
- Extending
http
module to deserialize JSON directly (#57) (thanks killercup!). - Automatic build releases on tags (#68).
- Fixed locals bug with breaking control in the middle of an index get operation (#71).
- Community site at https://rune-rs.github.io (#75).
- Add WASM-based Playground to community site https://rune-rs.github.io (#77).
- Support for limiting execution of
rune-wasm
(#80). - Support for modules, imports, re-exports, visibility, and path resolution (#83, #92, #98, #124, #125, #128, #129, #130, #131, #133, #134, #148, #155) (thanks dillonhicks!).
- Add WASM support for a couple of showcased rune modules (#89).
- Added runtime type information (RTTI) for values in Runestick (#90, #112).
- Add a
rand
module torune-modules
(#100) (thanks aspenluxxxy!). - Initial support for constant evaluation (#93, #94, #99, #104, #105, #106, #107, #117, #122, #123, #153).
- Add
Args
implementation forVec
(#147) (thanks MinusGix!). - Export a
Function
variant calledSyncFunction
that is thread-safe (#149, #151) (thanks MinusGix!). - Support
move
modifier to async blocks and closures to take ownership of values being used (#152). - Basic
Iterator
support (#156, #157) (thanks MinusGix!). - Support for calling protocol functions from native code using
Interface
(#159).
- Make units more efficient by separating runtime and compile-time metadata (#24).
- Change the internal representation of
Item
to be more memory efficient (#63). - Make the implementation of
ParseError
andCompileError
more consistent (#65). - Remove the
rune-testing
module (#67). - Made evaluation order of index set operations the same as Rust (#70).
- Make hashing less error prone (#72).
- Various parser changes and tests (#110).
- Various internal changes (#103, #108, #109).
- Parser simplifications (#120, #121).
- Negative literals are handled as expressions (#132).
- Syntax for template strings now follows EcmaScript (#145).
- Introduced custom highlight.js to fix issue with hidden lines in the book (#10).
- Semi-colons in blocks weren't required, they now are (#32).
- Fixed field assignments (#38, #40) (thanks MinusGix!).
- Book typos (#11, #18, #28, #37) (thanks Sparkpin, seanchen1991, stoically, and macginitie!).
- Fix broken book links (#84, #86) (thanks dillonhicks!).
- Fix pattern miscompilation (#62).
- Fixed bug with Closure optimization where it's being treated as a function (#21, #22) (thanks MinusGix!).
- Fixed a number of clippy lints (#35) (thanks shekohex!).
- Fix using closures in literals, like
(0, || 42)
or#{a: || 42}
(#78). - Shared access guards didn't implement Drop allowing them to leak their guarded value (#119).