Преимущество Arc над Racket

Arc построен на основе Racket. Поскольку оба они относятся к семейству Lisp, мне интересно узнать о преимуществах Arc над Racket или какова мотивация создания Arc, учитывая, что Racket доступен?


person Ning    schedule 18.12.2011    source источник
comment
Python построен поверх C, так в чем же преимущество Python перед C? Лежащий в основе язык, если он не раскрыт, не имеет большого отношения к возможностям верхнего уровня.   -  person drysdam    schedule 19.12.2011
comment
Сомневаюсь, что таковые вообще есть — схема — это хорошо известный, довольно популярный язык с библиотеками для выполнения разных задач, а дуга — тщеславный проект парня, который сделал ранний интернет-магазин.   -  person Marcin    schedule 19.12.2011
comment
Кажется глупым сравнивать DSL с совершенно отдельным языком. Я бы не сказал, например, LiftWeb или Scala или Seaside или SmallTalk или Sinatra или Ruby. (Предоставленные формы Лиспа могут действительно стереть различие.)   -  person    schedule 19.12.2011
comment
@pst: Arc позиционируется как a Lisp, то есть как новый язык, а не как DSL. Этот факт создает видимость (правда это или нет), что PG что-то меняет, а не просто добавляет в Racket. Если вы знаете, что это ложь, это был бы полезный ответ, но говорить, что вопрос глупый, бесполезно.   -  person iconoclast    schedule 03.04.2012
comment
@drysdam: ситуация была бы ближе к параллельной (но все же не идеальной), если бы Python был построен поверх Ruby, и кто-то спросил, в чем преимущество Python над Ruby. Если никакая часть Racket не остается открытой, это полезная информация, и она может быть частью полезного ответа. Говорить людям, что их вопрос глупый, обычно не очень полезно.   -  person iconoclast    schedule 03.04.2012


Ответы (2)


Написание собственного языка, в некотором смысле, расширяет возможности: вы можете выбирать, какие примитивы, какие виды выражений удобно писать на этом языке. В этом смысле вы можете взглянуть на такую ​​книгу, как On Lisp, и увидеть, что основные авторы Arc иметь твердое мнение о том, какие вещи они хотели бы от языка.

Если я возьму ваш вопрос и сведу его к сути, он будет звучать так: почему люди должны писать предметно-ориентированные языки?

(Это отдельный вопрос, стоит ли разработчикам Arc заново реализовывать столько примитивных средств, таких как их собственные системы макросов и модулей, когда такие механизмы уже встроены в Racket. Но авторы Arc имеют полное право переделывать -изобретать.)

Я предполагаю, что одно из возражений, которые у меня есть к Arc, заключается в следующем: то, как они реализовали официальную среду выполнения, затрудняет повторное использование работы, которую они проделали, для простого Racket. В этом смысле это усилия, которые помогают только одному сообществу, тогда как было бы неплохо иметь возможность легко извлекать выгоду из работы людей из Arc.

person dyoo    schedule 18.12.2011

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, отлаживать и создавать исполняемые файлы. Это может даже позволить создавать библиотеки Racket в Arc или наоборот.

Если вы хотите сделать совместимый код, вы должны быть более строгими и использовать R6RS/R5RS, чем использовать язык рэкета по умолчанию или дугу, поскольку тогда у вас может быть код, который вы можете запускать не только на рэкете. В ракетке вы можете выбрать R5RS или использовать #!R6RS в качестве первой строки в коде, чтобы принудительно применить стандарт. В обоих случаях результат сможет работать под другими реализациями/компиляторами.

person Sylwester    schedule 20.07.2012
comment
Я бы сказал кое-что о кондиции для того первого случая для рэкета. (cond (p1 c1) (p2 c2) (p3 c3) (#t c4)) немного более справедливое сравнение. - person Theo Belaire; 19.03.2013