louis-langholtz / flow

Dataflow library and engine in C++

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

flow

A data-flow library and environment in C++.

Status

linux

This is just a work in progress at the moment.

What?

I'm using the phrase "data-flow" in terms of machines, programming, and systems. In data-flow systems, instead of instructions or control moving through them (like computers are typically thought of as doing), the focus is on data moving through them.

See the references section below to find out more about data-flow in general.

At present, the project uses POSIX descriptors and signals to implement the flow of data, and applications having well known descriptors and signals to implement underlying leaf execution units. As abstractions, these conveniently fit the data flow model and when instantiated execution is asynchronous. See the system.hpp header file for specifics on how systems can be designed in C++.

At a conceptual design level, there are three types of things to think about: ports, links, and nodes. Ports define data inputs or outputs. Links define the binding together of output ports with input ports. Nodes meanwhile encapsulate implementations taking the data from its input ports, processing that data, and then outputting resulting data to its output ports. These implementations can be executable programs, or systems that are recursively definable containers of nodes connected via links to each other's ports. When nodes are run, or instantiated, they're transformed into: instances, and channels. Instances and channels exist until the instances exit.

Why?

Data-flow programming and architecture has been an interest of mine for years. Additionally, it has benefits that are more attractive than ever, like:

  • Lending itself better to modern computing resources.
  • Facilitating a more organic style of modeling natural processes.

How?

Exactly how the project can be acquired, built, and run will depend on things like having requirements and which components specifically you want to use. Generally speaking, the following instructions hopefully suffice...

Have Requirements

  • POSIX-compliant OS (like Linux or macOS 10.5+).
  • git command line tool.
  • Compiler supporting the C++20 standard (or newer).
  • CMake version 3.16.3 or newer command line tool.
  • For the shell application, access to the editline "line editor and history library".
  • For the tests application, access to https://github.com/google/googletest.

Download Project Code

Assuming:

  • You want to use the project's name of flow as the directory name under which to store the project.

From a terminal that's in the directory you want the flow sub-directory to appear in, run the following:

  1. git clone https://github.com/louis-langholtz/flow.git

Build It

References

About

Dataflow library and engine in C++

License:MIT License


Languages

Language:C++ 96.6%Language:CMake 3.4%