nushell/crates/nu-plugin
WindSoilder a7295c8f1b
Plugin: Add benchmark for different encoding protocol (#6384)
* add MessagePack as a plugin protocol

* tmp merge from remote

* add benchmark

* use less benchmark group, and add README for analysing benchmark result

* update README

* update README

* rewrite

* remove comment

* rename

* fmt

Co-authored-by: Darren Schroeder <343840+fdncred@users.noreply.github.com>
2022-08-23 11:49:51 -05:00
..
benches Plugin: Add benchmark for different encoding protocol (#6384) 2022-08-23 11:49:51 -05:00
src Plugin: Add benchmark for different encoding protocol (#6384) 2022-08-23 11:49:51 -05:00
Cargo.toml Plugin: Add benchmark for different encoding protocol (#6384) 2022-08-23 11:49:51 -05:00
LICENSE Include license text in all crates (#5094) 2022-04-08 10:47:13 +02:00
README.md Plugin: Add benchmark for different encoding protocol (#6384) 2022-08-23 11:49:51 -05:00

nu-plugin

Updating Cap'n Proto schema

When modifying a protocol's struct that is used in plugins (such as Signature), you need to update the capnproto schema file and recompile it into the Rust source code. The steps are as follows:

  1. Change src/serializers/capnp/schema/plugin.capnp as necessary
  2. Install capnp tool (it's a C++ binary, commonly available in package managers)
  3. Install Rust support for capnp called capnpc-rust:
    1. git clone https://github.com/capnproto/capnproto-rust somewhere
    2. cd capnproto-rust/capnpc
    3. cargo install --path=.
  4. Then, call capnp compile -orust plugin.capnp (change path as necessary)
  5. The result should be plugin_capnp.rs file: Use it to replace the old src/plugin_capnp.rs.
  6. It needs to be autoformatted (cargo fmt --all)
  7. Modify the serialize/deserialize functions. Check the following PRs for details:

Benchmark

Here is a simple benchmark for different protocol for encoding/decoding nushell table, with different rows and columns. You can simply run cargo bench to run benchmark.

The relative html report is in target/criterion/report/index.html.