比較 - scheme common lisp どっち




Arc over Racketの利点 (2)

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

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

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

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

ArcRacket上に構築されています。 どちらもLispファミリに入っているので、Arc over Racketの利点、またはRacketが利用可能であることを前提にArcを作成する動機は何か不思議です。


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