Skip to content
Snippets Groups Projects
Commit cbf3b1a0 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Merge branch 'ion-part-2' into 'master'

RSoC: Ion as a Library, week 2

See merge request !211
parents e80df033 259ec9f7
No related branches found
No related tags found
1 merge request!211RSoC: Ion as a Library, week 2
Pipeline #4962 canceled
---
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment