Об операторных скобках и отступах

Проектирование и разработка идеального средства программирования.

Модератор: Модераторы

Об операторных скобках и отступах

Сообщение Bonart » 23.10.2007 10:51:40

Один из известных недостатков Паскаля - его структурные операторы с единственным оператором в качестве тела цикла или альтернативы, что приводило к непрозрачности кода (висячий else) иего многословности (сплошные begin..end).
В Аде все структурные операторы уже включают в себя операторные скобки - избавились от кучи лишних begin'ов и ошибок, связанных с одиночными-составными операторами. Но для простых случаев лаконичность ухудшилась - каждый раз надо писать endif, endloop и т.д.
В Питоне вместо операторных скобок - отступы. Это хорошо для больших блоков, но плохо смотрится для маленьких плюс неудобно для автоматической генерации исходных текстов.
Я предлагаю использовать подход из Haskell - взаимозаменяемость операторных скобок и отступов.
Ключевое понятие - операторы с одним и тем же отступом - считаются последовательными и находящимися на одном уровне. Заодно это позволяет отказаться от разделителей операторов, если их не больше одного на строку.

Т.е.
Код: Выделить всё
оператор1
  оператор2
  оператор3
оператор4

эквивалентно
Код: Выделить всё
оператор1; begin оператор2; оператор3 end; оператор4

Для условного оператора
Код: Выделить всё
if условие then оператор1 else оператор2 end; оператор3

Эквивалентно
Код: Выделить всё
if условие
  оператор1
else
  оператор2
оператор3

then (открывающая операторная скобка) и endif(закрывающая) операторная скобка, а также точка с запятой (разделитель) успешно заменены отступами.
Причем можно и так
Код: Выделить всё
if условие then оператор1 else оператор2
оператор3

Закрывающая скобка endif заменена отступом - оператор3 имеет тот же уровень, что и if)
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение bw » 23.10.2007 12:31:36

Как питонозаводчик я поддерживаю идею, но:

> Это хорошо для больших блоков, но плохо смотрится для маленьких плюс неудобно для автоматической генерации исходных текстов.

Про генерацию ничего не скажу, а вот про не красиво:
Код: Выделить всё
if True: print 'True'
else: print 'False'

Ты считаешь что это не красиво? Если я тебя не правильно понял, приведи пример.

Это в защиу Python'а, а по существу... в том же "if" я считаю обязательно должен быть "then".

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Bonart » 23.10.2007 12:59:53

bw писал(а):Ты считаешь что это не красиво? Если я тебя не правильно понял, приведи пример.

Мне двоеточия не нравятся. И обязательность для else отдельной строки.
bw писал(а):В том же "if" я считаю обязательно должен быть "then".

Что предлагаемое решение в случае записи в одну строку требует
Код: Выделить всё
if условие then оператор1 else оператор2

А в несколько - позволяет как
Код: Выделить всё
if условие
  оператор1
else
  оператор2

так и
Код: Выделить всё
if условие then
  оператор1
else
  оператор2

В зависимости от собственных предпочтений программиста по части лаконичности и прозрачности кода операторные скобки можно свободно как опускать (а-ля Питон), так и указывать явно (традиционные языки).
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение bw » 23.10.2007 14:38:38

> А в несколько - позволяет как
> ...
> так и
> ...

Первый вариант я считаю лишним, как и вообще двойственность в синтаксисе.

..bw
Аватара пользователя
bw
постоялец
 
Сообщения: 359
Зарегистрирован: 01.12.2005 11:36:23
Откуда: Усть-Илимск

Сообщение Bonart » 23.10.2007 15:20:08

bw писал(а):Первый вариант я считаю лишним, как и вообще двойственность в синтаксисе.

