LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

Внезапно открылось целых два новых изменения:

1. Списки с разделителем «пробел». Применимо там, где у нас список слов. Не вполне применимо там, где может чередоваться простое слово и более сложная конструкция. Например «select a b,c,d» - это случай, когда разделитель пробел неприменим. Поскольку запятые можно расставить неоднозначно, при этом получатся осмысленные, но разные и визуально похожие тексты. Т.е. такой синтаксис провоцирует ошибки.

Пример возможного применения списка с разделителем пробел - это описание различных атрибутов параметра поля, как в вышеприведённом определении класса «ура».

2. :ключевые-слова против ключевых-слов . Например,

если ... то
кне
или
:если ... :то
:кне
оказывается, что так удобно отделять именно ключевые слова. При этом увеличивается надёжность, поскольку сложнее написать идентификатор, похожий, но не совпадающий с ключевым словом. Также увеличивается выразительность, поскольку ключевые слова могут отделять разные элементы синтаксиса друг от друга. Примером тому являеются команды unix, в которых используются -ключи. Обычно фрагмент кода от ключа до следующего интерпретируется как аргумент команды. До сих пор мне не приходило в голову, что на этом можно строить синтаксис, а в лиспе так часто делается, например, в макросе loop.

Менее очевидный пример - это defsystem. Обычно определение системы выглядит так:

(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on ("optima.ppcre" "command-line-arguments")
  :components ((:file "packages")
               (:file "macros" :depends-on ("packages"))
               (:file "hello" :depends-on ("macros"))))
Но ничто не мешает сделать и такой синтаксис:
(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on "optima.ppcre" "command-line-arguments"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" :depends-on "macros"
)
Почему так не сделано, понимает любой лиспер. Но если выйти из контекста лиспа и говорить о синтаксисе как таковом, то в общем-то, нет особых оснований так не сделать: ключевые слова придают синтаксису достаточный запас прочности, чтобы можно было выкинуть скобки и надёжность синтаксиса не пострадала бы.

Можно определить взаимоотношения ключевых слов, т.е. значение каждого слова в области после другого ключевого слова и это однозначно определить синтаксис. В принципе, вероятность ошибки всё же возрастает, теперь код можно переписать вот так:

(defsystem "hello-lisp"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" 
  :depends-on "optima.ppcre" "command-line-arguments"
)
И depends-on будет отнесён не к тому, что мы имели в виду. Но тогда можно сделать версию «скобки лайт», которая разруливает только этот конкретный конфликт:

(defsystem "hello-lisp"
  :components (:file "packages"
               :file "macros" :depends-on "packages"
               :file "hello") 
  :depends-on "optima.ppcre" "command-line-arguments"
)

При этом надёжность синтаксиса практичеки восстановлена. Можно также потребовать, чтобы описание компонента всегда начиналось с новой строки, тогда синтаксис явно будет более читаем для человека, чем обычный синтаксис asdf. И тут, что самое внезапное, оказывается, что синтаксис «скобки лайт» пригоден и для Яра, достаточно лишь переделать его вот так:

система "hello-lisp"
  :компоненты (:файл "packages"
              :файл "macros" :зависит-от "packages"
              :файл "hello") 
  :зависит-от "optima.ppcre" "command-line-arguments"
кнс

Как-то мне это всё раньше не приходило в голову. Казалось бы, зачем лезть в лишние дебри? Ведь вроде был уже синтаксис? Но я обнаружил, что текущий проект синтаксиса Яра стал не вполне самосогласован после удаления точки с запятой. Вроде он стал улучшаться, но при этом стали появляться места, где выбор синтаксиса перестал быть однозначным.

Нарпимер, объединяя эти два измерения, получаем, что можно с помощью :кейвордов описывать такие важнейшие сущности, как параметры функций и поля классов.

Поэтому придётся ещё дорабатывать синтаксис.

Исправление den73, :

Внезапно открылось целых два новых изменения:

1. Списки с разделителем «пробел». Применимо там, где у нас список слов. Не вполне применимо там, где может чередоваться простое слово и более сложная конструкция. Например «select a b,c,d» - это случай, когда разделитель пробел неприменим. Поскольку запятые можно расставить неоднозначно, при этом получатся осмысленные, но разные и визуально похожие тексты. Т.е. такой синтаксис провоцирует ошибки.

Пример возможного применения списка с разделителем пробел - это описание различных атрибутов параметра поля, как в вышеприведённом определении класса «ура».

2. :ключевые-слова против ключевых-слов . Например,

если ... то
кне
или
:если ... :то
:кне
оказывается, что так удобно отделять именно ключевые слова. При этом увеличивается надёжность, поскольку сложнее написать идентификатор, похожий, но не совпадающий с ключевым словом. Также увеличивается выразительность, поскольку ключевые слова могут отделять разные элементы синтаксиса друг от друга. Примером тому являеются команды unix, в которых используются -ключи. Обычно фрагмент кода от ключа до следующего интерпретируется как аргумент команды. До сих пор мне не приходило в голову, что на этом можно строить синтаксис, а в лиспе так часто делается, например, в макросе loop.

