はじめに
vibe は WebAssembly にコンパイルされる静的型付け関数型言語で、関数の 署名が「何を受け取り何を返すか」だけでなく「何をしてよいか」まで語ります。
考え方はそれだけで、見た目はこうなります:
fn parse(s: String) -> Intは失敗できず、印字もできず、ディスクにも
触れません。できるなら署名にそう書いてあるはずだからです。
fn parse(s: String) -> Int with Exceptionは失敗しえます。呼び出し側は
処理するか自分も宣言するかのどちらかで、どちらなのかはコンパイラが決めます。
fn main with Consoleは端末に書き込んでよい。ファイルは読めません。
要求していないからです。
多くの言語では、これらは本体の中にある事実で、注意深く読んで気づくか、 本番で驚かされて知ることになります。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) を参照。