Здравствуйте, Сергей Губанов, Вы писали:
СГ>1) Известно, что...
Анонимный источник, близкий к правительству сообщает...
СГ>2) Известно, что стандарты оформления Си-образного кода требуют использования большего количества строчек чем это реально необходимо
Стандарты есть разные, Вы о каком их них?
СГ>синтаксический оверхед = a/b = c
Чтобы не возвращаться к этому впоследствии, скажу, что простой подсчёт количества лексем, включая сюда все скобочки, малоосмыслен. Фишка синтаксиса в удобном восприятии, а лишняя пара скобок практически никогда этому не мешает — они маленькие
Цикл с проверкой условия в начале итерации
while(a) x();
Я предпочитаю выносить x() на отдельную строку, чтобы было удобно ставить breakpoint. Для Виртовских языков это тоже актуально, кстати.
Цикл с проверкой условия в середине итерации
Если уж мы взялись оптимизировать кол-во строчек (занятие почти бессмысленное, но тем не менее...), то никто ничего не теряет от помещения открывающей скобки на одну строку с предваряющей конструкцией.
while(true) {
x();
if(a) {
y();
break;
}
z();
}
СГ>СГ>LOOP
СГ> x;
СГ> IF a THEN y; EXIT END;
СГ> z
СГ>END
СГ>
В Вашем синтаксисе неясно, что "y" это вызов функции. Если эта функция принимает параметры, то скобочки и в Обероне потребуются. Новые перерасходы считайте сами.
Цикл с проверкой условия в конце итерации
do x(); while(a);
Инструкция выполнения по условию
if(a) x();
Инструкция выполнения по условию с альтернативой
if(a)
x();
else
y();
Сложная инструкция выполнения по условию
if(a)
x();
else if(b)
y();
else
z();
Здесь я не стал вытягивать оператор в одну строку, но порекомендовал бы и d Обероне разбить его на три. Для наглядности.
Инструкция выбора варианта выполнения
Реально необходимый и достаточный синтаксис:
CASE n OF
a: x |
b: y
ELSE z
END
Давайте всё-таки не будем громоздить спецсимволы один на другой и напишем красиво, тем более, что в реальном коде вместо x, y, z наверняка будет что-то помассивнее. А если записать в пять строк, явно видна асимметрия синтаксиса Оберона: каждая строка завершается по-своему.
Я везде поубирал в примерах лишние {} и предвижу возражение: мол, если действия будут сложнее x(), y(), z(), то сишный синтаксис потребует лишних скобок, а обероновский — нет. На это я сразу отвечу, что тогда и в Обероне для наглядности потребуется перенос по строчкам, а пара скобочек в массе кода просто визуально потеряется. Пример (скопировал кусок отлаживаемого кода):
"Сиобразный":
if(a) {
ItemIndex.Index = atoi( Buff.POSTINDEX );
ItemIndex.IndexState = ItemIndex.Index == 0 ? INDEX_UNKNOWN : INDEX_EXACT;
Syncronize( ItemIndex );
}
else {
ItemIndex.IndexState =
Buff.FLAGS & ADDR_FLAG_ACTUAL ? INDEXES_DIFFERENT : INDEX_UNKNOWN;
}
if( FirstItem ) //...
"Оберонообразный" (сорри, выражения внутри я не преобразовал, не знаю, как; скажу спасибо, если кто-то это за меня сделает)
IF a THEN
ItemIndex.Index = atoi( Buff.POSTINDEX );
ItemIndex.IndexState = ItemIndex.Index == 0 ? INDEX_UNKNOWN : INDEX_EXACT;
Syncronize( ItemIndex );
ELSE
ItemIndex.IndexState =
Buff.FLAGS & ADDR_FLAG_ACTUAL ? INDEXES_DIFFERENT : INDEX_UNKNOWN;
END
IF FirstItem THEN //...
Что видим? Те же 10 строк.
Ну и финальный плевок в Оберон — идентификаторы ЗАГЛАВНЫМИ буквами. Вот это напрягает втрое больше, чем все сишные скобочки вместе взятые — ну не ориентированы шрифты на то, чтоб подряд идущие заглавные хорошо читались! Те, кто рисуют шрифты добиваются того, чтобы строчные буквочки плавно взглядом воспринимались, а на заглавных взгляд чтобы наоборот — спотыкался.
Резюме
Синтаксис языка C++ (Java, C#...) возможно страдает некоторой избыточностью, но её масштабы сильно преувеличены в исходном сообщении. Вопрос удобочитаемости остаётся открытым — люди, уже знакомые с сишным синтаксисом как правило не испытывают ни малейших затруднений в чтении программ, данных про Оберон не имею, полагаю, ситуация та же. Компактность кода (измеряемая в количестве лексем или символов), как таковая, является сомнительным приоритетом, никак не обосновано то, что буквы надо экономить. Количество строк более обоснованный критерий, ибо когда функция/алгоритм занимаешь меньше места (а особенно, если целиком влазит на экран), он проще понимается, "охватывается одним взглядом". Однако для этого нужно брать какой-то реальный код и сравнивать его (как сделал я в примере выше и который не показал никаких преимуществ Оберона). Отдельные синтаксические конструкции тут роли не играют.
Берёшься сравнивать — сравнивай добросовестно. Мы технари, а не рекламисты. Imho.