diff --git a/content/news/rsoc-ion-lib-1.md b/content/news/rsoc-ion-lib-1.md new file mode 100644 index 0000000000000000000000000000000000000000..68da4c40a3801982fa015eedde299e813bafabf1 --- /dev/null +++ b/content/news/rsoc-ion-lib-1.md @@ -0,0 +1,32 @@ +--- +title: "RSoC Project: Ion as a library, week 2" +author: AdminXVII +date: 2019-06-16T11:01:32-04:00 +--- + +# Keyword of the week: Error bubbling + +## Summary of the work done + - Use enum types to represent error rather than strings + - Use the `err_derive` crate to implement easily the required traits for error types + - Indicate the cause of errors for easier debugging + - Exit the script on the first programmer error (wrong function signature, invalid expansion, assignment error), rather than leaving "magic" happen + - Separate parsing & expansion to make it easier to swap the current parser for nom + - process::exit is no more used in the library to make execution more linear + +## Plan: Testing tendrils +### Current state & the small string optimization (SSO) +Ion now uses small::String to store string data types. It's an alternative String type that uses SSO to achieve better performance than the std one with typically small strings. + +In Ion's real world usage, strings tend to be fairly short (~ under 20 chars). The small string optimization is a technique where a string is a tagged union containing either a pointer to a heap string (like the one provided by the stdlib) or a stack-based array which is typically faster since it's stored with the containing datastructure that's already in a cache line. According to previous benchmarks, the switch to small strings gave Ion a 30% speed bump. + +### The alternative: [tendrils](https://github.com/servo/tendril) +Tendril is an alternative "compact string/buffer type, optimized for zero-copy parsing". It combines the small string and copy-on-write optimizations, possibly providing another performance boost. Further benchmarks will be needed. + +## What's left to do + - Finish using error types in expansion + - Documentation + - Examples + - Add background jobs callbacks + - Add option to provide custom files for default standard pipes + - Release or remove members to be able to publish on crates.io