UStackUStack
Franz icon

Franz

Franzは、短い構文と字句スコープを備えたプロトタイプ指向の関数型言語。LLVM IRでネイティブ実行へ対応し、文字列・数・リスト操作も充実。

Franz

Franzとは?

Franzは、高水準で関数型、インタープリタ型、動的型付けの汎用プログラミング言語です。短い構文と豊富な標準ライブラリを備え、関数型プログラミングのパターンをサポートしつつ、エフェクトの管理と予測可能な実行を実現します。

このプロジェクトは、プロトタイプ指向の言語として提示されており、能力ベースの安全なエフェクトと決定論的なリプレイを備えています。「厳密に副作用なし」(IOに関する明示的な例外を除く)とされ、LLVM IRを介したソースからネイティブ実行ファイルへのパスも提供します。

主な特徴

  • 関数型コアとプロトタイプ指向オブジェクト:小さな関数型基盤とプロトタイプ指向オブジェクトを組み合わせ、関数型中心の言語設計を維持しながら振る舞いをモデル化します。
  • 能力ベースの安全なエフェクトと決定論的なリプレイ:インポートしたFranzファイルからのエフェクトを局所化・制御するための設計です。
  • 厳密に副作用なし(IOテーブルの例外付き):IOメカニズムを除き、言語モデルは副作用を避けるよう設計されています。
  • LLVM IRによるネイティブコンパイル:LLVM IRを用いてネイティブ実行ファイルへの直接コンパイルをサポートします。
  • リストリテラルとLLVMリスト操作:[1, "hello", 3.14]のようなリストリテラルやネストしたリストをサポートし、headtailconsempty?lengthnthis_listなどの操作を提供します。
  • 比較と数値計算のプリミティブ:整数、浮動小数点、文字列に対する比較演算子(isless_thangreater_than)と、remainderpowerrandomfloorceilroundabsminmaxsqrtなどの数<|eos|>

代替案

  • 強い型システムを持つ関数型プログラミング言語(ML系言語など):関数型構文と予測可能なスコープ・クロージャを主に求める場合で、LLVMベースのネイティブコンパイルを重点的に必要としない場合に適しています。
  • プロトタイプベースの言語(関数型パターンを取り入れたJavaScriptなど):プロトタイプ指向のオブジェクトモデリングに関心がある場合に有用ですが、Franzで説明されるワークフローやエフェクトモデルとは異なります。
  • 関数型機能を備えた汎用コンパイル言語(LLVM経由でコンパイルされる言語など):LLVM IRコンパイルと関数型構文を求める場合で、異なる構文やランタイム規約を持つエコシステムを好む場合に適しています。
  • サンドボックス方式を採用したプロトタイピング用スクリプト言語:制御された実行環境で素早く実験することを優先する場合(リポジトリではケーパビリティベースのセキュリティパターンが議論されています)、独自のサンドボックス機構を提供する別のランタイムを選択できます。