2009-04-16 11 views
6

彼の記事The Nature of Lispで、Slava Akhmechetは、Ant/NAntを例に挙げてlispに人々を紹介します。 LispにAnt/NAntの実装がありますか?あなたが物を定義するためにxmlの代わりに実際のlispコードを使うことができる場所はどこですか?私はNAntへの追加を作成することに対処しなければならず、Slavaのショーを行う方法でxmlシステムをバイパスする方法を願っていました。LispのAnt(またはNAnt)

答えて

12

アリは、いくつかのXML言語で書かれたコマンドを解釈するプログラムです。あなたは答えたところでjustinhjが言及しているように(上記のXMLispのような)いくつかのXMLパーサを使用して、何らかの種類のLispデータのXML記述を変換して、Lispに追加のコードを書くことができます。 Antの解釈のいくつかを再実装する必要があります。

Antのプリミティブなものの多くは、Lispでは必要ありません。いくつかのファイル操作は、Lisp(delete-file、rename-file、probe-file、...)に組み込まれています。いくつかは欠けており、実装する必要があります。代わりに、既存のライブラリの1つを使用することもできます。また、LispファイルをLispにロードしてコードを実行することができます(REPLもあります)ので、すでに対話型のフロントエンド(Javaと異なります)が付属しています。

Common Lispの上位レベルビルドシステムでは、通常、「SYSTEM」という抽象化が実装されています。それらのいくつかがあります。 ASDFが人気のある選択肢ですが、他にもあります。システムにはサブシステムとファイルがあります。システムにもいくつかのオプションがあります。そのコンポーネントにもオプションがあります。システムには、コンポーネントの構造記述、依存関係の記述、または「アクション」とその依存関係の種類記述があります。通常、これらはオブジェクト指向の方法で実装され、Lisp(汎用)関数として 'アクション'を実装することができます。 LispはCOMPILE-FILEのような関数も持っています。これはLispコンパイラを使ってファイルをコンパイルします。あなたのコードがCファイルを持っていれば、外部のプログラム(ここではCコンパイラ)を呼び出すことができる実装固有の関数によって、Cコンパイラを呼び出す必要があります。

dmitry-vkで言及されているように、ASDFが一般的です。 LispWorksはCommon Defsystemを提供します。 Allegro CLには独自のDEFSYSTEMがあります。そのDEFSYSTEM manualにも拡張方法が記載されています。

すべてのLispソリューションは、通常、システムを記述するマクロによって実装されたLisp構文(XML構文ではない)を使用しています。それがLispに読み込まれると、それはデータ表現に変わります - システム、モジュールなどのCLOSインスタンスを持つことがよくあります。アクションはLisp関数です。いくつかの高次関数は、コンポーネントグラフ/ツリーを歩き、必要なアクションを実行します。他のいくつかのツールがコンポーネントグラフ/ツリーを辿ってアクションの表現を返します。提案されたプランです。ユーザーはLispにプラン全体またはプランの一部を実行させることができます。Lispマシン上で

は、シンプルなシステムの説明は、次のようになります。

(sct:defsystem scigraph 
    (:default-pathname "sys:scigraph;" 
    :required-systems "DWIM") 
    (:serial "package" "copy" "dump" "duplicate" "random" 
      "menu-tools" "basic-classes" "draw" "mouse" 
      "color" "basic-graph" "graph-mixins" "axis" 
      "moving-object" "symbol" "graph-data" "legend" 
      "graph-classes" "present" "annotations" "annotated-graph" 
      "contour" "equation" "popup-accept" "popup-accept-methods" 
      "duplicate-methods" "frame" "export" "demo-frame")) 

は、上記のシステムSCIGRAPHを定義し、すべてのファイルはシリアル順序でコンパイルしてロードする必要があります。

今私はLispマシンがコンパイルされたコードを更新するためにどうなるのか見ることができます。

 
Command: Compile System (a system [default Scigraph]) Scigraph (keywords) 
         :Simulate (compiling [default Yes]) Yes 

    The plan for constructing Scigraph version Newest for the Compile 
     operation is: 
    Compile RJNXP:>software>scigraph>scigraph>popup-accept-methods.lisp.newest 
    Load RJNXP:>software>scigraph>scigraph>popup-accept-methods.ibin.newest 

それは一つのファイルをコンパイルし、それをロードします - 私は、ソフトウェアがロードされ、これまでのところだけ、このファイルを変更しました。

ASDFの場合、CLIKIページに記載されているマニュアルを参照してください。動作が少し異なります。

+0

答えに時間を費やしてくれてありがとう! Antの私の最大の牛肉は、XMLを使用しているので、基になる言語の力を直接使用して操作を実行することはできないと思います。 xml側に "移植"された操作(関数)のみが利用可能です。私がLispで実装されたシステムで見られる美しさは、すべてのlispが利用可能であり、ネイティブ関数用のXMLラッパーを作成する必要がないということです。 – Daniel

1

おそらくあなたはlispで物を定義し、それらをNAntに渡した時点でXMLに変換することができます。

XMLispのようなものは、2つの表現の間を行き来するのを容易にします。

編集:実際には、xml-emitterが理にかなっています。

+0

xmlがメタ言語であったため、実際に実装言語を使用できなくなってしまったということでした。 Ant/NAntがlispを使って実装されていれば、すべてのノードでlispの力を使うことができます。これは魅力的ですね! – Daniel

+0

それは本当です、そして私はあなたがそのビルドシステムで任意のpythonを実行できるので、Sconsがこれの例であると思います。 一方、ビルドコードのための簡潔で表現力豊かな言語を進化させたmakeやjamのような成熟したビルドシステムは、lispの考え方があまり役に立たないと思います。 – justinhj

1

Common LispのASDF(Another System Definition Facility)は、Make/Antに似ています(ただし、完全なアナログではありません。makeやantのような汎用システムではなく、lispプログラムの構築を目指しています)。これは、Lispコード(システム、コンポーネント、システムへの操作のサブクラス化)で拡張可能です。たとえば、Cソースファイルをシステムに組み込む(およびコンパイルする)ことを可能にするasdf-ecs拡張があります。

4

スチュアート・ハロゲイの今後の書籍Programming Clojureは、本アプリ全体の例として、Lancetの構築を行っています。ランセットはClojureビルドシステムで、(オプションで)Antと直接統合することができます。ソースコードと例はavailableです。

Lispコードを使ってAnt XMLファイルを生成するだけなら、Clojureにはclj-html、Common LispにはCL-WHOのようなものを使うことができます。 LispからXMLを生成するs-expsは楽しく簡単です。

関連する問題