примечание: синтаксис трактуется в узком смысле, как способ записи информации в виде текста (последовательности символов)
Что такое информация?
для лучшего понимания задачи синтаксиса, стоит немного отвлечься и разобраться что такое "информация".
описание дается упрощенное, чтобы его можно было себе наглядно представить (всё тоже самое можно формально ввести с помощью той же теории категории, но это будет менее визуально представимо)
попробуем построить, что такое информация:
начнем с простого: структуры и атомы.
структура — это вид отношений(связей) между атомами.
выделяют (по мере усложнения) следующие структуры: один элемент, множество(список), дерево, граф.
в первом приближении можно считать, что структура отвечает за ребра, а атомы — это вершины (но при этом стоит помнить, что с точки зрения математики вершины и ребра взаимозаменяемы, т.е. в любой момент можно ребра обозвать вершинами, а вершины — ребрами).
атомы (по мере усложнения): все одинаковые, фиксированный набор термов(имен), бесконечный набор термов(имен).
тоже самое применимо и к связам(отношениям): связи могут быть одинаковые или именованные — это дает такие структуры как:
"структура"(множество именованных элементов), именованное дерево, именованный граф.
отношения могут связывать не только отдельные термы, но и также множества или целые графы, и само отношение может быть представимо целым графом, а не только термом.
в итоге, информация, в общем виде — это именованный граф термов c элементами самоподобия, где и вершины и ребра также могут являться графами
Задача, проблемы и критерии лучшести синтаксиса
Основная задача синтаксиса — представить информационный граф в виде текста.
Основная проблема синтаксиса — с помощью линейной структуры текста и фиксированного набора символов(термов) передать графовую структуру информации и бесконечный набор термов
Критерии лучшего синтаксиса:
компактность,
стабильность(контекстно-независимость),
атомарность изменений,
близость к текстам, которыми обмениваются между собой люди.
Гипотеза: т.к. задача, проблемы и критерии хорошести синтаксиса фиксированные, то и задача выделения лучшего синтаксиса имеет одно решение (или конечный небольшой набор решений).
Приемы используемые синтаксисом
Для решения своей задачи синтаксис использует определенный набор приемов.
Разрыв в структуре(информация — граф, а текст — линеен(список)) решается как:
а) граф представляется в виде дерева, а остальные связи вводятся маркировкой элементов дерева и "использованием" маркеров
b) дерево записывается с помощью скобочной записи
Разрыв между конечным числом символов и бесконечностью термов(например, чисел) решается как:
терм кодируется последовательностью символов. конец последовательности помечается спец. символом.
Оба этих приема требуют ввода новых термов (скобки, маркеры, привязка маркера к элементу, "использование" маркера, границы одного терма и т.д.), которых не было в самой информации, что в ряде случаев может приводить к конфликту термов информации с термами синтаксиса.
Большая часть дальнейших улучшений синтаксиса сводятся к борьбе со скобочной записью и борьбе с конфликтом между исходными термами и термами синтаксиса.(это в следующий раз)
Здравствуйте, DarkGray, Вы писали:
DG>Большая часть дальнейших улучшений синтаксиса сводятся к борьбе со скобочной записью и борьбе с конфликтом между исходными термами и термами синтаксиса.(это в следующий раз)
Если не бороться со скобками то идеальный синтаксис уже давно изобретен s-выражения и соответственно язык Lisp.
Другой вариант позволяющий описывать более сложные структуры меньшим количеством скобок — Refal.
Здравствуйте, DarkGray, Вы писали:
DG>примечание: синтаксис трактуется в узком смысле, как способ записи информации в виде текста (последовательности символов)
DG>Что такое информация? DG>для лучшего понимания задачи синтаксиса, стоит немного отвлечься и разобраться что такое "информация".
DG>описание дается упрощенное, чтобы его можно было себе наглядно представить (всё тоже самое можно формально ввести с помощью той же теории категории, но это будет менее визуально представимо)
DG>в итоге, информация, в общем виде — это именованный граф термов c элементами самоподобия, где и вершины и ребра также могут являться графами
DG>Задача, проблемы и критерии лучшести синтаксиса DG>Основная задача синтаксиса — представить информационный граф в виде текста.
DG>Основная проблема синтаксиса — с помощью линейной структуры текста и фиксированного набора символов(термов) передать графовую структуру информации и бесконечный набор термов
DG>Критерии лучшего синтаксиса: DG>компактность, DG>стабильность(контекстно-независимость), DG>атомарность изменений, DG>близость к текстам, которыми обмениваются между собой люди.
DG>Гипотеза: т.к. задача, проблемы и критерии хорошести синтаксиса фиксированные, то и задача выделения лучшего синтаксиса имеет одно решение (или конечный небольшой набор решений). DG>
DG>продолжение следует...
Дискретизация логики вынуждает вас дробить цельно воспринимаемое на отдельные факты, явления, понятия и категории, проводя между ними искусственные границы.
Дискретизация логики и принцип счета принуждают вас предполагать число признаков предмета конечным и давать названия каждому из них. Отсюда появляется весьма сомнительная возможность отчленять одни признаки от других — прием, называемый вами абстрагированием. Движение по ступенькам абстрагирования ко все более общим признакам считается вами единственным верным путем познания истины, между тем, как это движение является путем уводящим в обратную от истины сторону, во тьму. Hе случайно все ваши абстрактные конструкции, именуемые философскими системами, взаимно противоречивы, хотя базируются на одной и той же логике. Шаг за шагом погружаясь во мрак по ступенькам абстракции, шаг за шагом теряя связь с реальным миром, философские системы постепенно утрачивают ориентировку и доходят до того, что в тупиковой точке этого движения, на бессмысленный вопрос о первенстве материи или духа, дают диаметрально противоположные ответы. Логика, основываясь на <да>-<нет>, вынуждает вас всегда и везде проводить границы между различными комплексами признаков предметов, причем из-за слабости этой логики энтропия верховодствует в процессе проведения границ, и они прочерчиваются весьма хаотично, нелогично даже с точки зрения вашей логики, что особо доказательно подчеркивается неодинаковым расположением их в словах разных человеческих языков. Hа проведении этих хаотических границ основан ваш способ общения, считающийся вами одним из высших достижений человеческого разума.
FR>Если не бороться со скобками то идеальный синтаксис уже давно изобретен s-выражения и соответственно язык Lisp.
в нем дерево неименованное, что не хватает
и не зафиксирован синтаксис дать имя узлу, а потом на него сослаться.
s-выражение — умеет описывать лишь однородное(неименованное) дерево термов, а этого не достаточно.
xml в этом плане лучше:
a) дерево именованное,
b) есть фиксирование способа привязки к узлам имен, и отчасти как на это сослаться(через id, xlink и т.д.), но пользуются редко из-за большой громоздкости.
FR>Другой вариант позволяющий описывать более сложные структуры меньшим количеством скобок — Refal.
Здравствуйте, DarkGray, Вы писали:
DG>примечание: синтаксис трактуется в узком смысле, как способ записи информации в виде текста (последовательности символов)
Здравствуйте, DarkGray, Вы писали:
DG>в нем дерево неименованное, что не хватает DG>и не зафиксирован синтаксис дать имя узлу, а потом на него сослаться.
DG>s-выражение — умеет описывать лишь однородное(неименованное) дерево термов, а этого не достаточно.
Это, да но если рассматривать лисп как язык а не чисто s-выражения то там это все вполне нормально описывается.
DG>xml в этом плане лучше: DG>a) дерево именованное, DG>b) есть фиксирование способа привязки к узлам имен, и отчасти как на это сослаться(через id, xlink и т.д.), но пользуются редко из-за большой громоздкости.
V>Дискретизация логики вынуждает вас дробить цельно воспринимаемое на отдельные факты, явления, понятия и категории, проводя между ними искусственные границы.
другого алгоритмизированного способа познания мира все равно нет. используя этот метод, стоит только соблюдать ТБ — и не возводить в ранк абсолюта введенные ради процесса познания границы.
зы
противоположный способ — помедитируйте, смотря в потолок, и понимание изучаемого объекта во всей его многогранности само на вас упадёт — работает лишь в сказках
FR>Это, да но если рассматривать лисп как язык а не чисто s-выражения то там это все вполне нормально описывается.
через let? но это немножко не то, семантика другая
да и не все ссылки таким образом можно записать.
FR>Лучше http://en.wikipedia.org/wiki/YAML в отличии от XML вполне человекочитабелен.
в yaml-е есть плюсы и минусы.
из минусов — необходимо много знать, чтобы сгенерить валидный yaml без возможности аттак вида injection-s
имена объявлять и использовать можно, что плюс, но минус что все эти имена глобальны, что затрудняет описывание многих структур.
т.е. в yaml основной плюс — близость к текстам на ЕЯ
Здравствуйте, DarkGray, Вы писали:
FR>>Это, да но если рассматривать лисп как язык а не чисто s-выражения то там это все вполне нормально описывается.
DG>через let? но это немножко не то, семантика другая DG>да и не все ссылки таким образом можно записать.
Здравствуйте, DarkGray, Вы писали:
DG>Критерии лучшего синтаксиса: DG>компактность, DG>стабильность(контекстно-независимость), DG>атомарность изменений, DG>близость к текстам, которыми обмениваются между собой люди.
Какой из вариантов лучше? :
1) var v = new MyClass();
2) var v = MyClass();
Здравствуйте, Silver_S, Вы писали:
S_S> Какой из вариантов лучше? :
Вот такой:
var v : MyClass;
v = MyClass.Constructor();
...
v.Destructor();
-----------------------
никогда не понимал, зачем конструктору и деструктору иметь имя.
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, Фанатик, Вы писали:
Ф>Здравствуйте, Silver_S, Вы писали:
S_S>> Какой из вариантов лучше? : Ф>Вот такой: Ф>var v : MyClass; Ф>v = MyClass.Constructor(); Ф>... Ф>v.Destructor(); Ф>----------------------- Ф>никогда не понимал, зачем конструктору и деструктору иметь имя.
Здравствуйте, DarkGray, Вы писали:
S_S>> Какой из вариантов лучше? : S_S>>1) var v = new MyClass(); S_S>>2) var v = MyClass(); DG>имхо, второй.
Тут думаю мнения разделятся, new наверное не просто в наследство достался от С++ -> Java.
Второй вариант компактнее, и логично вроде все — конструктор это функция.
Но слишком уж специфическая семантика у этой функции.
Удобнее видеть костыли, подсказывающие что это конструктор, чтобы быстрее текст читался.
Если все такие специфические тонкости из ЯП повыкидывать, что останется — голый язык структур данных.
Голый XML, или S-выражения. Ну все согласятся — синтаксис замечательный, логичный стройный. Но писать программы на нем не будут.
Главная характеристика хорошего синтаксиса, ИМХО, высокая читабельность текста на нем.
Это в этом что ли пункте учтено? : "близость к текстам, которыми обмениваются между собой люди."
S_S>Главная характеристика хорошего синтаксиса, ИМХО, высокая читабельность текста на нем. S_S>Это в этом что ли пункте учтено? : "близость к текстам, которыми обмениваются между собой люди."
то, что ты затронул это ближе к стабильности (контексто-независимости).
без new получается, что выражение F(..) — может быть функцией, а может быть конструктором — в зависимости от контекста.
неудобство такого прыганья критично — если функция и конструктор демонстрируют значительно разное поведение.
но я сейчас считаю, что особой разницы между функцией и конструктором нет с точки зрения вызова, поэтому new можно убрать из-за малой полезности.
Здравствуйте, DarkGray, Вы писали:
DG>но я сейчас считаю, что особой разницы между функцией и конструктором нет с точки зрения вызова, поэтому new можно убрать из-за малой полезности.
Здравствуйте, DarkGray, Вы писали:
DG>особой разницы между функцией и конструктором нет с точки зрения вызова, поэтому new можно убрать из-за малой полезности.