{"id":28074218,"url":"https://github.com/jakubfornadel/rust-sharedmem-ocaml","last_synced_at":"2026-05-06T17:31:31.813Z","repository":{"id":202221293,"uuid":"201947551","full_name":"JakubFornadel/Rust-SharedMem-Ocaml","owner":"JakubFornadel","description":"Rust-SharedMem-Ocaml is POC implementation of two-way IPC communication between multiple independent Rust and Ocaml processes","archived":false,"fork":false,"pushed_at":"2020-05-26T14:33:33.000Z","size":226,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-09-26T07:07:15.964Z","etag":null,"topics":["cpp","multiprocess","ocaml","rust","wrappers"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JakubFornadel.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2019-08-12T14:33:23.000Z","updated_at":"2021-05-17T08:52:10.000Z","dependencies_parsed_at":null,"dependency_job_id":"f7999494-9c9a-43ad-9d93-ec043f05547c","html_url":"https://github.com/JakubFornadel/Rust-SharedMem-Ocaml","commit_stats":null,"previous_names":["jakubfornadel/rust-sharedmem-ocaml"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JakubFornadel/Rust-SharedMem-Ocaml","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakubFornadel%2FRust-SharedMem-Ocaml","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakubFornadel%2FRust-SharedMem-Ocaml/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakubFornadel%2FRust-SharedMem-Ocaml/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakubFornadel%2FRust-SharedMem-Ocaml/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JakubFornadel","download_url":"https://codeload.github.com/JakubFornadel/Rust-SharedMem-Ocaml/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JakubFornadel%2FRust-SharedMem-Ocaml/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32704275,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-06T08:33:17.875Z","status":"ssl_error","status_checked_at":"2026-05-06T08:33:17.221Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cpp","multiprocess","ocaml","rust","wrappers"],"created_at":"2025-05-12T23:31:48.215Z","updated_at":"2026-05-06T17:31:31.794Z","avatar_url":"https://github.com/JakubFornadel.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Rust-SharedMem-Ocaml\nRust-SharedMem-Ocaml is POC implementation of two-way IPC communication between multiple independent Rust and Ocaml processes. \nFor that purpose, it uses Cpp library with implemented shared memory and synchronized queue inside as core of the solution. Then Rust \u0026 Ocaml wrappers(libraries) are created on top of this library, which are later used in applications. \n\nUse git to clone the repository. \n```Shell \ngit clone https://github.com/JakubFornadel/Rust-SharedMem-Ocaml.git \n```\n\n## Prerequisites\nProject was developed and tested under Ubuntu.\n\n### Cpp\n- cmake v. \u003e= 3.2\n- header library from boost: #include \u003cboost/interprocess/ipc/message_queue.hpp\u003e  \n\n### Ocaml \u0026 dune\n```Shell \nsudo su\napt-get install ocaml\napt-get install opam\nopam init\nopam install dune \n\n// These are optional (not used at the moment)\nopam install core \nopam install ctypes \nopam install ctypes-foreign\n``` \n\n### Rust\n- To intall Rust, follow https://doc.rust-lang.org/cargo/getting-started/installation.html\n\n\n## Quickstart\nOnce the environment is properly installed, run following scripts to update C++ library and its wrappers:\n```Shell \ncd shareMemCpp/\n./install.sh\n./setup.sh  // run only one time. It creates symlinks to Cpp library for Ocaml and Rust wrappers\n\ncd ../sharedMemRs/\n./install.sh\n\ncd ../sharedMemMl/\n./install.sh\n\ncd ../\n```\n\nOnce the wrappers are succefully built, run following commands to start-up applications:\n```Shell \ncd node/          // Node(Rust) must be started first\ncargo build \ncargo run\n\ncd ../protocol    // Protocol(Ocaml) second\ndune exec ./protocol.exe\n```\n\n## SharedMemCpp Build \u0026 Install instructions\n```Shell \nmkdir -p sharedMemCpp/build\ncd sharedMemCpp/build\ncmake ../\nmake\ncd ../\n\n// for quick install (also for Rust and Ocaml wrappers) run:\n./install.sh\n\n// for one-time setup (creates symlinks to lib for Ocaml and Rust) run:\n./setup.sh\n\n```\n\n## SharedMemRs Build instructions\n```Shell \ncd sharedMemRs\ncargo build\n\n// To run tests\ncargo test\n\n// for quick install run\n./install.sh\n```\n\n## SharedMemMl Build instructions \nSharedMemMl building\n```Shell \ncd sharedMemMl\n// Creates symlinks to Cpp library. See https://dune.readthedocs.io/en/stable/foreign-code.html  \nln -s $PWD/../sharedMemCpp/build/libSharedMemCpp.so sharedMem/libSharedMemCpp_stubs.a  \nln -s $PWD/../sharedMemCpp/build/libSharedMemCpp.so sharedMem/dllSharedMemCpp_stubs.so\ndune build\n\ndune install --prefix .\nsudo cp -r lib/sharedMem/ ~/.opam/default/lib/\nsudo cp -r lib/sharedMem_c/ ~/.opam/default/lib/\n// Check https://github.com/ocaml/dune/blob/master/doc/usage.rst#finding-external-libraries - 2. worked for me, after that dune installed-libraries can see sharedMem package !\n\n// for quick install run:\n./install.sh\n```\n\n## Node Build instructions\n```Shell \ncd node/\ncargo build\ncargo run\n```\n\n## Ocaml Protocol Build instructions\n```Shell \ncd protocol/\n\ndune build protocol.exe\n./_build/default/protocol.exe\n\nor\n\ndune exec ./protocol.exe\n```\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjakubfornadel%2Frust-sharedmem-ocaml","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjakubfornadel%2Frust-sharedmem-ocaml","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjakubfornadel%2Frust-sharedmem-ocaml/lists"}