はじめに

vibe は WebAssembly にコンパイルされる静的型付け関数型言語で、関数の 署名が「何を受け取り何を返すか」だけでなく「何をしてよいか」まで語ります。

考え方はそれだけで、見た目はこうなります:

触れません。できるなら署名にそう書いてあるはずだからです。

処理するか自分も宣言するかのどちらかで、どちらなのかはコンパイラが決めます。

要求していないからです。

多くの言語では、これらは本体の中にある事実で、注意深く読んで気づくか、 本番で驚かされて知ることになります。vibe ではそれが型にあり、検査され、 そして合成されます。

これが嬉しい理由

関数の中身を読まずに何をするか分かる。 row は署名の一部なので、 「これはディスクに書くか」は宣言を見れば答えが出ます。呼び出し先を 全部追う必要はありません。

権限はビルド時に決まり、実行時に祈る対象ではない。 ネットワークを 要求しなかったプログラムはネットワークに到達できず、生成される wasm モジュールは拒否したケーパビリティのコードを含みません。

コンパイラは推測より停止を選ぶ。 診断と黙った誤りの両方がありうる とき、vibe は診断を取ります。しかもメッセージは、あなたのプログラムを 直す編集から始まります。

頭に入る大きさ。 1つの概念に1つの綴り。 cheatsheet は1ページに収まっていて、この本は そこに理由を書き足したものです。

vibe は wasm にコンパイルされ、自分自身で書かれています — コンパイラは committed seed からビルドされる vibe プログラムなので、vibe をいじるのに 第二のツールチェインは要りません。系譜は Rust / MoonBit / Koka / Verse です。

この本の読み方

最初から順に読んでください。各章は前の章を前提にしています。

インストールと Hello, vibe でツールチェインを 動かし、小さなプログラムではまだ教わって いない機能を使った40行の電卓を読みます — この言語が自分向きかを早めに 判断してもらうための章です。

続く5章が、本書の残り全部を書くための語彙を作ります: 値と関数、制御フロー、 型と文字列、ミューテーション、そして構造体・列挙・matchエフェクト に必要なのはそれで全部なので、 エフェクトが8章、ケーパビリティ がその次です。 この2章がこの言語の存在理由であり、以降の章はすべてこの2つの上に書かれて います — Exception はエフェクトなのでレールウェイは row を知ってから 読む方が通りますし、テストは自分が走るケーパビリティを宣言しますし、 並行プログラムは中断するエフェクトです。

残り — レールウェイ、モジュールとテスト、コレクションと反復、 ジェネリクスと等価性、並行処理、wasm 周りのツール — がそれを埋めます。

サンプルコードについて

この本の vibe run ブロックはすべて現行コンパイラで実際にコンパイル・ 実行されており、直後の output ブロックはその実行結果そのものです。 言語が変われば、本は黙って古びるのではなくビルドに失敗します。意図的に 実行できない例には理由付きで vibe skip ` が付いています。

この本の記述とコンパイラが食い違ったら、正しいのはコンパイラで、記述の方が バグです — 報告してください。

英語版が原本で、日本語版は同じプログラムを走らせます。コードブロックは 両者で同一で、翻訳されるのは散文だけです。

本のビルドと描画については [book/README.md](../README.md) を参照。

次: インストールと Hello, vibe