Менее очевидный пример - это defsystem. Обычно определение системы выглядит так:

(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on ("optima.ppcre" "command-line-arguments")
  :components ((:file "packages")
               (:file "macros" :depends-on ("packages"))
               (:file "hello" :depends-on ("macros"))))
Но ничто не мешает сделать и такой синтаксис:
(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on "optima.ppcre" "command-line-arguments"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" :depends-on "macros"
)
Почему так не сделано, понимает любой лиспер. Но если выйти из контекста лиспа и говорить о синтаксисе как таковом, то в общем-то, нет особых оснований так не сделать: ключевые слова придают синтаксису достаточный запас прочности, чтобы можно было выкинуть скобки и надёжность синтаксиса не пострадала бы.

Можно определить взаимоотношения ключевых слов, т.е. значение каждого слова в области после другого ключевого слова и это однозначно определить синтаксис. В принципе, вероятность ошибки всё же возрастает, теперь код можно переписать вот так:

(defsystem "hello-lisp"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" 
  :depends-on "optima.ppcre" "command-line-arguments"
)
И depends-on будет отнесён не к тому, что мы имели в виду. Но тогда можно сделать версию «скобки лайт», которая разруливает только этот конкретный конфликт:

(defsystem "hello-lisp"
  :components (:file "packages"
               :file "macros" :depends-on "packages"
               :file "hello") 
  :depends-on "optima.ppcre" "command-line-arguments"
)

При этом надёжность синтаксиса практичеки восстановлена. Можно также потребовать, чтобы описание компонента всегда начиналось с новой строки, тогда синтаксис явно будет более читаем для человека, чем обычный синтаксис asdf. И тут, что самое внезапное, оказывается, что синтаксис «скобки лайт» пригоден и для Яра, достаточно лишь переделать его вот так:


система "hello-lisp"
  :компоненты (:файл "packages"
              :файл "macros" :зависит-от "packages"
              :файл "hello") 
  :зависит-от "optima.ppcre" "command-line-arguments"
кнс

Как-то мне это всё раньше не приходило в голову. Казалось бы, зачем лезть в лишние дебри? Ведь вроде был уже синтаксис? Но я обнаружил, что текущий проект синтаксиса Яра стал не вполне самосогласован после удаления точки с запятой. Вроде он стал улучшаться, но при этом стали появляться места, где выбор синтаксиса перестал быть однозначным. 

Нарпимер, объединяя эти два измерения, получаем, что можно с помощью :кейвордов описывать такие важнейшие сущности, как параметры функций и поля классов. 

Поэтому придётся ещё дорабатывать синтаксис. 

Исправление den73, :

Внезапно открылось целых два новых изменения:

1. Списки с разделителем «пробел». Применимо там, где у нас список слов. Не вполне применимо там, где может чередоваться простое слово и более сложная конструкция. Например «select a b,c,d» - это случай, когда разделитель пробел неприменим. Поскольку запятые можно расставить неоднозначно, при этом получатся осмысленные, но разные и визуально похожие тексты. Т.е. такой синтаксис провоцирует ошибки.

Пример возможного применения списка с разделителем пробел - это описание различных атрибутов параметра поля, как в вышеприведённом определении класса «ура».

2. :ключевые-слова против ключевых-слов . Например,

если ... то
кне
или
:если ... :то
:кне
оказывается, что так удобно отделять именно ключевые слова. При этом увеличивается надёжность, поскольку сложнее написать идентификатор, похожий, но не совпадающий с ключевым словом. Также увеличивается выразительность, поскольку ключевые слова могут отделять разные элементы синтаксиса друг от друга. Примером тому являеются команды unix, в которых используются -ключи. Обычно фрагмент кода от ключа до следующего интерпретируется как аргумент команды. До сих пор мне не приходило в голову, что на этом можно строить синтаксис, а в лиспе так часто делается, например, в макросе loop.

Менее очевидный пример - это defsystem. Обычно определение системы выглядит так:

(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on ("optima.ppcre" "command-line-arguments")
  :components ((:file "packages")
               (:file "macros" :depends-on ("packages"))
               (:file "hello" :depends-on ("macros"))))
Но ничто не мешает сделать и такой синтаксис:
(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on "optima.ppcre" "command-line-arguments"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" :depends-on "macros"
)
Почему так не сделано, понимает любой лиспер. Но если выйти из контекста лиспа и говорить о синтаксисе как таковом, то в общем-то, нет особых оснований так не сделать: ключевые слова придают синтаксису достаточный запас прочности, чтобы можно было выкинуть скобки и надёжность синтаксиса не пострадала бы.

