История изменений
Исправление den73, (текущая версия) :
Внезапно открылось целых два новых изменения:
1. Списки с разделителем «пробел». Применимо там, где у нас список слов. Не вполне применимо там, где может чередоваться простое слово и более сложная конструкция. Например «select a b,c,d» - это случай, когда разделитель пробел неприменим. Поскольку запятые можно расставить неоднозначно, при этом получатся осмысленные, но разные и визуально похожие тексты. Т.е. такой синтаксис провоцирует ошибки.
Пример возможного применения списка с разделителем пробел - это описание различных атрибутов параметра поля, как в вышеприведённом определении класса «ура».
2. :ключевые-слова против ключевых-слов . Например,
если ... то
кне
:если ... :то
:кне
Менее очевидный пример - это 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"
)
(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. :ключевые-слова против ключевых-слов . Например,
если ... то
кне
:если ... :то
:кне
Менее очевидный пример - это 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"
)
(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. :ключевые-слова против ключевых-слов . Например,
если ... то
кне
:если ... :то
:кне
Менее очевидный пример - это 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"
)
(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. :ключевые-слова против ключевых-слов . Например,
если ... то
кне
:если ... :то
:кне
Менее очевидный пример - это 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"
)
(defsystem "hello-lisp"
:components (:file "packages"
:file "macros" :depends-on "packages"
:file "hello")
:depends-on "optima.ppcre" "command-line-arguments"
)
При этом надёжность синтаксиса практичеки восстановлена. Можно также потребовать, чтобы описание компонента всегда начиналось с новой строки, тогда синтаксис явно будет более читаем для человека, чем обычный синтаксис asdf.
Как-то мне это всё раньше не приходило в голову. Казалось бы, зачем лезть в лишние дебри? Но я обнаружил, что текущий проект синтаксиса Яра стал не вполне самосогласован после удаления точки с запятой. Вроде он стал улучшаться, но при этом стали появляться места, где выбор синтаксиса перестал быть однозначным.
Поэтому придётся ещё дорабатывать синтаксис.