GNU Make 4.0がリリースされた。
今回のリリースでは、GNU MakeはSchemeの実装であるGNU Guileを組み込んだ。これにより、Makefileの中でSchemeが書けるようになる。
その機能は、GNU Make ManualのGuile Functionの項目で説明されている。まだ、オンライン版のGNU Make Manualが2010年から更新されていないので、コミット時のドキュメントの差分のリンクする。
具体的な組み込み方法としては、make側にguileという関数が追加され、この引数に文字列を与えると、SchemeとしてGuileで処理されるようになる。おそらく、このように。
Hello.o : $(guile (string-append "hello" ".c" ) ) ...
makeはguileを使ってguile関数を評価し、結果の文字列を、makeへの文字列として評価する。また、displayなどの副作用による文字列も、makeで評価される文字列になる。副作用による文字列のみを使う場合、文法エラーを防ぐために、#fを返す。
文字列以外の型にたいしても、GNU Make用の文字列への変換方法が規定されている。例えば#fは空文字列になり、#tは非空文字列になる。シンボルや数値や文字はそのまま文字列になる。リストは、要素はそれぞれ文字列になり、リスト自体は、Makeで処理することを考えて、平らな文字列にされる。たとえば、`'(a b (c d) e)'というリストは、Makeに返す文字列としては、'a b c d e'となる。これ以外の型を返すとエラーとなる。
Guile側にも、schemeの関数としてMakeの機能が与えられている。
gmk-expandは、文字列をひとつ引数にとる。文字列はmakeのルールに従って展開される。展開後の文字列が結果となるので、scheme側でさらにMakeで展開後の文字列をさらに処理できる。
gmk-evalは、文字列をひとつ引数に取る。文字列はあたかもmakefileに書かれているごとく、makeによって評価される。結果は空文字列である。
gmk-varは、文字列をひとつ引数に取る。文字列はmakeの変数として展開され、評価結果は展開後の文字列となる。
ドキュメントでは、大量の入力を、コマンドライン引数ではなく、テキストファイルとして受け取り、Guileを使ってテキストファイルを読み込んで処理する例が挙げられている。
たしかに、GNU Makeは相当に複雑な使い方をされているから、いっそのこと汎用的なプログラミング言語がほしいと思うのはわかる。しかし、Schemeというのはどうなのだろう。常々、学びたいとは思っているのだが、どうしても文法が・・・、いや、何も言うまい。
GNUである以上、「CとLispは両方ともシステムプログラミング言語として提供される」のは当然ともいえよう。
リチャード・ストールマン
Unixに自由を!
今年の感謝祭から、私は完全なるUnix互換ソフトウェアを書き、GNUと名付け(Gnu's Not Unixの略である)、使える者には誰にでも自由に与えるであろう。時間、金、プログラム、備品の貢献が切実に必要とされている。
まず、GNUとはカーネル並びにCプログラムを書いて実行するのに必要なすべてのユーティリティ、すなわちエディター、Cコンパイラー、リンカー、アセンブラー、その他の細々としたものである。その後、テキストフォーマッター、YACC、Empireゲーム、表計算、その他数百余のソフトウェアを追加する。いずれ、Unixシステムにある通常の便利なもの、オンラインとローカルのドキュメントを含む便利なものはすべて揃って提供できることが我らの願いである。
GNUはUnixプログラムを実行できるようになるが、Unixと一般ではない。他のオペレーティングシステムの経験から得られたあらゆる便利な改良を施すのだ。特に、我々は長いファイル名、ファイルバージョン番号、クラッシュ耐性のあるファイルシステム、たぶんファイル名補完、ターミナルから独立したディスプレイのサポート、そしていずれは、Lispベースのウインドウシステムを提供し、Lispプログラムと通常のUnixプログラムが画面を共有できるようにするであろう。CとLispは両方ともシステムプログラミング言語として提供される。UUCPよりはるかに優れた、MITのchaosnetプロトコルに基づいたネットワークソフトウェアも作る。ことによるとUUCPと互換性があるかもしれぬ。
私は何者か?
我こそはリチャード・ストールマン、EMACSエディターの元となるエディターを発明し、今はMITの人工知能研究所に籍を置いている。私はこれまで、コンパイラー、エディター、デバッガー、コマンドインタプリター、Incompatible Timesharing System、Lispマシンオペレーティングシステムに深く携わってきた。私はITSにおけるターミナルから独立したディスプレイサポートの先駆者でもある。さらに、私はクラッシュ耐性のあるファイルシステムを実装し、Lispマシン用のウインドウシステムを二つまで実装した。
なぜGNUを書かねばならぬのか
そもそも私は、良いと思うプログラムは、同感の他人と共有できなければならないと思うのだ。私はNDAやソフトウェアライセンス同意に署名することに違和感を覚える。
ゆえに、私の思想を維持してコンピューターを使い続けるためには、自由ではないソフトウェアを無視できるほどの、十分な自由ソフトウェアを集めようと決意した。
いかにして貢献できるか
私はコンピューター製造者にマシンと金の寄付を募っている。個人には、プログラムと労力の寄付を募っている。
あるコンピューター製造者が、すでにマシンを寄贈している。しかし、もっとあって困ることはない。マシンを寄贈すれば、早くからGNUがその上で動くことが期待できる。マシンは通常の居住空間で動作し、特別な冷却や電源を必要としないものが望ましい。
プログラマー個人は、Unixユーティリティの互換品を書いて私に送ることで貢献できる。ほとんどのプロジェクトにおいては、そのような片手間の分散作業は、管理しづらい。独立して書かれた部品はひとつにして動作させにくい。しかし、Unixの一部を置き換えるにあたっては、その問題は存在しない。ほとんどのインターフェース規格はUnix互換により固定できる。もし、それぞれの貢献がUnixのその他の中で動くのであれば、GNUでも動くであろう。
もし、金の寄付を受けたならば、何人かをフルタイムないしパートタイムで雇うことができる。給料は高くないが、金より人類への貢献を重んじる者を探している。これは、人生を変えるという使命感により、この作業で、能力ある者たちを全力でGNUに向かわせることができる方法である。
No comments:
Post a Comment
You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.