Factor/FAQ/Factor はどんな言語か

サンプルプログラムはどこにありますか?

この wiki のサンプルプログラムのページを参照してください。

ワードとクォーテーションに区別があるのはなぜですか?

ワードとクォーテーションが使われる場所は異なります。Factor プログラムはワードから作られており、ワード自体もほかのワードの合成 (composition) です。ワードは名前を書くだけで呼び出されます。ワードには、コードのほかにも、モジュールやソースの場所などに関するメタデータが含まれています。ワードがスタック上にある場合、そのワードは execute で呼び出します。一方、クォーテーションはほとんどのコンビネータで使われるコード‐データで、ワードに関連付けられているものと同じメタデータは関連付けられていません。クォーテーションは call で呼び出します。

Factor は、たとえば Haskell のような純粋関数型ですか?

いいえ。Factor では任意の副作用を容認しており、標準ライブラリにはミュータブルなデータ構造と命令型の I/O が数多く含まれています。

なぜ純粋関数型ではないのですか?

いろいろなことがはるかにシンプルになるからです。Haskell とは異なり、効果のシーケンスを明示的に示す必要はありません。(Factor でモナドや一意型のようなものを実装した人はいませんが、もしそのような開発をしてくれる人がいれば歓迎します。) ミュータビリティを採り入れることで、さまざまなアルゴリズムをいっそう幅広く利用できるようになります。たしかに Factor のコードを純粋関数型のように記述することはできますし、いろいろと興味深い可能性をそこに見い出すことができるでしょう。Factor が実現しているような高い柔軟性を持つ純粋関数言語でメタプログラミングを設計することはおそらく可能だと思いますが、実際にはまだ誰も実現していません。

Factor はなぜ静的型付けではなく動的型付けなのですか?

基本的には上と同じ理由からです。つまり、いろいろなことがよりシンプルに柔軟に行えるようになり、高いレベルのメタプログラミングが可能になるからです。また、連鎖性言語のための十分に柔軟性のある型システムもまだ設計されていません。ただし、Factor 2.0 では、適切な型システムが見つかれば、静的型付けをオプションとして採り入れる可能性があります。

Factor に変数はありますか?

あります。locals ボキャブラリには静的スコープを持つ変数があり、namespaces ボキャブラリには動的スコープを持つ変数があります。前者はワードにローカルで、後者はワード間のやり取りに使われます。

動的スコープを持つ変数は避けるべきではありませんか?

デフォルトであらゆるところで使われるとすれば、そのとおりです。通常データはスタックを使って、つまり locals を使って受け渡しが行われます。動的スコープを持つ変数は、もっと広範囲にわたる処理、たとえばカレント入出力ストリームなど、データを構文的に (lexically) に渡すことが不便で反復的になってしまう場合に使われます。

スタック操作ワードに dupswapdrop といった名前が付けられているのはなぜですか? なぜ単に x-xxxy-yxx- のようにしなかったのですか?

ニーモニックを使用すると、実際に行われる抽象的なデータフローを想像することができるので、ほとんどすべての場合でコードの意味がより明確になります。xyz-xzyxxy のような不可能なスタック操作を行う必要がある場合は、コードを書き換えて、別の抽象化、たとえばデータフローコンビネータlocals を使ってください。

Factor のライセンスは?

Factor は、宣伝条項ないし広告条項 (advertising clause) なしの BSD スタイルライセンスに基づくフリーソフトウェアです。つまり、Factor のソースまたはライブラリと一緒にライセンスと著作権表示を配布する限り、ユーザーは Factor を使ってどんなことでもできるということです。ユーザーは、クローズドなソースや GNU GPL ライセンスのプロジェクトに使う目的で、Factor や Factor の配布物に含まれる任意のコードを完全に自由に使用できます (ただし、別に定めがある場合はこの限りではありません)。そのことを示すために、Factor とともに配布されているすべてのコードファイルの先頭には、次のような記述があります。

! Copyright (C) 2007 Manuel Lopez Garcia.
! See http://factorcode.org/license.txt for BSD license.

GPL や LGPL ではなく BSD ライセンスを選択したのは、再利用をより柔軟に行えるためです。ただし、その結果として、Factor の配布それ自体には GPL または LGPL のコードを受け入れることはできません。

This revision created on Fri, 17 Jul 2009 23:08:32 by slava