Обновить
12
0.5
Алексей Ткаченко @a-tk

Разработчик ПО

Отправить сообщение

И совсем недалеко до switch expression осталось. А там, глядишь, и нормальный pattern matching завезут.

Развиваем идею:

v := if x <> nil then x.prop else nil;

Ждём оператор ?. следующие десять лет.

Да не надо ничего опровергать. Современное состояние физики указывает на то, что надо обобщение, но форма этого обобщения ещё не обнаружена (и не факт что будет обнаружена, хотя хотелось бы надеяться на позитивный исход). И мнение учёного, жившего в контексте науки середины прошлого века, погружённого в контекст тех времён, тоже нет смысла опровергать.

Или мю-мезон

Не опровержение, ведь КМ и ОТО являются частными случаями более общей теории, до которой физика ещё не добралась. Так же как теория тяготения Ньютона является предельным случаем ОТО для случая слабых полей и малых скоростей (что эквивалентно бесконечной скорости света в знаменателе). Отсюда и страх Ньютона о том, что он получил дальнодействующую теорию.

Экономика последних фантазий выглядит нереалистичной

Жёсткие - тоже. Но другие.

Скорее всего здесь было упрощение исходного компонента при портировании.

override в методе видели?

Во многих ваших статьях проскальзывает мысль, что проблема вот тут, независимо от контекста. По факту у Вас сейчас происходит то, что написано в соседней статье от Вашего же коллеги: https://habr.com/ru/companies/pvs-studio/articles/922616/

Issue 5 тоже похоже на ложное срабатывание. Для этого надо смотреть более широкий контекст. В первую очередь не приходит ли данное свойство из какого-интерфейса, в других реализациях которого могут быть другие варианты, а код оставлен для унификации между ветвями для сокращения неожиданностей.

Issue 2 тоже ложное срабатывание. Но чтобы с этим разобраться, надо сначала понять модель лэйаута и какие бывают контролы. В частности, Canvas предоставляет неограниченное внутреннее пространство для размещения контролов независимо от предоставленного ему родительским элементом места. Поэтому availableSize заменяется на бесконечно доступное. А возвращаемое значение говорит, что заберёт он себе доступный минимум. И помним, что измерения размеров дочерними элементами управления ценно побочным эффектом: теперь все дети знают свои размеры и это будет использовано дальше, в layout phase.

Отсутствие понятия UB не означает отсутствия UB...

Если товарищ не дошёл до фокусировочной маски раньше - то ССЗБ

По поводу последнего примера с

private static bool MoveNextEnumerator(IEnumerator<int> enumerator)

можно предложить другое решение:

private static bool MoveNextEnumerator<T>(ref T enumerator) where T : struct, IEnumerator<int>

private static bool MoveNextEnumerator<T>(T enumerator) where T : class, IEnumerator<int>

И никаких проблем

А ещё можно вспомнить, что перечисление умеет в утиную типизацию и интерфейсы IEnumerable и IEnumerator строго говоря не нужны: https://habr.com/ru/articles/148905/

Но если мы хотим в LINQ, тогда да, придётся.

А в каком месте формул фигурирует хоть что-то, относящееся к галактикам?

На x86_64 запись 32-битного регистра приводит к обнулению старших битов соответствующего регистра: http://x86asm.net/articles/x86-64-tour-of-intel-manuals/

Поэтому неверно, что в старших битах остаётся мусор. А поскольку в конвенциях вызова регистр для аргумента и регистр для результат разные, то мы в любом случае получаем обнуление старших битов.

Память должна распределяться при старте раз и навсегда. Динамическое выделение с потенциальной фрагментацией кучи может привести к отказу из-за неудачного распределения свободных блоков, которые когда-нибудь не соберутся воедино.

template<class T, int Id = 0>
T& instance()
{
  static char data[sizeof(T)];
  static bool initialized;

  if (!initialized)
  {
    initialized = true;       
    new(data)T();
  }
  return *reinterpret_cast<T*>(data);
}

instance<Timer>();
instance<Channel, 0>();
instance<Channel, 1>();

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

С этой точки под необходимость можно протащить аргументы конструктора либо непосредственно через аргумент функции, либо через trait, например, либо ещё как-то.

Информация

В рейтинге
2 066-й
Откуда
Минск, Минская обл., Беларусь
Дата рождения
Зарегистрирован
Активность

Специализация

Software Developer, Software Architect
Lead
От 1 000 000 $
C#
.NET
C++
Git