immer is a library of persistent and immutable data structures written in C++. These enable whole new kinds of architectures for interactive and concurrent programs of striking simplicity, correctness, and performance.
This library has full months of pro bono research and development invested in it. This is just the first step in a long-term vision of making interactive and concurrent C++ programs easier to write. Put your logo here and help this project’s long term sustainability by buying a sponsorship package: immer@sinusoid.al
#include <immer/vector.hpp>
int main()
{
const auto v0 = immer::vector<int>{};
const auto v1 = v0.push_back(13);
assert(v0.size() == 0 && v1.size() == 1 && v1[0] == 13);
const auto v2 = v1.set(0, 42);
assert(v1[0] == 13 && v2[0] == 42);
}
For a complete example check Ewig, a simple didactic text-editor built with this library. You may also wanna check Lager, a Redux-like library for writing interactive software in C++ using a value-oriented design.
In the last few years, there has been a growing interest in immutable data structures, motivated by the horizontal scaling of our processing power and the ubiquity of highly interactive systems. Languages like Clojure and Scala provide them by default, and implementations for JavaScript like Mori and Immutable.js are widely used, specially in combination with modern UI frameworks like React.
This library is written in C++14 and a compliant compiler is necessary. It is continuously tested with Clang 3.8 and GCC 6, but it might work with other compilers and versions.
No external library is necessary and there are no other requirements.
This is a header only library. You can just copy the immer
subfolder somewhere in your include path.
If you are using the Nix package manager (we strongly recommend it) you can just:
nix-env -if https://github.com/arximboldi/immer/archive/master.tar.gz
Alternatively, you can use CMake to install the library in your system once you have manually cloned the repository:
mkdir -p build && cd build
cmake .. && sudo make install
You can download and install immer using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager:
git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install immer
The immer port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
In order to develop the library, you will need to compile and run the examples, tests and benchmarks. These require some additional tools. The easiest way to install them is by using the Nix package manager. At the root of the repository just type:
nix-shell
This will download all required dependencies and create an isolated environment in which you can use these dependencies, without polluting your system.
Then you can proceed to generate a development project using CMake:
mkdir build && cd build
cmake ..
From then on, one may build and run all tests by doing:
make check
In order to build and run all benchmarks when running make check
,
run cmake
again with the option -DCHECK_BENCHMARKS=1
. The
results of running the benchmarks will be saved to a folder
reports/
in the project root.
This software is licensed under the Boost Software License 1.0.
The full text of the license is can be accessed via this link and is also included
in the LICENSE
file of this software package.