#编程语言 #flow #dataflow #java #python #json #javascript

bin+lib flowlang

A dataflow oriented programming meta-language in JSON supporting functions written in rust, python, javascript, java and flow

93 个版本

0.3.14 2024 年 3 月 24 日
0.3.3 2023 年 12 月 31 日
0.2.17 2023 年 10 月 1 日
0.2.13 2023 年 3 月 12 日
0.1.8 2022 年 7 月 23 日

#184 in 开发工具

Download history 33/week @ 2024-03-25 551/week @ 2024-04-01 12/week @ 2024-04-22 16/week @ 2024-05-06 37/week @ 2024-05-13 9/week @ 2024-05-20 2/week @ 2024-05-27 21/week @ 2024-06-03 41/week @ 2024-06-10 18/week @ 2024-06-17 23/week @ 2024-06-24 7/week @ 2024-07-01 20/week @ 2024-07-08

79 每月下载量

MIT 许可证

270KB
7.5K SLoC

Flow

Flowlang crate - https://crates.io/crates/flowlang

此仓库发布在 crates.io 上,并提供了跨 Rust、Java、JavaScript、Python 和 Flow 编写的函数的统一函数式编程 API。

Flow 语言

Flow 语言是一种基于 Prograph 编程语言(https://en.wikipedia.org/wiki/Prograph)的 3D 视觉数据流语言。Flow 允许您构建应用程序中数据流如何流动的图表,然后执行它。Flow 语言的官方 IDE 是 Newbound(《https://github.com/mraiser/newbound》)。

介绍视频

观看视频 https://youtu.be/5vZKR4FGJyU

安装

此仓库可以作为二进制文件或库使用。我假设如果您使用此工具开发并希望发布产品,您已经知道如何将以下说明从 "debug" 转换为 "release"。要在 Linux 上编译和作为二进制文件使用

git clone https://github.com/mraiser/flow.git flow
cd flow
cargo build
mypath=$(pwd)
cd /usr/bin
sudo ln -s $mypath/target/debug/flow flow
sudo ln -s $mypath/target/debug/flowb flowb
cd -

要将作为 Rust 库使用,请在您的 Cargo.toml 文件中添加以下内容

[dependencies]
flowlang = "0.1.15"
# NOTE: Change version to latest version: https://crates.io/crates/flowlang

执行 Flow 代码

此仓库包含一个 "data" 文件夹,其中包含 "testflow" 库。您可以将自己的库添加到 "data" 文件夹中,它们也将成为可执行文件。库使用 Newbound Metabot(《https://github.com/mraiser/newbound》)创建。

从命令行

在包含您的 Flow 代码的 "data" 目录下执行以下操作。

flow testflow testflow test_add <<< "{\"a\": 300,\"b\":120}"

从 Rust 代码

DataStore::init("data");
Generated::init(); // Load any flow commands written in rust
env::set_var("RUST_BACKTRACE", "1");
{
    let args = DataObject::from_json(serde_json::from_str(r#"
    {
      "a": 299,
      "b": 121
    }
    "#).unwrap());
    let cmd = Command::lookup("testflow", "testflow", "test_add");
    let res = cmd.execute(args).unwrap();
    println!("Hello, my dudes! {}", res.to_json());
}
DataStore::gc();

从网页浏览器

# Start the HTTP service from the directory where you installed Flow
flow flowlang http listen <<< "{\"socket_address\": \"127.0.0.1:7878\", \"library\":\"flowlang\", \"control\":\"http\", \"command\":\"parse_request\"}"

在网页浏览器中测试您的 HTTP 服务

http://127.0.0.1:7878/testflow/testflow/test_add?a=42&b=378

支持多种语言中的命令

流命令可以用Java、Python、Rust、JavaScript或Flow编写。所有语言在调用之间都维护状态。当使用Newbound开发Flow代码时,IDE会自动构建、编译和运行所需的任何文件。Newbound有自己支持多种语言的指令(https://github.com/mraiser/newbound)。以下内容仅适用于在Newbound IDE之外运行Flow代码。

启用JavaScript命令

由于JavaScript支持默认是禁用的,您需要使用--features=javascript_runtime标志编译flow。

cargo run --features javascript_runtime --bin flow testflow testflow test_javascript <<< "{\"a\":\"world\"}"

启用Python命令

由于Python支持默认是禁用的,您需要使用--features=python_runtime标志编译flow。您必须首先在本地环境中安装Python3。为了运行包含用Python编写的命令的库,您需要生成Python文件。

# To rebuild all rust and python commands, use: flowb all
cargo run --bin flowb testflow testflow test_python
cargo run --features python_runtime --bin flow testflow testflow test_python <<< "{\"a\":\"world\"}"

启用Rust命令

为了运行包含用Rust编写的命令的库,您需要生成Rust文件。

# To rebuild all rust and python commands, use: flowb all
cargo run --bin flowb testflow testflow test_rust
cargo run --bin flow testflow testflow test_rust <<< "{\"a\":\"world\"}"

启用Java命令

为了运行包含用Java编写的命令的库,您需要将Newbound(https://github.com/mraiser/newbound)中的data/botmanager、runtime/botmanager、runtime/peerbot、src/Startup.java、src/com和src/org添加到您的Flow项目中。由于Java支持默认是禁用的,您需要使用--features=java_runtime标志编译flow。您还需要确保JDK的libjvm库在您的LD_LIBRARY_PATH中。

mkdir bin
mkdir runtime
git clone https://github.com/mraiser/newbound.git newbound
cp -R newbound/data/botmanager data/botmanager
cp -R newbound/runtime/botmanager runtime/botmanager
cp -R newbound/runtime/peerbot runtime/peerbot
cp newbound/src/Startup.java src/Startup.java
cp -R newbound/src/com src/com
cp -R newbound/src/org src/org
cd src
javac -d ../bin Startup.java
cd ../
# Make sure LD_LIBRARY_PATH contains path to libjvm.so 
# Something along the lines of:
export LD_LIBRARY_PATH=/usr/lib/jvm/java-11-openjdk-amd64/lib/server/
# Example from testflow library:
cargo run --bin flow --features=java_runtime testflow testflow test_java <<< "{\"a\":\"world\"}"

背景

Flow最初是用Java编写的,作为Newbound的一部分,Newbound是一个用于对等HTML5网络应用的集成开发环境。Newbound支持Java、JavaScript、Python、Rust和Flow的服务端命令,以及前端上的JavaScript和Flow。此存储库包含将Flow语言解释器从Newbound的Java实现移植过来的版本(https://github.com/mraiser/newbound/blob/master/runtime/botmanager/src/com/newbound/code/Code.java)。Newbound还使用此crate编译和执行Rust代码。

依赖关系

~0–23MB
~341K SLoC