All streams
Search
Write a publication
Pull to refresh
13
0.7
Алексей Ткаченко @a-tk

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

Send message

Кроме алфавита есть ещё раскладка, состояние shift и caps lock и ещё немножко всякое разное.

    sti                  ; разрешить прерывания
    popfd                ; восстановить EFLAGS
    iret                 ; возврат из прерывания

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

У Вас же получается разрешение прерывания до выхода из обработчика, что приводит к тому, что другой обработчик может вытеснить выполнение сразу после инструкции sti. Далее, popf всё равно восстановит флаг прерываний, ранее сохранённый, поэтому операция sti перед popf тут избыточна.

// Exception с InnerException, и AggregateException с InnerExceptions есть из коробки

// по этому поводу допустим..
public class EInOutError : Exception
{
  public required int ErrorCode { get; init; }
}

try
{
  DoSomething();
}
catch (Exception ex) when (ex.HasErrorCode(200) is {} e)
{
  // Handle e
}

Для поддержки нужен один мелкий хелпер, который иерархию развернёт в плоскую коллекцию:

Текст хелпера
public static class ExceptionExtension
{
  public static EInOutError? HasErrorCode(this Exception e, int code)
  {
      return e.WithNested().OfType<EInOutError>().FirstOrDefault(x => x.ErrorCode == code);
  }
  
  public static IEnumerable<Exception> WithNested(this Exception e)
  {
    yield return e;
    
    if (e is AggregateException { InnerExceptions: { Count: > 0 } innerExceptions })
    {
      foreach (var x in innerExceptions)
      {
        yield return x;
      }
    }

    if (e.InnerException is { } inner)
    {
      yield return inner;
    }
  }
}

И совсем недалеко до 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, тогда да, придётся.

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

Information

Rating
1,831-st
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity

Specialization

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