{"id":15719415,"url":"https://github.com/louis-langholtz/flow","last_synced_at":"2025-05-13T02:33:43.459Z","repository":{"id":156792256,"uuid":"631413062","full_name":"louis-langholtz/flow","owner":"louis-langholtz","description":"Dataflow library and engine in C++","archived":false,"fork":false,"pushed_at":"2023-06-19T22:09:12.000Z","size":493,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-01T06:02:16.392Z","etag":null,"topics":["cli","dataflow-programming","framework","library","multiprocessing","parallel-computing","shell","system-design"],"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/louis-langholtz.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":"2023-04-23T00:14:09.000Z","updated_at":"2023-07-27T01:11:25.000Z","dependencies_parsed_at":"2023-09-26T03:50:28.086Z","dependency_job_id":null,"html_url":"https://github.com/louis-langholtz/flow","commit_stats":{"total_commits":331,"total_committers":1,"mean_commits":331.0,"dds":0.0,"last_synced_commit":"10632041bddf3532f428bc926e809ffa71845d65"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louis-langholtz%2Fflow","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louis-langholtz%2Fflow/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louis-langholtz%2Fflow/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/louis-langholtz%2Fflow/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/louis-langholtz","download_url":"https://codeload.github.com/louis-langholtz/flow/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253860069,"owners_count":21975214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cli","dataflow-programming","framework","library","multiprocessing","parallel-computing","shell","system-design"],"created_at":"2024-10-03T21:55:41.364Z","updated_at":"2025-05-13T02:33:43.425Z","avatar_url":"https://github.com/louis-langholtz.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# flow\n\nA data-flow library and environment in C++.\n\n## Status\n\n[![linux](https://github.com/louis-langholtz/flow/actions/workflows/linux.yml/badge.svg)](https://github.com/louis-langholtz/flow/actions/workflows/linux.yml)\n\nThis is just a work in progress at the moment.\n\n## What?\n\nI'm using the phrase \"data-flow\" in terms of machines, programming, and systems.\nIn data-flow systems, instead of instructions or control moving through them\n(like computers are typically thought of as doing),\nthe focus is on data moving through them.\n\nSee the references section below to find out more about data-flow in general.\n\nAt present, the project uses POSIX descriptors and signals to implement the flow\nof data, and applications having well known descriptors and signals to implement\nunderlying leaf execution units. As abstractions, these conveniently fit the\ndata flow model and when instantiated execution is _asynchronous_.\nSee the [system.hpp](library/include/flow/system.hpp) header file for specifics\non how systems can be designed in C++.\n\nAt a conceptual design level, there are three types of things to think about:\nports, links, and nodes. Ports define data inputs or outputs.\nLinks define the binding together of output ports with input ports.\nNodes meanwhile encapsulate implementations taking the data from its input\nports, processing that data, and then outputting resulting data to its output\nports. These implementations can be executable programs, or systems that are\nrecursively definable containers of nodes connected via links to each other's\nports. When nodes are run, or _instantiated_, they're transformed into:\ninstances, and channels. Instances and channels exist until the instances exit.\n\n## Why?\n\nData-flow programming and architecture has been an interest of mine for years.\nAdditionally, it has benefits that are more attractive than ever, like:\n- Lending itself better to modern computing resources.\n- Facilitating a more organic style of modeling natural processes.\n\n## How?\n\nExactly how the project can be acquired, built, and run will depend on things\nlike having requirements and which components specifically you want to use.\nGenerally speaking, the following instructions hopefully suffice...\n\n### Have Requirements\n\n- POSIX-compliant OS (like Linux or macOS 10.5+).\n- `git` command line tool.\n- Compiler supporting the C++20 standard (or newer).\n- CMake version 3.16.3 or newer command line tool.\n- For the *shell* application, access to the _editline_\n  \"line editor and history library\".\n- For the *tests* application, access to https://github.com/google/googletest.\n\n### Download Project Code\n\nAssuming:\n- You want to use the project's name of `flow` as the directory name under which\n  to store the project.\n\nFrom a terminal that's in the directory you want the `flow` sub-directory to\nappear in, run the following:\n1. `git clone https://github.com/louis-langholtz/flow.git`\n\n### Build It\n\n- To build all components into a separate sub-directory named `flow-build`\n  (including compile commands for tools like `clang-tidy`), run:\n  ```\n  cmake -S flow -B flow-build -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DFLOW_BUILD_SHELL=ON -DFLOW_BUILD_UNITTESTS=ON\n  cmake --build flow-build\n  ```\n- Alternatively, or to find out more about each component (including some usage\n  suggestions), see:\n  - [The library component README.md](library/README.md).\n  - [The shell application component README.md](shell/README.md).\n  - [The tests application component README.md](tests/README.md).\n\n## References\n\n- Devopedia's [Dataflow Programming](https://devopedia.org/dataflow-programming) page.\n- Wikipedia's [Dataflow programming](https://en.wikipedia.org/wiki/Dataflow_programming) page.\n- Wikipedia's [POSIX](https://en.wikipedia.org/wiki/POSIX) page.\n- Wikipedia's [Assembly theory](https://en.m.wikipedia.org/wiki/Assembly_theory).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouis-langholtz%2Fflow","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flouis-langholtz%2Fflow","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flouis-langholtz%2Fflow/lists"}