Size: a a a

2020 May 27

AP

Aleksei (astynax) Pi... in fprog_spb
Я уж не говорю о том, что фактически никакое AST и не строится — структура читается ридером и тут же "выполняется".
источник

JS

Jerzy Syrowiecki in fprog_spb
Aleksei (astynax) Pirogov
> В Лиспе синтаксис является буквальным текстовым представлением абстрактного синтаксиса.

Нет. Во-первых, макросы, во-вторых, reader может быть кастомный
макросы — это же AST -> AST. читаешь один AST, потом меняешь его
источник

PS

Peter Sovietov in fprog_spb
Aleksei (astynax) Pirogov
> В Лиспе синтаксис является буквальным текстовым представлением абстрактного синтаксиса.

Нет. Во-первых, макросы, во-вторых, reader может быть кастомный
Ну, можно привести и более очевидный пример — символ цитирования.
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Jerzy Syrowiecki
макросы — это же AST -> AST. читаешь один AST, потом меняешь его
Да нет никакого AST! Структура читается и тут же обрабатывается. Один из видов обработки — возврат новой структуры, которую нужно заново процессить. Это всё неразделимо и происходит в течении всего сеанса работы интерпретатора
источник

JS

Jerzy Syrowiecki in fprog_spb
Aleksei (astynax) Pirogov
Я уж не говорю о том, что фактически никакое AST и не строится — структура читается ридером и тут же "выполняется".
1. ты сказал об этом.

2. это важное уточнение, которое всё меняет.
источник

JS

Jerzy Syrowiecki in fprog_spb
Aleksei (astynax) Pirogov
Да нет никакого AST! Структура читается и тут же обрабатывается. Один из видов обработки — возврат новой структуры, которую нужно заново процессить. Это всё неразделимо и происходит в течении всего сеанса работы интерпретатора
это обязательно? то есть это классический лисп так устроен или иначе просто невозможно?
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Если "синтаксисом" считать списки, числа, символы и строки, то да, на этом уровне есть и парсинг и построение какого-то внутреннего представления для прочитанного исходника
источник

AP

Aleksei (astynax) Pi... in fprog_spb
То есть совсем без синтаксиса нельзя
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Но это как-бы метасинтаксис, так как то, что он будет означать, зависит от исполнителя
источник

JS

Jerzy Syrowiecki in fprog_spb
и синтаксический сахар есть, если я правильно понимаю. типа '(a b c) = (quote a b c)
источник

AP

Aleksei (astynax) Pi... in fprog_spb
(quote (a b c))
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Такого уровня сахар есть, да
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Метасинтаксический :)
источник

PS

Peter Sovietov in fprog_spb
Jerzy Syrowiecki
это обязательно? то есть это классический лисп так устроен или иначе просто невозможно?
Вот хорошая заметка по поводу того, что обязательно в лиспе и что является конкретным и абстрактным синтаксисом: http://www.righto.com/2008/07/maxwells-equations-of-software-examined.html
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Кароч, у настоящих лиспов минималистичный парсер и сложный ридер. И возможность этот ридер заменить даёт все те возможности по адаптации языка под какой угодно "синтаксис".
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Поэтому "синтаксиса нет".
источник

PS

Peter Sovietov in fprog_spb
У самых настоящих лиспов парсер вовсе не минималистичный, см. #lang :)
источник

AP

Aleksei (astynax) Pi... in fprog_spb
У Clojure, например, EDN вместо S-exps, а это довольно таки конкретный формат с кучей синтаксиса
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Peter Sovietov
У самых настоящих лиспов парсер вовсе не минималистичный, см. #lang :)
Это рэкет, у которого и парсер перегружаемый :)
источник

AP

Aleksei (astynax) Pi... in fprog_spb
Но ридер всё равно есть. Он обрабатывает то, что выдал парсер.
источник