Lingua Francaが競合状態を構造的に排除する並行プログラミング言語を提唱

Intuitive concurrent programming in any language

Lingua Francaは、UC Berkeleyで開発されたリアクター指向のコーディネーション言語だ。C、C++、Python、TypeScript、Rustでリアクター本体を書きつつ、スレッド管理や同期、競合状態を設計段階で排除できる。時間の意味を言語コアに組み込み、単一ノードから分散システムへの移行も最小限の変更で実現する。

もしPlayerクラスが自身の選択を明かす前に相手の選択を観測しようとすれば、Lingua Francaの因果解析が因果ループを検出し、そのプログラムは無効だと教えてくれる。
  1. gbin

    このアイデアが気に入ってロボティクス分野で仕事をしているなら、copper-rsを試してみてほしい。同じ根底にあるコンセプトで動いているが、Rustのコンパイル時 + グラフ記述で実現している。

    カーネルへの最新の追加はプロファイル誘導スケジューリング機能で、決定論的なログから得た過去のタイミング測定に基づいて、コンパイル時になおグラフの並行性を最適化できるようにしてくれる。

  2. samuell

    コード例を見ると、フローベースプログラミングの「ポート」の概念を取り入れているようで、それが最大の強みの一つかもしれないと思った。

    player2.reveal -> player1.observe

    player1.reveal -> player2.observe

    つまり、コンポーネント間だけでなく、個々の入力/出力の間でデータフローの接続を可能にしている。そうでなければ制約が大きすぎて、通常はそのルーティングを扱うために余計な構文が大量に必要になる。

    ずっと前にワークフローシステムの文脈でこれについて書いた(https://livingsystems.cc/posts/workflows-dataflow-not-task-d...)

    ---

    編集 11:12 CET:ここで自分が考えていたことをより的確に表しているのは「名前付きポート」だということに気づいた。下のコメントで詳しく述べている。

  3. XCabbage

    一見しただけでは、これが何の課題を解決するためのものなのかよく分からない。並行処理を含む簡単なサンプルプログラムを素のPythonで書いた例、次に並行性のエラーを避けるために必要な面倒な帳簿付けと、陥りやすい罠についての議論、そして同じものをLingua Francaで実装するとどうなるか、それがどうやって帳簿付けと罠を排除するのかの説明、という流れが見られると嬉しい。

この日のほかの記事

2026-10-17