Factor

Factor
パラダイム スタック指向英語版
登場時期 2003年
開発者 Slava Pestovロシア語版
最新リリース 0.99 / 2023年8月24日 (9か月前) (2023-08-24)[1]
型付け 強い動的型付け
影響を受けた言語 Joy, Forth, LISP, Self
影響を与えた言語 Cat
プラットフォーム Windows, Mac OS, Linux その他
ライセンス BSDライセンス
ウェブサイト factorcode.org
テンプレートを表示

Factor は、動的型付けの連鎖性(concatenative)プログラミング言語であり、Slava Pestovロシア語版が設計と実装を行った。Factor に影響を与えた言語として、Joy英語版ForthLISPSelf がある。2023年8月現在の最新バージョンは 0.99。

概要

他の連鎖性言語と同様、Factor も逆ポーランド記法構文であり、関数の名前を書く前にその引数を記述する。例えば、Factor での Hello world は次のようになる。

 "Hello world" print

Factor は動的型付けであり、そこにユニークなオブジェクトシステムが伴っている。Factor のプリミティブ型は数少なく、ユーザーや標準ライブラリではタプルなどの機構を使って独自のクラスを作成できる。継承はサポートされていないが、Self のような委譲がサポートされている。また、型やタプル以外のクラスを作る方法もあり、述語(predicate)クラスや共用体(union)クラスがサポートされている。Factor の組み込み複合データ型としては、固定長および可変長の配列ハッシュテーブルがある。浮動小数点数もサポートされていて、任意長の整数もある。連結リスト複素数分数は標準ライブラリで実装されている。

当初はインタプリタだけだったが、現在では完全なコンパイラがある(非最適化コンパイラは、基本的にインタプリタのループを展開しただけのものである[2][3])。最適化された機械語を生成するコンパイラは全てFactorで書かれている。実行ファイル形式の出力はせず、Smalltalkのようなイメージファイルとして機械語コードをセーブする。このイメージファイルを実行するための最小限の機能(VMなど)を持つ配布ツールと共に配布する。

スタックシステムでは不十分な場合のために、静的スコープ動的スコープもサポートされている。Factorには様々なライブラリがあり、ボキャブラリ継続HTTPサーバとWebフレームワーク、OpenGLバインディングGUIライブラリ、XMLパーサ、などがある。

Factor は対話型のテスト駆動開発に適した言語となることも目標としており、そのためにFactorは根本的にはForthの安全なバージョンとなっている。動的型付けだが、コンパイラはスタックの深さをコンパイル時に把握している。

LISP的機能

Factor はLISPの機能も数多く採り入れている。同図像性(homoiconicity)構文、ガベージコレクション高階関数、コンパイル時評価、read-eval-printループ、treeshaker などである。

ただし、表面的な見た目は逆ポーランド記法であるため、LISPとは逆に見える。つまり関数呼び出しの入れ子は、LISPの場合外側の関数が前に記されるが、Factorでは逆に後になる。これは、連鎖性言語であることの本質的性質である。

処理系

これまで、Javaによる実装とC言語による実装がされている。ただし、Javaによる実装はあまり使われず、既に保守されていない。C言語版は、徐々にセルフホスティングによって Factor に置き換えられつつあり、C言語で書かれた部分は少なくなっている。

Factor はC言語のような標準仕様は存在しないが、言語仕様文書は豊富である。

脚注

  1. ^ Factor 0.99 now available [1]
  2. ^ Two-tier compilation comes to Factor 2007年9月10日
  3. ^ Compiler overhaul 2008年1月8日

外部リンク