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 开发工具
79 每月下载量
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》)。
介绍视频
安装
此仓库可以作为二进制文件或库使用。我假设如果您使用此工具开发并希望发布产品,您已经知道如何将以下说明从 "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