commite1f8d769f4
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 10 08:53:07 2022 -0500 update authors commit3e5525f1a6
Merge:f4ba1770
1c21abc5
Author: Orion Henry <orionz@users.noreply.github.com> Date: Wed Mar 9 14:36:29 2022 -0500 Merge pull request #304 from jkankiewicz/c_api_exp Fix "fmt" workflow step violations commit1c21abc5a3
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Wed Mar 9 11:13:01 2022 -0800 Fix CMake and Rust code formatting issues. commitf4ba1770a9
Merge:bf1ae609
f41b30d1
Author: Orion Henry <orionz@users.noreply.github.com> Date: Wed Mar 9 12:05:58 2022 -0500 Merge pull request #300 from jkankiewicz/c_api_exp Add unit test suites for the `AMlistSet*` and `AMmapSet*` functions commitf41b30d118
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 22:08:36 2022 -0800 Added a brief description of the `AmObjType` enum. Added the `AmStatus` enum to the enum docs page. commitaf7386a482
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 21:50:52 2022 -0800 Added a unit test suite for the `AMlistSet*` functions. commit1eb70c6eee
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 21:42:42 2022 -0800 Added the rest of the `AMlistSet*` functions. Started the enum tags at `1` so they won't be inherently false. Alphabetized enum tags for the docs. Improved the docs. commit6489cba13b
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 18:01:46 2022 -0800 Alphabetize functions in the docs. commit74c245b82d
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 07:54:25 2022 -0800 Fix a typo in `AMmapSetObject()`'s documentation. commitb2a879ba4e
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 06:24:22 2022 -0800 Append missing EOF linefeed. commitfbf0f29b66
Merge:c56d54b5
bf1ae609
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 01:08:12 2022 -0800 Merge branch 'c_api_exp' of https://github.com/automerge/automerge-rs into c_api_exp commitc56d54b565
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 01:07:11 2022 -0800 Added unit test cases for the new `AMmapSet*` functions by @orionz. Moved the unit test cases for the `AMmapSet*` functions into their own unit test suite. commit7e59b55760
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Tue Mar 8 01:01:47 2022 -0800 Edited the Doxygen documentation. commitbf1ae60913
Author: Orion Henry <orion.henry@gmail.com> Date: Mon Mar 7 11:59:22 2022 -0500 fmt commite82a7cc78e
Merge:a44e69d2
965c2d56
Author: Orion Henry <orionz@users.noreply.github.com> Date: Mon Mar 7 11:55:32 2022 -0500 Merge pull request #299 from jkankiewicz/c_api_exp Enable unit testing of the C API commit965c2d56c3
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Mon Mar 7 06:37:36 2022 -0800 Enable unit testing of the C API. commita44e69d2c7
Author: Orion Henry <orion.henry@gmail.com> Date: Sun Mar 6 14:00:46 2022 -0500 remove datatype mapset commit88153c44e7
Merge:41512e9c
c6194e97
Author: Orion Henry <orionz@users.noreply.github.com> Date: Sun Mar 6 10:32:39 2022 -0500 Merge pull request #298 from jkankiewicz/rebase_c_api_exp Rebase the "c_api_exp" branch on the "experiment" branch commitc6194e9732
Merge:a2d745c8
41512e9c
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Sun Mar 6 01:09:56 2022 -0800 Merge branch 'c_api_exp' into rebase_c_api_exp commita2d745c8d9
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Sun Mar 6 00:44:37 2022 -0800 Replace the `utils::import_value` function with the `utils::import_scalar` function. Exclude `# Safety` comments from the documentation. commit0681e28b40
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 16:04:17 2022 -0500 support new as_ref api commit916e23fcc2
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 15:56:27 2022 -0500 fmt commit71cd6a1f18
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 15:54:38 2022 -0500 lock data at 64 bit - no c_long commite00bd4c201
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 15:27:55 2022 -0500 verbose commit39d157c554
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 14:56:23 2022 -0500 clippy cleanup commit7f650fb8e0
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Wed Feb 23 02:14:06 2022 -0800 Added Doxygen documentation generation. Renamed `AMDatatype` to `AmDataType`. Reorganized the `AmDataType` tags. Renamed `AMfree()` to `AMdestroy()`. Renamed `AMclone()` to `AMdup()`. commitb0b803eef8
Author: Orion Henry <orion.henry@gmail.com> Date: Tue Feb 22 11:30:42 2022 -0500 get simple test passing commitcab9017ffa
Author: Orion Henry <orion.henry@gmail.com> Date: Wed Feb 9 15:50:44 2022 -0500 rework to return a queriable result commita557e848f3
Author: Jason Kankiewicz <you@example.com> Date: Mon Feb 14 14:38:00 2022 -0800 Add a CI step to run the CMake build of the C bindings for @alexjg. commitc8c0c72f3b
Author: Jason Kankiewicz <you@example.com> Date: Mon Feb 14 14:09:58 2022 -0800 Add CMake instructions for @orionz. commitfb62c4b02a
Author: Jason Kankiewicz <you@example.com> Date: Thu Feb 10 23:28:54 2022 -0800 Add CMake support. commit7bc3bb6850
Author: Jason Kankiewicz <you@example.com> Date: Thu Feb 10 22:49:53 2022 -0800 Replace *intptr_t in C function signatures. commit60395a2db0
Author: Orion Henry <orion.henry@gmail.com> Date: Sun Feb 6 18:59:19 2022 -0500 am_pop and am_pop_value commitb1e88047d2
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Feb 3 19:43:36 2022 -0500 break the ground commit41512e9c78
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 16:04:17 2022 -0500 support new as_ref api commitbcee6a9623
Merge:cf98f78d
9a89db3f
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 15:58:19 2022 -0500 Merge remote-tracking branch 'origin/experiment' into c_api_exp commitcf98f78dd1
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 15:56:27 2022 -0500 fmt commit3c1f449c5c
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 15:54:38 2022 -0500 lock data at 64 bit - no c_long commit2c2ec0b0c5
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 15:27:55 2022 -0500 verbose commitb72b9c989a
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Mar 3 14:56:23 2022 -0500 clippy cleanup commit3ba28f91cc
Author: Jason Kankiewicz <jason.kankiewicz@gmail.com> Date: Wed Feb 23 02:14:06 2022 -0800 Added Doxygen documentation generation. Renamed `AMDatatype` to `AmDataType`. Reorganized the `AmDataType` tags. Renamed `AMfree()` to `AMdestroy()`. Renamed `AMclone()` to `AMdup()`. commit8564e5b753
Author: Orion Henry <orion.henry@gmail.com> Date: Tue Feb 22 11:30:42 2022 -0500 get simple test passing commit60835e6ae7
Author: Orion Henry <orion.henry@gmail.com> Date: Wed Feb 9 15:50:44 2022 -0500 rework to return a queriable result commit89466d9e8c
Author: Jason Kankiewicz <you@example.com> Date: Mon Feb 14 14:38:00 2022 -0800 Add a CI step to run the CMake build of the C bindings for @alexjg. commite2485bd5fd
Author: Jason Kankiewicz <you@example.com> Date: Mon Feb 14 14:09:58 2022 -0800 Add CMake instructions for @orionz. commitb5cc7dd63d
Author: Jason Kankiewicz <you@example.com> Date: Thu Feb 10 23:28:54 2022 -0800 Add CMake support. commit685536f0cf
Author: Jason Kankiewicz <you@example.com> Date: Thu Feb 10 22:49:53 2022 -0800 Replace *intptr_t in C function signatures. commitc1c6e7bb66
Author: Orion Henry <orion.henry@gmail.com> Date: Sun Feb 6 18:59:19 2022 -0500 am_pop and am_pop_value commite68c8d347e
Author: Orion Henry <orion.henry@gmail.com> Date: Thu Feb 3 19:43:36 2022 -0500 break the ground
3.5 KiB
Automerge RS
This is a rust implementation of the Automerge file format and network protocol.
Status
This project has 4 components:
- automerge - a rust implementation of the library. This project is the most mature and being used in a handful of small applications.
- automerge-wasm - a js/wasm interface to the underlying rust library. This api is generally mature and in use in a handful of projects as well.
- automerge-js - this is a javascript library using the wasm interface to export the same public api of the primary automerge project. Currently this project passes all of automerge's tests but has not been used in any real project or packaged as an NPM. Alpha testers welcome.
- automerge-c - this is a c library intended to be an ffi integration point for all other languages. It is currently a work in progress and not yet ready for any testing.
How?
The current iteration of automerge-rs is complicated to work with because it adopts the frontend/backend split architecture of the JS implementation. This architecture was necessary due to basic operations on the automerge opset being too slow to perform on the UI thread. Recently @orionz has been able to improve the performance to the point where the split is no longer necessary. This means we can adopt a much simpler mutable API.
The architecture is now built around the OpTree
. This is a data structure
which supports efficiently inserting new operations and realising values of
existing operations. Most interactions with the OpTree
are in the form of
implementations of TreeQuery
- a trait which can be used to traverse the
optree and producing state of some kind. User facing operations are exposed on
an Automerge
object, under the covers these operations typically instantiate
some TreeQuery
and run it over the OpTree
.
Development
Please feel free to open issues and pull requests.
Running CI
The steps CI will run are all defined in ./scripts/ci
. Obviously CI will run
everything when you submit a PR, but if you want to run everything locally
before you push you can run ./scripts/ci/run
to run everything.
Running the JS tests
You will need to have node, yarn, rust and wasm-pack installed.
To build and test the rust library:
$ cd automerge
$ cargo test
To build and test the wasm library:
## setup
$ cd automerge-wasm
$ yarn
## building or testing
$ yarn build
$ yarn test
## without this the js library wont automatically use changes
$ yarn link
## cutting a release or doing benchmarking
$ yarn release
To test the js library. This is where most of the tests reside.
## setup
$ cd automerge-js
$ yarn
$ yarn link "automerge-wasm"
## testing
$ yarn test
And finally, to build and test the C bindings with CMake:
## setup
$ cd automerge-c
$ mkdir -p build
$ cd build
$ cmake -S .. -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=OFF
## building and testing
$ cmake --build .
To add debugging symbols, replace Release
with Debug
.
To build a shared library instead of a static one, replace OFF
with ON
.
The C bindings can be built and tested on any platform for which CMake is available but the steps for doing so vary across platforms and are too numerous to list here.
Benchmarking
The edit-trace
folder has the main code for running the edit trace benchmarking.