ArcはRacketの上に構築されます。どちらも Lisp ファミリーに属しているので、Racket に対する Arc の利点に興味がありますか、それとも、Racket が利用可能であることを考えると、Arc を作成する動機は何ですか?
2 に答える
独自の言語を書くことは、ある意味で力を与えてくれます。その言語で書くのに便利なプリミティブ、式の種類を選択できます。その意味で、 On Lispのような本を見ると、Arc の中心的な作者が言語にどのようなものを求めているかについて強い意見を持っていることがわかります。
あなたの質問を本質にまで要約すると、次のように聞こえます: なぜ人々はドメイン固有言語を書かなければならないのですか?
(Racket に既にそのようなメカニズムが組み込まれている場合、Arc の人々が独自のマクロやモジュール システムなど、非常に多くの原始的な機能を再実装する必要があるかどうかを検討することは別の問題です。しかし、Arc の作成者は完全に再実装する権利を有します。 -発明。)
Arc に対する反論の 1 つは次のようなものだと思います: 彼らが公式のランタイムを実装した方法では、彼らが行った作業を単純な Racket に再利用することが難しくなっています。その意味では、それは 1 つのコミュニティだけを助ける努力ですが、Arc の人々の仕事から簡単に利益を得ることができればよかったと思います.
ラケットはスキームの方言ですが、アークはそうではありません。ただし、どちらも LISP の方言です。Arc は括弧の量を減らし、一般的なものをコードサイズで短くするためのいくつかの凝った組み込み構文を持っています。例:
;; 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 構文が好きですが、それがインタープリターとして実装されているという事実は好きではありません。彼らが Arc を Racket モジュール言語として実装してくれればよかったのにと思います。その後、実際に drracket で開発し、デバッグし、実行可能ファイルを作成できるようになりました。これにより、Arc で Racket ライブラリを作成したり、その逆を行うことさえ可能になるかもしれません。
互換性のあるコードを作成したい場合は、ラケットのデフォルト言語や arc を使用するよりも厳密に R6RS/R5RS を使用する必要があります。これは、ラケット以外でも実行できるコードがある可能性があるためです。ラケットでは、R5RS を選択するか、コードの最初の行として #!R6RS を使用して標準を強制することができます。どちらの場合も、結果は他の実装/コンパイラで実行できます。