Оберон-клуб «ВЄДА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. Руслан Богатырев писал(а): В отношении синтаксиса. Как нередко говорят, синтаксис -- вопрос вкуса. А вкус, как известно, формируется. Вкус человека во многом формируется той культурной средой, в которой он находится, теми, с кем он общается, тем, какие книги читает и т.д. Источник: http://forum.oberoncore.ru/viewtopic.php?p=8584#p8584
Заглавные буквы в зарезервированных словах и предопределенных идентификаторах применяются в Модуле-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 г. К сожалению, Вирт не обратил внимание аудитории на существенную разницу в критериях для оценки синтаксисов разных языков (что я изложил выше). И, на мой взгляд, напрасно. Люди подходят к оценке синтаксиса и семантики языков с позиции своих критериев, забывая о том, что выдвигать претензии к инструменту надо, понимая, какие критерии ставил во главу угла сам автор. Иначе возникает простой вопрос: кто заставляет пользоваться именно этим инструментом. Из-за игнорирования критериев и их важности для тех или иных задач и возникают, на мой взгляд, проблемы у большинства программистов с пониманием компактного строения Оберона. Это язык-ядро. Созданный для реализации ОС. Но не стремление вложить в язык максимум средств, чтобы облегчить жизнь сегодня (когда надо создавать программу) , но усложнить ее завтра(когда эту программу надо пересматривать и развивать). |
Автор: | Валерий Лаптев [ 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/ |