flow
flow は、「流れ」のプログラミング言語による表現です。
Vue.js のリアクティブシステム (opens in a new tab) や Kotlin の Flow (opens in a new tab)、また Haskell (opens in a new tab) のモナドやアロー、Verilog (opens in a new tab) などの HDL 言語、Nintendo Switch「ナビつき! つくってわかる はじめてゲームプログラミング」 (opens in a new tab)、Factorio (opens in a new tab) というゲームに影響を受け、これらの対象に共通してみられる「流れ」の概念を取り出して、なるべくシンプルな形で表そうとしました。
例
flow のプログラムの構文は単純です。以下の例の詳細な説明は後ほど行うので、まずは flow の雰囲気をご紹介します。
> 1 + 2 -> output
3
3
3.
> @a'0 -> trace -> + 1 -> @a
0
1
2
3.
> if (blink == 0) (then:-> 2 ->) (else:-> 3 ->) merge -> output
2
3
2
3.
> copy 2 (-> * 2 ->) (-> + 1 ->) pair -> output
(4, 3).
> [1, 2, 3] -> map -> * 2 -> unmap -> output
[2, 4, 6].
インストール
flow は Haskell で開発され、WebAssembly のバイナリとして配布されています。そのため、このブラウザ上でも試すことができます。ブラウザ上で試すには、以下の URL にアクセスしてください。
https://playflow.vercel.app (opens in a new tab)
また、 wasmtime (opens in a new tab) などのランタイムを用いて、ローカルで実行することもできます。 GitHub のリリース (opens in a new tab) から、最新版の flow をダウンロードしてください。
次のようにして実行できます。
$ wasmtime flow-lang.wasm