Factor
![]() | 「Factor」のその他の用法については「ファクター」をご覧ください。 |
パラダイム | スタック指向(英語版) |
---|---|
登場時期 | 2003年 |
開発者 | Slava Pestov(ロシア語版) |
最新リリース | 0.99 / 2023年8月24日 (12か月前) (2023-08-24)[1] |
型付け | 強い動的型付け |
影響を受けた言語 | Joy, Forth, LISP, Self |
影響を与えた言語 | Cat |
プラットフォーム | Windows, Mac OS, Linux その他 |
ライセンス | BSDライセンス |
ウェブサイト | factorcode.org |
テンプレートを表示 |
Factor は、動的型付けの連鎖性(concatenative)プログラミング言語であり、Slava Pestov(ロシア語版)が設計と実装を行った。Factor に影響を与えた言語として、Joy(英語版)、Forth、LISP、Self がある。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言語のような標準仕様は存在しないが、言語仕様文書は豊富である。