Interned strings
⚠️ The design and implementation chapter is outdated ⚠️
Let's ignore timestamps for now and also ignore how access to the global logger is synchronized. This is the simplest case: logging a string literal with no formatting.
#![allow(unused)] fn main() { extern crate defmt; defmt::info!("Hello, world!"); }
As we saw in the previous section this string will get interned.
Interning converts the string into a usize
index.
This usize
index will be further compressed using LEB128.
Some examples: (values on the right are u8
arrays)
1usize
->[1]
127usize
->[127]
128usize
->[128, 1]
255usize
->[255, 1]
Because string indices start at zero and it's unlikely that a program will intern more than 2^14 strings string literals will be serialized as 1 or 2 bytes indices.