yigal_s: (Default)
Действительно, надо на время забросить расистский, шовинистический, антисемитский и всякий другой необщепринятый, хотя и небесполезный в нашем нетривиальном мире, дискурс, и попинать немножко ногами что-нидь из программирования. Пинать я буду не голословно, а приводя малоизвестные и интересные (очень надеюсь) примеры.

Самая мерзкая вещь, которую я только знаю в ООП - это так называемое "наследование". Не понимаю, как вообще можно его использовать, когда... ) Ясно совершенно, что действительное число - частный случай комплексного. Поэтому, если оформлять их в виде классов, то действительный тип должен наследовать комплексный. Именно так и не иначе. Комплексный тип - базовый. Read more... )Хотя квадрат и является разновидностью прямоугольника (не говоря уже о том, что и ромба тоже), поспешно было бы наследовать квадрат от прямоугольника. Read more... ) Проблема здесь в том, что прямоугольник в программировании и прямоугольник в математике вовсе не одно и то же. Read more... )
yigal_s: (Default)
Свершенно мерзкое словечко const. Стоит только лишь наивно поверить, что константность лучше указывать, чем игнорировать, как код начинает пестрить этим словечком, что АхредуптусЪ русский дореволюционный буквой Ъ. А ежели где его и позабудешь - компилятор, ессно, тебя не поправит, "сойдет и так".

Между тем, совершенно понятно, что константность значения в приличном языке должна быть обеспечена по умолчанию, без всяких ключевых слов, а именно вариабельность и следует указывать.

Например,
char **a;
приличной реализации языка следует понимать как константный указатель на константный указатель на константный символ.

А, к примеру,

char var **a = getAddress();
**a = 'Ъ';


следует понимать как цепочку константых указателей на неконстантный символ (который мы, собственно, и собрались менять). И вот тут-то, если где словечко var будет позабыто, компилятор начнет ругаться практически наверняка.

Мало этого. Слово var по большому счету тоже излишне. Неконстантность значения есть, вообще говоря, преступление перед Разумом. В приличном языке оператор присваивания, меняющий значение, уместен не более, чем оператор goto. Что это за бред такой?! Вы где-то видели в математике (оперирующей символами сплошь и рядом) какой-то там "оператор присваивания"?! Оператор присваивания полностью запутывает программу, принуждая программиста отслеживать так называемые "изменения переменных" - это пострашнее отслеживания любых переходов с метки на метку. Язык Prolog же, к примеру, как и следовало ожидать, прекрасно обходится без оператора присваивания. Ибо нафиг не нужен.
yigal_s: (Default)
Всё же ужасно грустно, что в любимом моём С++ нет блока try-finally.

Как ни дёргайся, а пристойный exception-safe код написать никак не получается. И временами это просто уже бесит.
yigal_s: (Default)
Там-сям, почитывая форум по мультитредному программированию, собрал некоторые идеи по расширению функциональности стандартных синхронизационных примитивов. Большинство, кажется, принадлежат Alexander Terekhov-у. Воспроизвожу я всё по памяти и могу что-то где-то и напутать.

Для семафора или мютекса имеет смысл введение операции

bool Semaphore::TryToRelease();

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

Другая идея Read more... )
yigal_s: (Default)
> I don't quite see how to add a timeout function using your algo. without
> getting race-conditions...

Интересный код.

yigal_s: (Default)
Некий изысканный Windows NT программист вместо того, чтобы присвоить значение указателю вот так:
          pointer = new Object();
и проверить его в другом месте вот так:
          if(pointer)
          {
             pointer->Method();
             //etc...
          }
присвоил его с использованием Interlock-операции вот так: далее... )

Ответы здесь
.