Здравствуйте, varenikAA, Вы писали:
AA>>>возможность опускать создает неопределенность.
N>>В чём?
AA>if (true)
AA>do1();
AA>do2();
Это не неопределённость. Она совершенно конкретно решена, ну а то, что можно форматированием сбить чтение для человека — это уже проблема человека, и решается она с человеческой стороны.
Я вашу реплику изначально понял как то, что возможность опускать вторую часть для лисповского if создаёт неопределённость — вот это было бы точно странно.
Что сейчас большинство новых языков форсирует блочные скобки или в стиле if (условие) { блок } или if условие then блок end — факт, да, как раз после таких проблем с "куда отнести этот оператор".
AA>>>в любом языке есть правописание. старые языки не могли обеспечить контроль форматирования.
N>>Это насколько старые и какие именно?
AA>все что возникло до раста
"Контроль форматирования" это Обстракция (tm).
В том же примере с if(cond) do1; do2; — автоформатирование отлично справится:
if (cond)
do1;
do2;
и точно так же можно написать чушь:
if (cond) {
do1;
do2; }
Вот из-за подобных чудес некоторые требуют автоформаттер как commit hook или CI check (как у нас — даже несмотря на все диверсии применяемых средств, обычно лучше с ними, чем с неконтролируемыми эффектами от кривых отступов и т.п.)
AA>Я утверждаю, что если в обычно тексте, опустить хотя бы одну запятую весь смысл меняется.
AA>Так и у каждого ЯП своя семантика. И свои правила ее выразить, но в отличии от обычного языка у ЯП есть возможность быстро эволюционировать.
AA>Правда эволюция не всегда идет в нужном направлении. например C#, очевидно что он достиг своего пика.
Про C# такие подробности не скажу — но эволюция ЯП очень часто упирается в тупые проблемы легаси.
Вот как, например, организовать в языке вместо "int foo(int x);" — "func foo(x: int): int"?