Skip to content

Latest commit

 

History

History
283 lines (179 loc) · 8.74 KB

CHANGELOG.md

File metadata and controls

283 lines (179 loc) · 8.74 KB

walrus Change Log


Unreleased

Released YYYY-MM-DD.

Added

  • TODO (or remove section if none)

Changed

  • TODO (or remove section if none)

Deprecated

  • TODO (or remove section if none)

Removed

  • TODO (or remove section if none)

Fixed

  • TODO (or remove section if none)

Security

  • TODO (or remove section if none)

0.15.0

Released 2020-02-03.

Added

  • Added support for typed select instructions.

0.14.0


0.13.0


0.12.0

Released 2019-09-10.

Added

  • Added support for multi-value Wasm!

  • Added ModuleExports::get_exported_{func, table, memory, global} helper functions to get an export by the id of the thing that it is exporting (if any).

  • Added fuzz testing with libFuzzer and cargo fuzz.

Changed

  • No longer using the "derive" feature from failure, which should result in slimmer dependency graphs and faster builds.

  • Module::emit_wasm is no longer fallible. It never actually did ever return an Err and now the type signature reflects that.


0.11.0

Released 2019-08-13.

Added

  • walrus::Module::write_graphviz_dot: You can now render a whole Wasm module as a GraphViz Dot file (previously you could only do one function at a time) and it will also show the relationships between all the various Wasm structures (previously it only showed the relationships between instructions).

Changed

  • The intermediate representation for instructions (walrus::ir::*) has been overhauled. Expr has been renamed to Instr, and an operator no longer points to its operands as nested children in the AST. Instead of representing every instruction as a node in an AST, now there is a tree of instruction sequences. An instruction sequence is a vector of Instrs that relate to each other implicitly via their effect on the stack. A nested block ... end, loop ... end, or if ... else ... end form new nested instruction sequences.

  • The Visitor and VisitorMut traits and traversing the IR has also been overhauled:

    • Visitors are no longer recursive, and should never recursively call self.visit_foo() from inside self.visit_bar(). Not in the default provided trait methods and not in any user-written overrides of those trait methods.

    • There are now traversal functions which take a visitor, a LocalFunction, and a start InstrSeqId, and then perform some kind of traversal over the function's IR from the given start sequence. These traversal functions are not recursive, and are implemented with explicit work lists and while loops. This avoids blowing the stack on deeply nested Wasm inputs. Although we can still OOM, we leave fixing that to future PRs. Right now there are only two traversals, because that is all we've needed so far: an in-order DFS for immutable visitors (needs to be in-order so we can encode instructions in the right order) and a pre-order DFS for mutable visitors (pre-order is the easiest traversal to implement iteratively). We can add more traversals as we need them.

Removed

  • The Dot trait has been made internal. Use the new walrus::Module::write_graphviz_dot method instead.

  • The Visit trait is no longer exported in the public API, and has been made internal. Use the new traversal functions instead (walrus::ir::dfs_in_order and walrus::ir::dfs_pre_order_mut).


0.10.0


0.9.0


0.8.0

Released 2019-06-05.

Added

  • Added ModuleExports::iter_mut for iterating over exclusive references to a module's exports.

  • Added a ModuleConfig::on_parse hook, which has access to a map from indices in the original Wasm binary to the newly assigned walrus IDs. This is a good time to parse custom sections that reference functions or types or whatever by index.

  • The TableKind enum now has various unwrap_* helpers to get a particular variant's inner data or else panic.

  • Added ModuleFunctions::by_name to get a function ID by function name.

Changed

  • The CustomSection::data trait method now has a new parameter: a map from walrus IDs to their indices in the new wasm binary we are emitting. This is useful for custom sections that reference functions or types or whatever by index.

0.7.0

Released 2019-05-17.

Added

  • Added the walrus::ModuleCustomSections API for working with arbitrary custom sections, including and especially custom sections that walrus itself has no special knowledge of. This is exposed as the customs field of a walrus::Module.

  • Added the Module::with_config constructor method to create a default, empty module that uses the given configuration.

Removed

  • The walrus::Module::custom vector of raw custom modules has been removed and is superceded by the new walrus::ModuleCustomSections API. If you were using this and the old CustomSection type, switch to use the RawCustomSection type with ModuleCustomSections.

0.6.0

Released 2019-05-02.

Added

  • ModuleConfig::parse_file and Module::parse_file_with_config helper functions to easily parse a Wasm file from disk with a given configuration.

Changed

  • ModuleConfig::parse takes &self instead of &mut self now. This was just an oversight / copy-past error before.

0.5.0


0.4.0


0.3.0

Released 2019-02-19.

Added

  • Added support for the reference types wasm proposal. #50
  • Can finish a FunctionBuilder with the relevant &mut parts of a module, rather than a whole &mut Module. This is useful when some parts of the module are mutably borrowed elsewhere. #56
  • Can get a FunctionBuilder from an existing LocalFunction so you can build new expressions for the function. #54
  • Added the ability to delete functions, imports, exports, etc. Usually it is easier to just let the builtin GCing emit only the necessary bits of the wasm binary, but manually deleting will remove the item from iterators over the module's parts. If you delete a thing, you are responsible for ensuring that nothing else is referencing it (eg there are no remaining calls to a function that you are deleting, etc). #58
  • Added an id getter for Imports. #59
  • Added a mutable iterator for tables in a module. #59
  • Added a convenience function for getting the main function table for a module. #57

Changed

  • The WithSideEffects expression variant can have arbitrary stack-neutral side effects before its value now, in addition to after its value. #55

0.2.1

Released 2019-02-14.

Added

  • Added configuration options for controlling emission of the producers section

0.2.0

Released 2019-02-14.

Added

  • Added configuration options for controlling emission of the DWARF and name custom sections.

Changed

  • Changed the synthetic naming option from "generate_names" to "generate_synthetic_names_for_anonymous_items" to more accurately reflect what it does.

0.1.0

Released 2019-02-12.

Added

  • Initial release!