2011-12-18 6 views
14

Arcは、Racketの上に構築されています。どちらもLispファミリにあるので、Arc over Racketの利点、またはRacketが利用可能であることを前提としてArcを作成する動機は何か不思議です。アークオーバーラケットの利点

+7

PythonはCの上にビルドされているので、PythonのCより優れている点は何ですか?根底にある言語は、公開されていない限り、「トップレベル」の力にはあまり関係しません。 – drysdam

+11

アークは初期のウェブストアを作った人の虚栄心プロジェクトですが、何かがあるのは疑いがあります - スキームは、物事を行うための図書館のよく知られた、かなり普及した言葉です。 – Marcin

+1

DSLと全く別の言語を比較するのは馬鹿げているようです。私は "LiftWeb * or * Scala"や "Seaside * or * SmallTalk"や "Sinatra * or * Ruby"とは言いません。 –

答えて

21

あなた自身の言語を書くことは、ある意味で、エンパワーすることです。その言語で書くのに便利なプリミティブの種類を選ぶことができます。その意味では、On Lispのような本を見ることができ、Arcのコア作者が言語からどんな種類のものを望んでいるのか強い意見を持っていることがわかります。

私はあなたの質問を徹底的に徹底的に解説すると、次のように聞こえます:なぜドメイン固有の言語を書くべきでしょうか?

(Arcの方々は、マクロやモジュールシステムなど、多くのプリミティブ機能を再実装する必要があるかどうかは別に質問しますが、Arcの作者は完全に

私がアークに持っている異論の1つは、公式ランタイムを実装した方法では、彼らが行った作業をプレーンラケットに再利用することが困難になることです。その意味では、それはArcの人々の仕事から簡単に利益を得ることができればいいのに、一方のコミュニティだけに役立つ努力です。

16

ラケットはSchemeの方言であり、Arcはそうではありません。彼らはどちらもLISP方言です。アークはかっこの量を減らし、コードサイズの一般的なものを短くするための構文が組み込まれています。例:

;; scheme 
(if p1 c1 
    (if p2 c2 
     (if p3 c3 a3))) 

;; arc simplifies if 
(if p1 c1 
    p2 c2 
    p3 c3 
     a3) 

;; scheme 
(f1(f2(f3 a b))) 

;; arc simplifies cascading calls 
(f1:f2:f3 a b) 

;; scheme 
(lambda (x) (+ x x)) 

;; arc simplified one argument anonymous functions 
[+ _ _ ] 

;; scheme array access 
(vector-ref v1 5) 

;; arc simplifies array access 
(v1 5) 

いずれかを選択できます。個人的に私はArc構文が好きですが、インタプリタとして実装されているわけではありません。 ArcSetをラケットモジュール言語として実装していたら、実際にdrracketで開発し、デバッグして実行ファイルを作ることができたと思います。それによって、Arcでラケットライブラリを作成することも、その逆も可能です。

互換性のあるコードを作成したい場合は、R6RS/R5RSをラケットのデフォルト言語または円弧よりも厳密に使用する必要があります。ラケット以外の言語でも実行できるコードがある可能性があります。ラケットでは、R5RSを選択するか、コード内の最初の行に#!R6RSを使用して標準を強制することができます。どちらの場合でも、結果は他の実装/コンパイラで実行することができます。

+1

私はラケットの最初のケースでcondについて何か言います。 '(cond(p1 c1)(p2 c2)(p3 c3)(#t c4))'は少し公正な比較です。 –