Можно определить взаимоотношения ключевых слов, т.е. значение каждого слова в области после другого ключевого слова и это однозначно определить синтаксис. В принципе, вероятность ошибки всё же возрастает, теперь код можно переписать вот так:

(defsystem "hello-lisp"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" 
  :depends-on "optima.ppcre" "command-line-arguments"
)
И depends-on будет отнесён не к тому, что мы имели в виду. Но тогда можно сделать версию «скобки лайт», которая разруливает только этот конкретный конфликт:

(defsystem "hello-lisp"
  :components (:file "packages"
               :file "macros" :depends-on "packages"
               :file "hello") 
  :depends-on "optima.ppcre" "command-line-arguments"
)

При этом надёжность синтаксиса практичеки восстановлена. Можно также потребовать, чтобы описание компонента всегда начиналось с новой строки, тогда синтаксис явно будет более читаем для человека, чем обычный синтаксис asdf.

Как-то мне это всё раньше не приходило в голову. Казалось бы, зачем лезть в лишние дебри? Но я обнаружил, что текущий проект синтаксиса Яра стал не вполне самосогласован после удаления точки с запятой. Вроде он стал улучшаться, но при этом стали появляться места, где выбор синтаксиса перестал быть однозначным.

Нарпимер, объединяя эти два измерения, получаем, что можно с помощью :кейвордов описывать такие важнейшие сущности, как параметры функций и поля классов.

Поэтому придётся ещё дорабатывать синтаксис.

Исходная версия den73, :

Внезапно открылось целых два новых изменения:

1. Списки с разделителем «пробел». Применимо там, где у нас список слов. Неприменимо там, где может быть слово или более сложная конструкция. Например «select a as b,c,d» - это случай, когда разделитель пробел неприменим. И особенно криминален вариант «select a b, c,d». Поскольку в запятые можно расставить неоднозначно, и в любом случае получим осмысленное выражение. Пример возможного применения - это описание различных атрибутов параметра поля, как в вышеприведённом определении класса «ура».

2. :ключевые-слова против ключевых-слов . Например,

если ... то
кне
или
:если ... :то
:кне
оказывается, что так удобно отделять именно ключевые слова. При этом увеличивается надёжность, поскольку сложнее написать идентификатор, похожий, но не совпадающий с ключевым словом. Также увеличивается выразительность, поскольку ключевые слова могут отделять разные элементы синтаксиса друг от друга. Примером тому являеются команды unix, в которых используются -ключи. Обычно фрагмент кода от ключа до следующего интерпретируется как аргумент команды. До сих пор мне не приходило в голову, что на этом можно строить синтаксис, а в лиспе так часто делается, например, в макросе loop.

Менее очевидный пример - это defsystem. Обычно определение системы выглядит так:

(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on ("optima.ppcre" "command-line-arguments")
  :components ((:file "packages")
               (:file "macros" :depends-on ("packages"))
               (:file "hello" :depends-on ("macros"))))
Но ничто не мешает сделать и такой синтаксис:
(defsystem "hello-lisp"
  :description "hello-lisp: a sample Lisp system."
  :version "0.0.1"
  :author "Joe User <joe@example.com>"
  :licence "Public Domain"
  :depends-on "optima.ppcre" "command-line-arguments"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" :depends-on "macros"
)
Почему так не сделано, понимает любой лиспер. Но если выйти из контекста лиспа и говорить о синтаксисе как таковом, то в общем-то, нет особых оснований так не сделать: ключевые слова придают синтаксису достаточный запас прочности, чтобы можно было выкинуть скобки и надёжность синтаксиса не пострадала бы.

Можно определить взаимоотношения ключевых слов, т.е. значение каждого слова в области после другого ключевого слова и это однозначно определить синтаксис. В принципе, вероятность ошибки всё же возрастает, теперь код можно переписать вот так:

(defsystem "hello-lisp"
  :components :file "packages"
              :file "macros" :depends-on "packages"
              :file "hello" 
  :depends-on "optima.ppcre" "command-line-arguments"
)
И depends-on будет отнесён не к тому, что мы имели в виду. Но тогда можно сделать версию «скобки лайт», которая разруливает только этот конкретный конфликт:

(defsystem "hello-lisp"
  :components (:file "packages"
               :file "macros" :depends-on "packages"
               :file "hello") 
  :depends-on "optima.ppcre" "command-line-arguments"
)

При этом надёжность синтаксиса практичеки восстановлена. Можно также потребовать, чтобы описание компонента всегда начиналось с новой строки, тогда синтаксис явно будет более читаем для человека, чем обычный синтаксис asdf.

Как-то мне это всё раньше не приходило в голову. Казалось бы, зачем лезть в лишние дебри? Но я обнаружил, что текущий проект синтаксиса Яра стал не вполне самосогласован после удаления точки с запятой. Вроде он стал улучшаться, но при этом стали появляться места, где выбор синтаксиса перестал быть однозначным.

Поэтому придётся ещё дорабатывать синтаксис.