Оберон-клуб «ВЄДАsoft»
https://zx.oberon.org/forum/

Некоторые размышления о синтаксисе
https://zx.oberon.org/forum/viewtopic.php?f=25&t=33
Страница 1 из 1

Автор:  Zorko [ 14 сен 2012, 09:57 ]
Заголовок сообщения:  Некоторые размышления о синтаксисе

Автор: Руслан Петрович Богатырёв, 2007.
Руслан Богатырев писал(а):
В отношении синтаксиса. Как нередко говорят, синтаксис -- вопрос вкуса. А вкус, как известно, формируется. Вкус человека во многом формируется той культурной средой, в которой он находится, теми, с кем он общается, тем, какие книги читает и т.д.

Заглавные буквы в зарезервированных словах и предопределенных идентификаторах применяются в Модуле-2 и Обероне, что довольно редко где можно встретить. Не потому ли они и расходятся со вкусом многих? Просто вкус подавляющего большинства формировался под влиянием конкретных факторов -- привычки к традициям языков Си-семейства. Традиция активного использования маленьких букв -- это традиция UNIX. Впрочем, об этом детальнее можно почитать, например, здесь: http://www.linfo.org/lower_case.html
Хотя и в мире Паскаля, где идентификаторы не чувствительны к регистру, преобладающее использование нижнего регистра в зарезервированных словах тоже уже стало традицией.

В европейской письменности традиция использования заглавных букв преимущественно в сокращениях и в начале предложениях (а также именах собственных) формировалась постепенно. И вряд ли корректно напрямую отображать традиции письменности на языки программирования. Насколько мне известно, во времена Римской империи латинский алфавит имел только одну форму -- заглавные буквы (маюскул). Маленькие (строчные) буквы (минускул) не использовались в книжном почерке. Прошло немало столетий, прежде чем появился минускул, причем это был результат долгой сложной линии развития, восходящей к римскому курсивному письму.

Почему Вирт решил выбрать именно такую форму? Я не знаю в точности ответа на этот вопрос, хотя во время одного из визитов проф. Ю.Гуткнехта в Москву мы эту тему с Юргом обсуждали. Он тогда хотел принять решение в отношении своего языка Zonnon, который можно отнести к семейству Оберонов, хотя по своей сложности и навороченности он явно выпадает из этого ряда (Гуткнехт хотел в него вложить едва ли не все свои идеи, да еще с максимальным использованием возможностей .NET). Я высказал отрицательную оценку желанию пойти на поводу у масс и сделать зарезервированные слова в нижнем регистре. Но Гуткнехт в итоге поступил по-своему.

В отношении Модулы-2 и Оберона могу предположить, что Вирт руководствовался, скорее, не римскими традициями, хотя обращение к античности -- это стильно (если, правда, люди об этом знают). Такой прием Вирт наверняка позаимствовал у языка Mesa (первого языка модульного программирования, блестящая разработка исследовательского центра Xerox PARC начала 1970-х годов). Именно под его влиянием Вирт создавал Модулу-2 из своей экспериментальной Модулы (кстати, в Модуле в отличие от Модулы-2 был принят паскалевский подход, без чувствительности к регистру и с нижним регистром зарезервированных слов). Этот же принцип (верхний регистр) использовался и в языке Cedar (Xerox PARC), который Вирт изучал при создании Оберона. Этот же принцип использовал язык Modula-3 (разработка исследовательских лабораторий DEC SRC). В категорию этих языков можно отнести Occam(-2), в разработке которого участвовал Тони Хоар. Собственно, можно даже говорить, что это традиция модульных языков, которые прошли мимо подавляющей массы программистов. Другая культура. Думаю, это не изобретение Вирта. И даже не изобретение европейской школы программирования.

Вирт больше прагматик, хотя эстетическое начало очень высоко ценит и имеет отличный вкус (на мой взгляд). Ясно, что зарезервированные слова в языке играют роль разделителей. И они должны выделяться. Как? Цветом? В годы Модула-2 с цветом была напряженка. Подчеркиванием или полужирным, как это делали в отношении того же Паскаля? Но это хорошо делать в печатных изданиях, а не в исходных текстах, когда его отображение на экране лишено возможности выбора гарнитуры и начертания. Так что подход Вирта был вполне обоснован. Более того, он действительно удобен. Только, чтобы осознать это удобство, надо с ним поработать. Зарезервированные слова в верхнем регистре формируют очень наглядный каркас исходного текста. И в нем лично мне крайне комфортно ориентироваться. Я не проводил полноценных социологических опросов, но среди тех, кто работал с Модулой-2 (а это куда более обширная аудитория, нежели сменивший его Оберон) мне не встречались отрицательные мнения на этот счет. Хотя то, что это было поначалу многим непривычно -- факт.