Какая двойственность?
Никаких двойных трактовок у приведенных примеров нет!
А вот возможность двумя способами оформить одно и то же сама по себе не криминал, если служит улучшению читабельности, лаконичности и эффективности кода.
Ведь для реализации любого алгоритма хватит простой последовательности и цикла с предусловием - но таких драконовских ограничений ни в одном распространенном языке нет.
Так и здесь - есть возможность писать короткие операторы в одну строку с явными скобками и разделителями, а большие - "лесенкой" без "шумовых" символов, что лишь повышает читабельность.
Это повышает КПД кодера - плодами его усилий по оформлению текста сможет воспользоваться не только коллега, но и компилятор!
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение Deepthroat » 24.10.2007 00:00:50

А вот возможность двумя способами оформить одно и то же сама по себе не криминал

Криминал. Будешь рассматривать чужие исходники, оформленные то таким способом, то другим, а то и вообще смешанным - не раз проклянешь такую демократичность языка. Мне кажется очень и очень разумным положение типа "одна задача - одно решение". Существенно упрощает работу в коллективе и работу с чужими исходниками. Кроме того, упрощается синтаксис языка ("далай так" вместо "делай так, или так, а можно еще так, так и так, а еще можно комбинировать способы 2 и 3, а также 1, 3 и 4"). Соответственно, язык проще освоить. А из-за строгости и однозначности уменьшается возможность допустить ошибку.

Думаете, просто так люди выбирают PHP, а не Perl для Web? PHP - язык четкий, там не особо-то и разгуляешься (а PHP 6 будет построен вообще по принципу "одна задача - один оператор"), тогда как Perl допускает множество способов сделать одно и то же, ооочень гибкий синтаксис. А в результате, Perl сложно выучить, сложно разобраться в чужих исходниках.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Сообщение Bonart » 24.10.2007 07:20:15

Deepthroat писал(а):Мне кажется очень и очень разумным положение типа "одна задача - одно решение".

С такой логикой из всех структурных операторов можно оставить только цикл while. Для функциональной полноты его достаточно.
Deepthroat писал(а):PHP - язык четкий, там не особо-то и разгуляешься

Про "четкий" язык PHP - это в юмор.
Deepthroat писал(а):Думаете, просто так люди выбирают PHP, а не Perl для Web?

Думаю, что дело в низком пороге вхождения у PHP плюс его доступности практически на любом хостинге.
Deepthroat писал(а):Существенно упрощает работу в коллективе и работу с чужими исходниками.

Ну-ну. Отступы визуализируют операторные скобки для людей. Сами скобки и разделители делают то же самое для компилятора. Ручное слежение за соответствием одного другому, оказывается, сильно "упрощает" работу с чужими исходниками.
Зато ситуация, когда отступы одинаково читаются и людьми и компилятором - это, конечно, "плохо".
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение Deepthroat » 25.10.2007 01:15:15

Хорошо, оставим PHP - не тот форум и не та тема, чтобы его обсуждать.

Ручное слежение за соответствием одного другому, оказывается, сильно "упрощает" работу с чужими исходниками.

Дословно, я говорил это:
Мне кажется очень и очень разумным положение типа "одна задача - одно решение". Существенно упрощает работу в коллективе и работу с чужими исходниками.

Т.е. упрощает принцип "одна задача - одно решение", а не "Ручное слежение за соответствием одного другому". Причем, в моем варианте, никакого соответствия не требуется, т.к. этого "другого" просто нету.

Зато ситуация, когда отступы одинаково читаются и людьми и компилятором - это, конечно, "плохо".

А где я говорил, что отступы - плохо? Я писал лишь о том, что нужно оставить одну возможность и не больше. Но я не говорил, какую.

P.S. Вы мое сообщение не прочитали полностью, потому не правильно поняли, а потом просто выцепили фразы из контекста и ответили на то, чего я не говорил. Из-за этого мне пришлось повторяться и разъяснять свое предыдущее сообщение. А это надо другим участникам дискуссии? Думаю, что нет.

Так что, обращаясь ко всем, давайте уважать друг друга и читать сообщения полностью. Хотя бы те, на которые отвечаете. Если сообщение кажется большим и читать его влом, то лучше оставить его вообще без ответа.
Аватара пользователя
Deepthroat
постоялец
 
Сообщения: 144
Зарегистрирован: 06.09.2007 00:21:34
Откуда: Outer Heaven

