Известно, что в Си-подобном синтаксисе круглые скобочки несколько перегружены смыслом. Это и средство для группировки выражений, и часть грамматики некоторых стандартных выражений вроде for, if и вызов функции, и приведение типов...
На мой взгляд это несколько снижает читабельность.
А как бы вы отнеслись к сокращению "скобочности" синтаксиса? Хотя бы в выражениях. Например, вместо
for (x in y)
expr
было бы
for x in y do
expr
Или вместо
if (x > y)
expr
else
expr
было бы
if x > y then
expr
else
expr
Само собой при сохранении остальной си-подобности.
Здравствуйте, Курилка, Вы писали:
К>[cut] ВВ>>Само собой при сохранении остальной си-подобности. К>И без фигурных скобок и с вытекающими их этого последствиями?
Нет, с фигурными. Фигурные скобки — тема отдельная, про них речи не было.
Здравствуйте, Mystic, Вы писали:
ВВ>>А как бы вы отнеслись к сокращению "скобочности" синтаксиса? Хотя бы в выражениях. Например, вместо M>Так паскаль получится? Или Ada Но я только "за" :w
Паскаль получится, если фигурные скобочки заменить на begin/end
Но дело не в том, что там получится. Собственно, мне интересно, не является ли конструкция вида
for x in y do
expr
более "чистой" с т.з. синтаксиса, чем
for (x in y)
expr
Учитывая, что внутри for у нас может быть куча дополнительных скобочек.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, Курилка, Вы писали:
К>>[cut] ВВ>>>Само собой при сохранении остальной си-подобности. К>>И без фигурных скобок и с вытекающими их этого последствиями?
ВВ>Нет, с фигурными. Фигурные скобки — тема отдельная, про них речи не было.
Ну мне в глаза бросается их отсутствие для си-подобного языка.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>более "чистой" с т.з. синтаксиса, чем
Непонятно, что значит "более чистой". Очень субьективное понятие. С точки зрения разбора скобочки нисколько не вредят. С точки зрения читабельности в случае сложного выражения всегда можно написать for(;), а уже внутри него разруливать. Так, кстати, я и поступаю в более-менее сложных случаях. Ну и скобочки по стилю написания лучше соответствуют всяким другим {, ++, ?:.
С другой стороны, что лично я готов пойти дальше, мне академичность Ada нравится куда больше.
Здравствуйте, Курилка, Вы писали:
ВВ>>Нет, с фигурными. Фигурные скобки — тема отдельная, про них речи не было. К>Ну мне в глаза бросается их отсутствие для си-подобного языка.
В конструкциях типа for/if скобочки всегда являлись необходимыми только если у нас несколько выражений.
Предполагается что синтаксис такой:
for x in y do
expr;
for x in y do {
expr1;
expr2
}
В качестве альтернативного решения вспоминается Go, если я правильно понял его грамматику, где в подобных выражениях круглые скобочки являются необязательными, а вот фигурные — необходимы в любом случае:
ВВ>>более "чистой" с т.з. синтаксиса, чем
M>Непонятно, что значит "более чистой". Очень субьективное понятие. С точки зрения разбора скобочки нисколько не вредят. С точки зрения читабельности в случае сложного выражения всегда можно написать for(;), а уже внутри него разруливать. Так, кстати, я и поступаю в более-менее сложных случаях. Ну и скобочки по стилю написания лучше соответствуют всяким другим {, ++, ?:.
M>С другой стороны, что лично я готов пойти дальше, мне академичность Ada нравится куда больше.
Здравствуйте, Mystic, Вы писали:
M>Непонятно, что значит "более чистой". Очень субьективное понятие. С точки зрения разбора скобочки нисколько не вредят. С точки зрения читабельности в случае сложного выражения всегда можно написать for(;), а уже внутри него разруливать. Так, кстати, я и поступаю в более-менее сложных случаях. Ну и скобочки по стилю написания лучше соответствуют всяким другим {, ++, ?:.
ОК, point taken.
M>С другой стороны, что лично я готов пойти дальше, мне академичность Ada нравится куда больше.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Здравствуйте, Курилка, Вы писали:
ВВ>>>Нет, с фигурными. Фигурные скобки — тема отдельная, про них речи не было. К>>Ну мне в глаза бросается их отсутствие для си-подобного языка.
ВВ>В конструкциях типа for/if скобочки всегда являлись необходимыми только если у нас несколько выражений. ВВ>В качестве альтернативного решения вспоминается Go, если я правильно понял его грамматику, где в подобных выражениях круглые скобочки являются необязательными, а вот фигурные — необходимы в любом случае
Довольно значительное число людей берут позицию авторов Go в качестве стандарта кодирования на других си-подобных языках, надеюсь, не надо рассказывать про возможные ошибки при неиспользовании фиг. скобок.
ВВ>В качестве альтернативного решения вспоминается Go, если я правильно понял его грамматику, где в подобных выражениях круглые скобочки являются необязательными, а вот фигурные — необходимы в любом случае:
Добавлю, что в Go некоторые решения, в частности синтаксические, сделаны с упором на сверхбыстрый парсинг и компиляцию. А это далеко не всегда самые приоритетные причины. Если рассматривать Go как пример синтаксиса, то нужно учесть, что без заморочек про скорость компиляции, его синтаксис был бы другим. Неизвестно насколько другим, правда.
Здравствуйте, Курилка, Вы писали:
К>Довольно значительное число людей берут позицию авторов Go в качестве стандарта кодирования на других си-подобных языках, надеюсь, не надо рассказывать про возможные ошибки при неиспользовании фиг. скобок.
А многие не берут. И заставлять их использовать фигурные скобки на уровне грамматики несколько неправильно.
Писать скобки в случае одного выражения или не писать — это тема для отдельного флейма и вроде как такой флейм тут недавно был, смысла в его продолжении я не вижу.
Замечу только, что если, к примеру, из языка убрать разбиение на statements и expressions, то все уродство обязательных фигурных скобочек сразу же вылезет наружу:
Здравствуйте, Temoto, Вы писали:
T>"академичность Ada" это что?
Несколько избыточный синтаксис, но проработанный таким образом, что ошибка/опечатка в одном символе почти никогда (кроме как в идентификаторах) не приводит к синтаксически правильной программе. Плюс возможность хорошей диагностики ошибок компиляции.
Здравствуйте, Воронков Василий, Вы писали:
M>>С другой стороны, что лично я готов пойти дальше, мне академичность Ada нравится куда больше. ВВ>Дальше — это куда?
Здравствуйте, Temoto, Вы писали:
T>Добавлю, что в Go некоторые решения, в частности синтаксические, сделаны с упором на сверхбыстрый парсинг и компиляцию. А это далеко не всегда самые приоритетные причины. Если рассматривать Go как пример синтаксиса, то нужно учесть, что без заморочек про скорость компиляции, его синтаксис был бы другим. Неизвестно насколько другим, правда.
У меня возникли другие мысли, глядя на "бесскобочные" if-ы и for-ы в Go, особенно если учесть, что язык все равно же Си-подобный, поэтому вышеприведенный пример на Go можно записать и так, и он будет полностью валиден:
for (a < b) {
a *= 2
}
Не уверен, насколько это все влияет на скорость парсинга, мне кажется не самый это значительный момент
А вообще я его как пример синтаксиса не рассматриваю, пример в данном случае скорее ML. Ну, естественно, касательно круглых скобочек только.
Здравствуйте, Mystic, Вы писали:
M>Здравствуйте, Воронков Василий, Вы писали: M>>>С другой стороны, что лично я готов пойти дальше, мне академичность Ada нравится куда больше. ВВ>>Дальше — это куда? M>В сторону адского синтаксиса.
Здравствуйте, Mystic, Вы писали:
M>Здравствуйте, Temoto, Вы писали: T>>"академичность Ada" это что? M>Несколько избыточный синтаксис, но проработанный таким образом, что ошибка/опечатка в одном символе почти никогда (кроме как в идентификаторах)
...и кроме как при группировках/вызовах, которые, если я не ошибаюсь, в Ada так же выражаются через круглые скобочки.
Я вот, например, не припомню ошибок, связанных с неправильно расставленными {} — надо сказать, тут и авто-формат в редакторе помогает, — а вот при группировках внутри вызовов и проч. ошибочки были.
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Т.е. begin/end и все такое?
Да. Примерно так:
-- Пустая инструкция
null;
-- Присваивание
Result := Expression;
-- Блоки
Calculation_Of_Roots: -- Не обязательно
declare
D: Float;
begin
D := B*B - 4*a*C;
exit Calculation_Of_Roots when D < 0;
-- ...
end Calculation_Of_Roots; -- Если не указано имя блока, то можно не указывать
-- Условный оператор
if Something_Interesting then
Do_Interesting_Job;
elsif Somethig_Groove
Do_Groove_Job;
end if;
-- Выбор
case Letter is
when 'a'..'z'| 'A'..'Z' => Put ("letter");
when '0'..'9' => Put ("digit! Value is"); Put (letter);
when '''' | '"' | '`' => Put ("quote mark");
when '&' => Put ("ampersand");
when others => Put ("something else");
end case;
-- Циклы
loop
Inc_Counter;
end loop;
while I_am_alive loop
Please_Kill_Me;
exit when Reguest_Declined;
end loop;
for I in Array'Range loop
Process(Array[I]);
end loop;
Outer_Loop:
loop
Do_Important_Job;
loop
Do_Important_Job;
exit Outer_Loop when Am_I_Tired;
end loop;
end loop Outer_Loop;
-- Исключения
declare
Abort: exception;
begin
raise Abort;
exception
when Abort => Put("Abort exception");
when others => Put("General exeption");
end;