>Лисп имеет некоторый конкретный синтаксис и семантику
Нет, как раз фишка в том, что их нет. Некий конкретный лисп может и имеет вполне себе и семантику и синтаксис. Некий конкретный язык, реализованный на CL будет иметь некие синтаксис и семантику.
Но для самого CL:
Что такое синтаксис? Это набор правил, которые описывают преобразование текста или объектов в AST. Но этих правил у CL нет, мы не можем их формализировать, так как его "стандартная" семантика подразумевает изменение этих правил.
С другой стороны, что такое семантика? Например, операционная? Это набор правил, которые преобразуют AST в выполнение программы, грубо говоря.
Но если мы посмотрим стандарт - из "семантики" CL следует переопределяемость этих правил, опять же, и, таким образом, любая семантика(и любой синтаксис - см. выше) все еще будет давать conforming program, потому что оно все еще соответствует семантике CL, которая подразумевает возможность переопределения всего и вся. А это тавтология. Ч.т.д.
>Мы можем переопределить лисп-машину, но это будет _другая_ лисп-машина и _другой_ лисп. Стандарт CL это как POSIX - он описывает не язык, а исключительно систему, требования к системе. Но, в отличие от POSIX - исключительно к начальному состоянию системы(к состоянию системы после ее установки). Переопределив половину ядра лисп-системы мы не получим другую систему - это будет та же система, тот же процесс, грубо говоря.
>исключая расширения, что непринципиально Вполне себе принципиально, кстати. Расширения другого какого-либо языка дают новый язык, потому что вводят новые правила в синтаксисе и семантике. Но в случае CL это не так, потому что как языка его не существует, а есть только среда исполнения.
no subject
Date: 2011-01-20 04:50 am (UTC)Нет, как раз фишка в том, что их нет. Некий конкретный лисп может и имеет вполне себе и семантику и синтаксис. Некий конкретный язык, реализованный на CL будет иметь некие синтаксис и семантику.
Но для самого CL:
Что такое синтаксис? Это набор правил, которые описывают преобразование текста или объектов в AST. Но этих правил у CL нет, мы не можем их формализировать, так как его "стандартная" семантика подразумевает изменение этих правил.
С другой стороны, что такое семантика? Например, операционная? Это набор правил, которые преобразуют AST в выполнение программы, грубо говоря.
Но если мы посмотрим стандарт - из "семантики" CL следует переопределяемость этих правил, опять же, и, таким образом, любая семантика(и любой синтаксис - см. выше) все еще будет давать conforming program, потому что оно все еще соответствует семантике CL, которая подразумевает возможность переопределения всего и вся. А это тавтология. Ч.т.д.
>Мы можем переопределить лисп-машину, но это будет _другая_ лисп-машина и _другой_ лисп.
Стандарт CL это как POSIX - он описывает не язык, а исключительно систему, требования к системе. Но, в отличие от POSIX - исключительно к начальному состоянию системы(к состоянию системы после ее установки). Переопределив половину ядра лисп-системы мы не получим другую систему - это будет та же система, тот же процесс, грубо говоря.
>исключая расширения, что непринципиально
Вполне себе принципиально, кстати. Расширения другого какого-либо языка дают новый язык, потому что вводят новые правила в синтаксисе и семантике. Но в случае CL это не так, потому что как языка его не существует, а есть только среда исполнения.