Сообщение Bonart » 25.10.2007 16:28:15

Deepthroat писал(а): писал лишь о том, что нужно оставить одну возможность и не больше. Но я не говорил, какую.

Так одна возможность в ряде ситуаций неудобна.
Разделители неудобны для больших составных операторов, отступы неудобны для маленьких составных операторов, спокойно помещающихся в одну строку, и автоматической генерации исходников.
Deepthroat писал(а):P.S. Вы мое сообщение не прочитали полностью

Я его прочитал целиком. Требование оставить одно посчитал необоснованным. Почему - пояснил. В Паскале три цикла, хотя по теории хватает одного. Но с одним - неудобно.
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Сообщение VaSys » 27.12.2007 22:46:16

Вот вы говорите о локаничности кода, его читабельности, о том как бы помочь программисту разбирая чужой код. Хотите что-то изменить (для этого обычного нужно что-то поломать, а ломать - не сторить). Зачем?
Не проще ли всторить утилитку которая будет приводить исходный код к статндартному виду, с определенными отступами, выравниванием и прочим! И проблема решится. Добавьте возможность скрытия операторных скобок, при отформатированом тексте, и забудете про надоедливые begin...end;
VaSys
незнакомец
 
Сообщения: 2
Зарегистрирован: 26.12.2007 18:33:36

Re: Об операторных скобках и отступах

Сообщение Bonart » 19.06.2008 15:51:38

Не проще ли всторить утилитку которая будет приводить исходный код к статндартному виду, с определенными отступами, выравниванием и прочим!

Не проще. Такая утилитка будет привязывать программиста к конкретной платформе, среде разработки или просто к себе.
А зачем, когда предлагаемая возможность спокойно реализуется компилятором?
Bonart
новенький
 
Сообщения: 81
Зарегистрирован: 29.06.2007 11:47:40

Re: Об операторных скобках и отступах

Сообщение Timid » 20.06.2008 09:43:04

Мое личное мнение - проблема не в избыточности языка программирования, а в редакторе.
Если удасться создать редактор, который будет автоматически структурировать документ (код), обладать сверткой, подсвечивать синтаксис, использовать фреймы для просмотра кода вызываемых процедур и т.п., то проблем не будет.
Сильно упрощенный пример - castalia для delphi.

Кстати, может организовать проект на сайте - castalia для freepascal/лазарь - как встраиваемый редактор?
Timid
постоялец
 
Сообщения: 290
Зарегистрирован: 21.11.2007 21:33:15

Re: Об операторных скобках и отступах

Сообщение perlpunk » 28.01.2009 16:29:58

если хотя бы была возможность использовать синтаксис модулы или оберона (без кейворда begin, определение модулей с помощью module) ито уже было бы лучше :)
perlpunk
новенький
 
Сообщения: 90
Зарегистрирован: 26.09.2008 21:19:48

Re: Об операторных скобках и отступах

Сообщение alexraynepe196 » 18.03.2009 21:54:30

попробуйте ознакомица с введением к PRECC,
там как раз обсуждались сложности реальзации парсера OCCAM на yyacc\yylex.
причина сложностей в том что сложно в BNF описать грамматику с полями переменной параметризованой длины
тобиш тот самый отступ заданного размера.
вдобавок разные системы по разному обрабатывают табы, и если программер использовал табы для отступов
, скажем по неосторожности, то как их должен парсер обработать?
пойдем дальше, скажем программер сделал отступы пробелами, но вот он использовал стороннюю прогу для
форматирования текста а она переделала отступы по своему. и ето только самый явный пример как длина отступа
может потерятся.
вобчем имхо правильно древние рассудили что использование форматирования для описания алгоритма - ЗЛО.
alexraynepe196
незнакомец
 
Сообщения: 4
Зарегистрирован: 18.01.2009 16:04:18

Re: Об операторных скобках и отступах

Сообщение alexs » 18.03.2009 22:15:44

Люди - не надо фортран изобретать.
Всё что вы описали (особенно с отступами) - это суть - Фортран 77 и раньше.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

След.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

Рейтинг@Mail.ru