Introduction

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