
2026/08/07 21:28
Show HN: Wyzer プログラミング言語
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Wyzer は、Choreographic Programming と Perceus メモリモデルを統合して分散安全性を実現する静的型付け・コンパイルプログラミング言語です。Rust 並みのメモリ安全性と並列性の保証を目標としながら、所有則の複雑さやガベージコレクションによるオーバーヘッドを回避します。Wyzer では、実行前に全スレッドおよびプロセス向けにコードを生成するための統一された「ネットワークルール」を採用し、事前に安全性を検証して分散システムにおけるデッドロックを防ぎます。安全性は、隠蔽された例外や重い非同期パターンではなく、明示的な
Result<T, E> 型とエラー処理用の match 表現を通じて強制されます。変数はデフォルトで不変(let)であり、可変性には var、コンパイル時定数には const が使用されます。メモリ管理は Koka と Lean 4 に着想を得た参照カウント技術に依存し、値が単一の当事者によって所有されている場合に機能風な更新をサポートします。言語は標準的な制御フロー(括弧なしの if、while、for)を提供し、構造体フィールドへの直接アクセスを許可します。現在早期の研究段階で未解決の技術的課題が残っており、Rust の安全性保証を学習曲線やガベージコレクション言語に見られる予測不可能さの問題なしに提供することを目的としています。主要なリソースには、導入、変数、制御フロー、関数、構造体、メモリモデルを扱う公式ドキュメントが含まれ、貢献者は RESEARCH.md を参照すべきです。コミットメッセージの生成、研究の統合、ブランド/ロゴデザインには AI アシスタンスが使用されました。本文
Wyzer: シンプルで分散安全なプログラミング言語
「簡素さは権威の欠如を意味するものではなく、権威そのものに対する虚飾のなさです。」— アティクシ・シャルマ
Wyzer は、振る舞いプログラミングと Perceus メモリモデルを採用した、静的型付けかつコンパイルされるリソース指向型のプログラミング言語です。
背景と課題
Rust がプロセス内での安全性を保証する一方で、以下の課題にはまだ対処していません:
- 分散デッドロック
- プロトコルの不一致
- クロス・サービス間の正当性(正しさを保証すること)
これらの問題を解決するために、Wyzer は**「振る舞いプログラミング」**という概念を導入しました。これは、複雑なネットワーク問題に対処する少数の真剣な試みの一つです。
貢献を歓迎しています。
- 言語に貢献したい方は RESEARCH.md をご確認ください。
- Discord サーバーに参加することも可能です:https://discord.gg/RhpPhkTrVu
公式ドキュメント
Wyzer のプログラミング手法を詳しく学ぶには、以下のセクションを確認してください:
Wyzer プログラミングの概要
Wyzer は簡素で、明確であり、かつ読みやすく設計されています。以下はコードを書くための概要です。
1. 変数と型
すべての要素には明確な型が付けられ、変数はデフォルトとして**不変(変更できない)**です。
- 変数を変更したい場合は
の代わりにlet
を使用してください。var - コンパイル時定数には
を使用します。const
fn main() { const MAX: u32 = 100; // コンパイル時定数 let x: u32 = 10; // 変更できない var y: u32 = 20; // 変更可能 y = y + x; std::io::println(y); }
2. 構造体とデータ
カスタムデータ構造を定義し、そのフィールドに直接アクセスできます。
struct Point { x: u32, y: u32 } fn main() { let p: Point = Point { x: 10, y: 20 }; std::io::println(p.x); }
3. コントロールフロー
標準的な
if/else、while、および for ループをサポートしています。ループでは条件を囲む括弧は不要です。
fn main() { let mut i: u32 = 0; while i < 3 { std::io::println(i); i = i + 1; } }
4. エラー処理と Match
エラーは隠されません。失敗する可能性がある関数は
Result<T, E> を返します。match 式を使用して、成功(Ok)およびエラー(Err)の両方を安全に処理します。注意:match は式なので、単独で文として使用する場合に末尾にセミコロンが必要です!
fn main() { let result: Result<u32, str> = Ok(42); match (result) { Ok(value) => std::io::println(value), Err(err_msg) => std::io::println(0) }; }
FAQ:概要と革新性
数学的な知識なしに簡単に理解できるガイドです。
1. Wyzer とは?(1 つの段落で)
Wyzer は「リソースの所有権が誰にあるかが明確でないことが、メモリバグやデッドロックなどの原因である」という一つのアイデアに基づいています。Rust がメモリ管理、並行処理、ネットワークという 3 つの異なるアプローチを採用するのに対し、Wyzer はこれらすべてに適用される単一の所有権ルールを採用しています。
2. なぜ新しい言語を作るのでしょうか?
既存のオプションの良い点を引き継ぎつつ、何が素晴らしいかに基づいて設計されました。
- Rust: ゴーカコレクションを使わずに安全なメモリ管理が可能です。しかし、学習曲線が急勾配で、一般的なコード構造を書くのが困難です。
- Go, Java, C#, Python: ゴーカコレクターを使用するため使いやすさは高いですが、速度が遅く予測がしにくいです。リアルタイムシステムには適していません。
- ネットワークプログラミング: 現在では手作業で行われることが多く、プログラム同士が互いに正しく通信することを願う必要があります(失敗するとバグ)。
Wyzer の目標: Rust の安全性を維持しつつ学習のハードルを下げることであり、その単一のルールを使ってネットワークプログラムをも安全にすることです。
3. 実際の新規性は何か?
多くの構成要素は既にあるもので、新しくなのはそれらを組み合わせることです。
- Perceus リファレンスカウント: Rust の複雑さなしで高速なメモリ管理を実現(Koka と Lean 4 から借用)。
- 振る舞いプログラミング: 全てのコンピュータ用のコードを生成する単一のネットワークルールを作成(学術研究から借用)。
- 適用範囲の拡大: このアイデアをネットワークだけでなく、スレッドや中断(インタラプト)にも適用。同じルールでメモリの安全性、中断の安全性、そしてネットワークの安全性を保証します。
メリット: メモリ、スレッド、ネットワークを安全に管理するために学ぶべきルールは一つだけです。
4. コアな設計原則
- 一つの書き方: 同じものを記述する二通りの方法があれば、片方を削除します。
- 魔法は隠さないが、清潔に保つ: 重要なことはコード内に可視化されますが、余分なボイラープレートは不要です。
- コンパイラに任せるが、混乱を避ける: コンパライラに仕組みを理解させますが、複雑になりすぎた場合は明確なルールが必要です。
- 未完成であることを正直に伝える: 未解決の問題を明確に示します。
5. コアの意味論(平易な言葉で)
- メモリ(第 5 章): データを変更しない関数的コードを書きます。データの所有者が一人だけの場合、コンパイラが直接メモリを更新します。ゴーカコレクションやライフタイムルールなしで C と同等の高速性を得られます。
- 所有権が全て(第 3, 6, 7 章): リソースを使用した後には二度と使用できないというルール。これはメモリ、ネットワークメッセージ、ハードウェア中断に適用されます。
- 安全なネットワーク(第 6 章): 通常の関数を書いて型で所有権を示します。コンパイラがネットワークルールを自動的に導出し、検証してくれます。実行前にデッドロックやメッセージの損失を検出します。
- 非隠れたコントロールフロー:
や分割などの暗黙的な処理はありません。エラーは標準的な型として返され、隠された例外として扱われません。async/await
6. よくある質問
| 質問 | 回答概要 |
|---|---|
| これは Rust を複雑にしているだけではありませんか? | いいえ。安全性を維持しつつ学習曲線を下げており、ネットワーク機能を実装しています。 |
| 振る舞いプログラミングはすでに解かれた研究分野ではありませんか? | 数学的には成立していますが、実用的な言語での使用は稀です。汎用言語へ持ち込むことを目指しています。 |
| なぜ独自の方法を使うのですか? | 特定の問題を解決するツールを使わずに、単一のルールでメモリ、スレッド、ネットワークのすべてを同時に解決できるかを試みています。 |
| これは本番環境で使えますか? | 正直に申し上げますと、早期の研究段階です。いくつかの大きな問題はまだ未解決です。 |
| 一言で言うと何ですか? | メモリ、スレッド、ネットワークのための単一の所有権ルール。ゴーカコレクションなし、複雑な Borrow Checker なし、そしてネットワークエラーなし。 |
AI による支援
本プロジェクトにおける AI の活用状況:
- コミットメッセージの作成に AI を使用。
- 研究(振る舞いプログラミングや Perceus メモリモデルの詳細な理解)に AI を使用。
- ブランドデザインとロゴ設計に AI を使用しました(素晴らしいアイデアへの感謝)。
顕著な例
- donut.wyz:有名なトーラス(ドーナツ)を Wyzer で再実装したプロジェクトです。