Преимущество Arc over Racket

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

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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