Честно говоря, мне нередко приходится слышать сетования на это неудобство синтаксиса Оберона. Ну хорошо, давайте предположим компромисс -- пусть поддерживаются обе формы для зарезервированных слов (как это планируется в новом языке в рамках проекта “Роса”). Проблема ушла? Ушла. Притом элементарным решением. А что же с остальными вопросами синтаксиса? Интересно, почему мы редко задаемся вопросами небрежности доминирующего ныне Си-синтаксиса? Это в самом деле глубокая и серьезная проблема. Желание потакать привычкам, оправдываясь преемственностью языков (C++, Java, C#)? Допустим, что нет необходимости учитывать пресловутую преемственность и привычки масс. Давайте сопоставим Си-синтаксис и виртовский синтаксис (не говорю Паскаль-синтаксис, поскольку Модула-2 и Оберон его сильно уточнили в лучшую сторону). Не является ли небрежность Си-синтаксиса потенциальным источником многих ошибок?

Если мы проблемы Си-синтаксиса сводим преимущественно к оператору присваивания, это будет слишком упрощенный взгляд. Проблемы и в построении выражений, и в операторах, и в объявлениях сущностей, да почти везде... Кстати, проблемы и виртовском синтаксисе.

Важно видеть не детали, а существенную разницу в подходах: Си-синтаксис заточен на удобство синтеза исходного текста (экономит время написания); виртовский синтаксис -- на удобство анализа исходного текста (экономит время на понимание программы -- с целью проверки и модификации).

С позиции этого критерия (удобство быстрой записи) Си-синтаксис (я сюда включаю не только Си, но C++, Java, C#) ) вполне достиг своей цели (хотя есть и более изощренные в этом плане языки). Однако проблема в том, что человек должен заниматься не только и не столько синтезом, сколько анализом программы. При этом это может быть как ее автор, так и посторонний человек (для промышленного, некустарного программирования это крайне важно). Более того, сам автор, обратившийся к своей же программе спустя длительный период, сам попадает в позицию постороннего человека. И для него анализ становится много важнее синтеза. Вот тут-то и всплывают проблемы. Чем компактнее запись, чем плотнее она упаковывает конструкции, тем сложнее заниматься распаковкой (в голове). В этом и есть глубинные проблемы Си-синтаксиса.

К чему подталкивает желание экономить время при наборе текста? К неаккуратности. Причем неаккуратности даже не внешней, а смысловой. Меня не удивляет то, что работа с отладчиками и системами тестирования -- это норма для современных языков. Мир Модулы-2 мне открыл совсем иной подход. Я стал не кодировать (как при работе на Фортране, Си или даже том же классическом Паскале -- с этих языков я начинал), а конструировал. При этом меня не интересовало желание побыстрее скомпилировать что-нибудь и запустить. Зачем? Я конструировал здание (модуль, совокупность модулей) методично. Шаг за шагом. И спокойно анализировал исходный текст. Не один день. На этом не экономил. При таком подходе для меня крайне важен синтаксис, позволяющий постоянно работать в режиме анализа. Я вообще не пользовался никаким отладчиком (хотя в той же TopSpeed Modula-2 или в Logitech Modula-2 отладчики по своему уровню превосходили ведущие отладчики для других языков). Мне не нужен был и посмертный отладчик. Это качественно иной подход к программированию. И он дает результат такого качества, которого очень трудно добиться в мире языков с Си-синтаксисом.

Рассмотрим теперь частность, которая почему-то больше всего приковывает к себе внимание -- оператор присваивания ("=" в Фортране и Си). Если человек немного знаком с математикой, он уверен, что знаком равенства обозначается что-то симметричное. Откуда возникла эта идея использования знака равенства в качестве оператора присваивания? Из желания сэкономить время написания программы (ее синтеза программистом). Да, этот критерий -- экономии при написании -- пропитал весь Си-синтаксис (и фигурные скобки -- из той же оперы). Более того, он стимулировал к такому мышлению и программиста.

Вариант, восходящий к Алголу-60 (а виртовские языки лежат в русле этой традиции), отдает предпочтение записи ":=". Она лишена недостатка Си, но вряд ли является идеалом. Известны и другие подходы. В первом языке программирования (Plankalkul), созданного Конрадом Цузе в 1940-х годах, для присваивания использовалась запись "=>" (при этом что присваивают -- слева, а чему присваивают -- справа). Именно это вариант хотел пробить проф. Рутисхаузер в конце 1950-х годов в Алголе-60, но его предложение отклонили. Есть вариант "<-" (так записывался оператор присваивания в языке Mesa).

Позиция Вирта по вопросам синтаксиса изложена, например, в его статье "Хорошие идеи, взгляд из Зазеркалья", в разделе "Особенности языков программирования": http://www.citforum.ru/programming/digest/wirth/
Эта статья, как известно, служила основой для большинства его выступлений, с которыми он проехал по нашей стране в ходе своего Большого турне 2005 г.

К сожалению, Вирт не обратил внимание аудитории на существенную разницу в критериях для оценки синтаксисов разных языков (что я изложил выше). И, на мой взгляд, напрасно. Люди подходят к оценке синтаксиса и семантики языков с позиции своих критериев, забывая о том, что выдвигать претензии к инструменту надо, понимая, какие критерии ставил во главу угла сам автор. Иначе возникает простой вопрос: кто заставляет пользоваться именно этим инструментом.

Из-за игнорирования критериев и их важности для тех или иных задач и возникают, на мой взгляд, проблемы у большинства программистов с пониманием компактного строения Оберона. Это язык-ядро. Созданный для реализации ОС. Но не стремление вложить в язык максимум средств, чтобы облегчить жизнь сегодня (когда надо создавать программу) , но усложнить ее завтра(когда эту программу надо пересматривать и развивать).
Источник: http://forum.oberoncore.ru/viewtopic.php?p=8584#p8584

Автор:  Валерий Лаптев [ 23 дек 2012, 16:49 ]
Заголовок сообщения:  Re: Некоторые размышления о синтаксисе

Страуструп написал книжку "Дизайн и эволюция С++". И в этой книжке есть очень важные слова:
- ... отказаться от традиционного исходного текста и положить в основу инструментов абстрактное внутреннее представление. ...
Естественно, текст все равно необходим - его читают пользователи... Форматирование текста с соблюдением некоторых правил отступа - лишь один из возможных взглядов на программу. ...
Из представления о синтаксисе как об интерфейсе между языком и пользователем следует, что возможны другие интерфейсы. Единственная фундаментальная константа - это базовая семантика языка.
---------------------
Мы так и сделали. В нашем семантическом редакторе для одного языка сейчас поддерживается 4 варианта синтаксиса, причем каждый из них - в двух лексиках: русской и английской.
Поэтому с некоторого момента я об удобстве синтаксиса просто не думаю - его можно сделать каким угодно.
Гораздо важнее различия в семантике языков.

Автор:  Илья Ермаков [ 25 дек 2012, 14:03 ]
Заголовок сообщения:  Re: Некоторые размышления о синтаксисе

В принципе, за семантическими редакторами будущее, я согласен. И здорово, что Вы это будущее уже нащупываете :) Я вот тоже хочу :)

