Здравствуйте, vdimas, Вы писали:
V>Код макросов лиспа не манипулирует AST явно.
V>Макросы Лиспа подстановочные (шаблонные), как макросы Си/С++ или макроассемблера.
С чего это вдруг?
V>А вот макросы Форта устроены иначе — они получают на входе поток лексем и манипулируют с ним именно явно, порождая то самое AST.
Макросы Лиспа получают на вход дерево объектов и манипулируют с ним явно. В чём отличие?
V>Макросы Схемы живут только в момент компиляции, в отличии от макросов Лиспа
Что мешает в Схеме вызвать eval в рантайме?
V>Макросы Схемы имеют другое ключевое слово
Это существенное отличие, да.
V>и пару особенностей.
Каких?
V>Но это по-прежнему подстановочные/позиционные макросы, без явного манипулирования AST.
Что мешает работать с syntax object в Схеме через
syntax-case, например?
V>Причём, тут я противоречу самому себе, вроде бы, ведь можно представить себе такую реализацию Схемы, которая ведёт себя как Лисп?
V>Представить такую реализацию можно, да вот только Схема — это именно компиллируемая версия Лиспа. ))
V>А динамическая версия — это сам Лисп.
SBCL прекрасно компилирует Common Lisp. А eval из Схемы никуда не делся.
V>Для целей эффективного конечного кода пришлось внести в Лисп несколько ограничений, наверно поэтому назвали другим языком и стандарты Схемы с тех пор развиваются независимо от Лиспа.
Схема не так и не для этого разрабатывалась.
V>Вернее, впервые стандарты на семейство Лисп появились в Схеме — именно из-за вносимых ограничений.
С чего ты взял, что из-за них?
V>В любом случае, это лишь эмуляция.
Чем здесь эмуляция отличается от «не-эмуляции»?
V>Объекты в Лиспе не являются первоклассными сущностями языка, вот в чём косяк.
Являются.
V>Первоклассной сущностью там являются числа/символы, функции и пара CONS(car, cdr), где каждый элемент пары может быть числом, функцией или опять парой (ссылочная семантика для всего перечисленного).
И много что ещё. Перечитай определение, что такое first-class citizen.
V>Форт навязывает лишь способ мышления, не навязывая остального.
V>И при этом чудовищно прост в реализации.
V>И при этом чудовищно эффективен, в сравнении с Лиспом.
V>Порой и в сравнении с нейтивом из-за особенностей манипулирования стеком — в Форте обычно меньше паразитных манипуляций данными в стеках/регистрах, меньше ненужных копирований/преобразований данных — состояние стека на выходе одного слова часто является готовым состоянием стека для вызова другого. Писать программы на Форте — это как играть в Тетрис, натурально, все фигуры должны стыковаться, и тогда прога просто летает. ))
А уж ассемблер-то как эффективен. И что из этого вытекает? Зачем все эти Лиспы, Си, Паскали и прочие Форты понапридумывали?