Arc over Racketの利点

Arc is built on top of Racket. Since both of them are in the Lisp family, I am curious about the the advantage of Arc over Racket, or what is the motivation of creating Arc given that Racket is available?

15
@pst:Arcは、 a Lispとして、したがってDSLではなく新しい言語として請求されています。この事実は、ラケットに追加するだけでなく、PGが物事を変えていることを(真実でもなくても)与えます。それが偽であることを知っているなら、それは有用な答えになりますが、その質問は愚かであると言っても役に立たない。
追加された 著者 iconoclast,
@drysdam:PythonがRubyの上に構築されていれば、状況は平行に近づきますが(それでも完全ではありません)、誰かがPythonの利点がRubyよりどうなったのか尋ねました。露出されたままのラケットの部分がない場合、それは有用な情報であり、有用な答えの一部になる可能性があります。彼らの質問が愚かであると人々に伝えることは、通常はあまり有用ではありません。
追加された 著者 iconoclast,
私は疑問に思っていることはありません - 図書館ではよく知られている、よく使われている言葉がありますが、アークは初期のウェブストアを作った人の虚栄心プロジェクトです。
追加された 著者 Marcin,
Pythonは "C"の上に構築されているので、PythonのC言語の利点は何ですか?根底にある言語は、公開されていない限り、「トップレベル」の力にはあまり関係しません。
追加された 著者 drysdam,
DSLと全く別の言語を比較するのは馬鹿げたようです。私は "LiftWeb Scala"や "Seaside SmallTalk"や "Sinatra Ruby"などは言っていません。 (与えられたLispフォームは実際には区別できない。)
追加された 著者 user166390,

2 答え

あなた自身の言語を書くことは、ある意味で、エンパワーすることです。その言語で書くのに便利なプリミティブの種類を選ぶことができます。その意味で、あなたは Lispでの本を見ることができ、Arcの中心的な著者言語からどんな種類のものが好きかについて強い意見を持っています。

あなたの質問を取って、それを本質的なものに煮詰めると、それは次のように聞こえます。なぜ人々がドメイン固有の言語を書くべきですか?

(Arcの方は、既にマクロやモジュールシステムなど、多くの原始的な機能を再実装する必要があるかどうかを検討する別の質問ですが、Arcの作成者は完全に再利用権を持っています-invent。)

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

22
追加された

ラケットは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をコードの最初の行として使用することができます。どちらの場合でも、結果は他の実装/コンパイラで実行することができます。

17
追加された
ラケットの最初のケースでは、私はcondについて何か言います。 (cond(p1 c1)(p2 c2)(p3 c3)(#t c4))はちょっと公正な比較です。
追加された 著者 Theo Belaire,