Цитата:
Юрий Раньше доменное имя принадлежало «Оптимизирующим технологиям», 3 года назад они не продлили регистрацию, теперь это имя моё.
Цитата:
Yoda А вы сами не имеете к ним отношения? Весьма интересный проект.
Никакого отношения к ним не имею. Имел только одно отношение – недовольство, когда они зарегистрировали это домен на себя. Я его присматривал для себя, да как-то не торопился с регистрацией. Но они увели домен из-под носа. Соответственно отношение было такое: «Ах вы такие-сякие!». Но потом они не продлили регистрацию, и моё отношение к ним улучшилось
Цитата:
Zealint [ 15 ] :: Комментарии
бесит, когда нужно закомментировать большой блок кода (например, в процессе поиска трудноуловимой ошибки бинарным поиском), а в этом блоке уже несколько десятков маленьких блоков /* */. Приходится у каждого такого блока убирать закрывающий символ или добавлять один открывающий после. Такого не должно быть НИКОГДА.
Объяснение причин, почему обычные комментарии не могут быть вложенными, можно найти здесь:
Комментарии. Если коротко, то объяснение такое:
Код:
/* начало комментария
char x[] = "*/"; // ошибка, начиная с «";»
конец комментария */
Такой код внутри комментария «ломает» этот комментарий. Чтобы правильно определить начало и конец всех вложенных комментариев, нужно проводить, как минимум, лексический анализ. Но комментарии – эта такая вещь, в которой этот анализ не проводится по определению. Даже если мы для «/*» будем искать соответствующую пару «*/», то эта пара может найтись где-нибудь в строковом литерале. Как преодолеть – предложение здесь:
Нерабочий код.
Цитата:
Freeman Разделение битовых и логических операций -- одна из немногих вещей, сделанная в Си правильней Паскаля. Для разрешения неоднозначности в Паскале приходятся скобки ставить. Сравните с SQL, например, где битовых операций нет, поэтому and и or вполне работают и без скобок. Скобки -- снижение читабельности.
Yoda Совершенно верно.
В Си упомянутые операции расположены в таком порядке по приоритету: «&» «^» «|» «&&» «||» (чем левее, тем приоритетней). На практике битовые операции как-то редко соседствуют с логическими. Логические операции чаще соседствуют с операциями сравнения. Результаты битовых операций чаще потом используются для присваивания. Скобки снижают читаемость, но уменьшение числа операций, их «экономия» - тоже неплохой момент. Если запретить толковать целые числа как логические (false – это не 0, а bool(0)), то int & int -> int (битовая операция), а bool & bool -> bool (логическая операция). Отделение булевых от числовых типов имеет смысл, если операцией проверки на равенство является «==», а не «=». В случае if (a=b) вместо if (a==b) (где a и b – числовые) компилятор должен дать ошибку, т.к. ожидается булево значение, а не числовое.
Цитата:
Yoda Я бы повесился так писать. В соответствии со своей концепцией лаконичности я, наоборот, сделал для себя в С/С++ стандартные определения типов i8, i16, 132, i64, u8, u16, u32 и u64. Не буду утверждать, что это лучше чем int* и uint*, но мне удобно.
А мне удобнее i15 (со знаком), i16 (без знака), i31 (со знаком), i32 (без знака). Концепцию лаконичности полностью разделяю. С уточнением, что не в ущерб ясности.
Цитата:
Zealint [ 17 ] :: Оператор условия
Код:
if условие { }
else if условие { }
else { }
по сути ничем не отличается от
if условие { }
else {
if условие { }
else { }
}
и именно так и должно восприниматься компилятором. Создавать лишнее ключевое слово типа elif нет никакого смысла.
запретить нафиг блоки кода с одним оператором без указания скобок.
Я для себя выбрал такой синтаксис:
Код:
(if условие
. . .
if ещё одно условие
. . .
if третье условие
. . .
else
. . .
)
Второй и третий if – это elseif в иных языках программирования. И ключевое слово экономится, и все возможности предоставлены. Правда, есть сомнения, что это никого не запутает, что все всё поймут. Возможно, elseif (как ключевое слово) всё-таки лучше оставить.
Так же отпадает необходимость оформлять блоки кода фигурными скобками {}. В языке Rust как раз запретили употреблять if, else, for, while без этих скобок. В Rust операторы for (i=0;i<N;i++); и for (i=0;i<N;i++) …; – это ошибка.