Factor/FAQ/Factor について

ほかの言語とくらべて Factor が優れているのはどんな点ですか?

Factor は以下のような特徴を備えています。1 つの言語でこれらの特徴すべてを兼ね備えている例は、ほかにはほとんど見当たりません。

Factor が得意とする分野は? どんな場面で使うのがベストですか?

Factor は何にでも使えます。すでにこれまで、スクリプティングから、ウェブアプリケーション (Furnace を参照)、ゲーム、XML パーサまで、あらゆるものに使われています。

Factor の目的は?

Factor は、強力な抽象化機能を備えた新しい実用的な連鎖性言語を作成する試みです。Factor はとりわけインタラクティブな開発に向いています。

Factor はなぜスタックベースなのですか?

連鎖性言語とスタックベースの言語は、80 年代に Forth の影が薄くなり始めて以来、プログラミングコミュニティからあまり注目されなくなっています。連鎖性言語のページでは、連鎖性言語のプログラミングパラダイムの利点をいくつか取り上げて解説しています。基本的な語法をいったん学べば、適用型言語を使用する場合とくらべて、連鎖性言語では多くのプログラムをより明解に表現できることがわかるでしょう。

自分が次に作成するプログラムに Factor を使用できますか?

十分可能でしょう。Factor を使用できないケースは、ごくわずかです。たとえば、TI-83 電卓を Factor でプログラムすることは不可能でしょう。Factor のフットプリントは少なくとも Factor のイメージと同じくらいの大きさがあり、イメージのサイズを最小限に切りつめても、ほとんどのプログラムでは最低 500 KB になります。ブートローダやその他の低水準コードを Factor で記述するのも大変な作業になります。しかし、そうした極端なケースを除けば、Factor はほとんどどんな場合にも使用できます。

Factor はクロスプラットフォームですか?

Factor のイメージは、ある特定のプラットフォームでしか動作しませんが、同じ Factor のソースコードは、Factor が移植されているあらゆるプラットフォーム上で簡単に実行できます。移植性に関して問題が起きるのは、ネイティブライブラリと組み合わせて使う場合か、バグがある場合だけです。

Factor は Forth とどう違うのですか?

Forth には型付けとガベージコレクションがなく、マシンに近い言語です。フロー制御に関しては、Forth はイミディエイトワード (immediate word) を使う傾向があります。変数と配列はグローバルになることが多く、プログラムは通常、関数形式では記述されません。Factor は、こうした点で Forth と大きく異なっています。Factor は動的型付けの言語で、高いレベルのリフレクションを提供しています。参照されなくなったオブジェクトについては、世代別ガベージコレクタによってガベージコレクションが行われます。Factor のコードはマシンからやや距離を置いていますが、C FFI によって mallocmmap といったワードを使うことができます。フロー制御に関しては、Factor は一般にクォーテーションを使用し、柔軟な高階関数を作成できます。定義とデータリテラルについては、ほとんどの場合、パーシングワード (parsing word) が使われます。変数は動的スコープまたは静的スコープを持ち (以下を参照)、配列は単なるオブジェクトであって、特別な処理は必要ありません。またポインタについて考える必要はありません。ただし Forthでは、2、3のワードでポインタに相当するものを用意することができます。Factor はいわゆる関数型プログラミング言語です。

Factor のプログラムが既存のワードの合成であるなら、どのような仕組みでほかのプログラミング言語と同様の強力な機能を実現しているのですか?

Factor はチューリング完全なプログラミング言語で、Factor のプログラムでは、ほかの任意のプログラミング言語ができることなら何でもできます。実際、スタックベース言語のワードが引数をいくつ取るかわかっていれば、スタックベースの言語と適用型言語との間でプログラムを変換することはそれほど難しくありません。

なぜ新しいスタックベースの言語が必要なのですか?

ほかのスタックベースの言語が、高度な開発には適さないからです。Forth は低水準な領域では威力を発揮しますが、型システムとガベージコレクションが欠如しているためにプログラムのデバッグが困難で、関数型プログラミングともなじみません。Joy は非常に大きな理論的成果を上げましたが、効率的なコンパイルが難しく、構文は拡張不可能で、モジュールシステムも不十分です。また、Joy はほぼ純粋関数型であるために、さまざなことを困難にしています。Factor は、Forth と Joy という 2 つのシステムの最良の部分を組み合わせて作られており、ほかのさまざまな言語からも多くのものを受け継いでいます。

This revision created on Sun, 11 Jan 2009 09:15:18 by slava