У меня, например, в голове часто представляется: выделил в таком редакторе пачку переменных - и для всех них поставил свойство "экспортированы" :) Или что-нибудь такое в этом духе... Совершенно новый уровень автоматизации труда. Собственно, именно поэтому инвестировать усилия в какую-то пресловутую подсветку синтаксиса сейчас совершенно бессмысленно - всё прахом пойдёт :)

Автор:  Влад Жаринов [ 25 дек 2012, 15:39 ]
Заголовок сообщения:  Re: Некоторые размышления о синтаксисе

Да... я уже и знаю, как это должно делаться в схемной форме... :)

И вот ещё важно - прорабоотать те самые различия семантики. В смысле - сколько "понятийных ядер" (наряду с императивом, уже выделенным) надо иметь для формализации задач "от образа постановки до системы алгоритмизованных процессов". Пока представляется, что Овчинников некий базис наметил (если интегрировать туда логику, скажем, в духе МИВАР и Шалака)... но нужна стройная система языков...

Автор:  Валерий Лаптев [ 25 дек 2012, 21:39 ]
Заголовок сообщения:  Re: Некоторые размышления о синтаксисе

Илья Ермаков писал(а):
В принципе, за семантическими редакторами будущее, я согласен. И здорово, что Вы это будущее уже нащупываете :) Я вот тоже хочу :)

У меня, например, в голове часто представляется: выделил в таком редакторе пачку переменных - и для всех них поставил свойство "экспортированы" :) Или что-нибудь такое в этом духе... Совершенно новый уровень автоматизации труда. Собственно, именно поэтому инвестировать усилия в какую-то пресловутую подсветку синтаксиса сейчас совершенно бессмысленно - всё прахом пойдёт :)

Да, подобные операции мы некоторое время начали продумывать.
Ибо редактор не символьный, надо анализировать и нарабатывать множество не символьных операций, которые не ломают синтаксис программы - она всегда должна оставаться синтаксически правильной.
Мы - сделаем! :)

Страница 1 из 1 Часовой пояс: UTC + 2 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/