Merge: new `with` statement
[nit.git] / benchmarks / strings / README.md
1 # Strings
2
3 Strings are a building block of programming.
4 Since they are that necessary, we must keep them as performing as possible.
5
6 This series of benchmarks works on different structures for handling strings on the most common operations done on them.
7
8 ## Structures
9
10 Some more structures are susceptible to be added as the project advances.
11 At the moment, what is available consists of
12
13 * Flat strings
14 * Flat buffers
15 * Rope strings
16 * Rope buffers
17
18 A String is defined as an immutable string.
19 A Buffer is defined as a mutable string.
20
21 Flat strings are arrays of characters, the most basic implementation of a string.
22 Ropes are a tree-like structure where strings are bound through concatenation nodes.
23
24 ## Tests
25
26 `concat`: Benches the concatenation speed of strings and buffers.
27
28 `iter`: Benches the time of iteration of a string, through iterators or indexed access
29
30 `substr`: Benches the time required to produce a substring.
31
32 `arraytos`: Special bench, it measures the speed of `Array::to_s` through the use of various strategies.
33
34 ## Usage
35
36 To pass a series of benches you can use the `make` command to bench all the aforementioned tests with default values.
37
38 Each bench will be executed 5 times and the mean time will be represented in the final graph.
39
40 The alternative is to use `bench_strings.sh` with custom arguments to it.
41 For more information on the arguments and the format, execute it with the -h option for help.