16

Arc建立在Racket之上。由于他们都属于 Lisp 家族,我很好奇 Arc 相对于 Racket 的优势,或者考虑到 Racket 可用,创建 Arc 的动机是什么?

4

2 回答 2

25

从某种意义上说,编写自己的语言是一种赋权:您可以选择用该语言编写方便的原语、表达方式。从这个意义上说,你可以看看像On Lisp这样的书,并看到 Arc 的核心作者对他们希望从一种语言中获得什么样的东西有着强烈的看法。

如果我把你的问题归结为要点,听起来是这样的:人们为什么要编写特定领域的语言?

(当 Racket 中已经内置了这样的机制时,考虑 Arc 人员是否应该重新实现这么多原始设施,例如他们自己的宏和模块系统,这是一个单独的问题。但是 Arc 的作者完全有权重新-发明。)

我想我对 Arc 的反对意见之一是:他们实现官方运行时的方式使得他们很难将他们所做的工作重用回普通的 Racket。从这个意义上说,这种努力只能帮助一个社区,而如果能够轻松地从 Arc 人员的工作中受益,那就太好了。

于 2011-12-18T22:55:06.120 回答
17

Racket 是 Scheme 方言,而 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 库,反之亦然。

如果你想制作兼容的代码,你应该更严格地使用 R6RS/R5RS,而不是使用 Racket 默认语言或 arc,因为那样你可能拥有的代码不仅可以在 Racket 上运行。在球拍中,您可以选择 R5RS 或使用 #!R6RS 作为代码中的第一行来强制标准。在这两种情况下,结果都将能够在其他实现/编译器下运行。

于 2012-07-20T12:55:54.930 回答