Новости Отчёт mj за август по разработке и интеграциям

Тема в разделе "Новости", создана пользователем Mr. Pickles, 9 сен 2021.

  1. Mr. Pickles

    Команда форума Модератор Редактор

    Регистрация:
    11 сен 2017
    Сообщения:
    995
    Симпатии:
    249
    Уважаемое сообщество!

    Во второй половине месяца моя работа над улучшением кэша CI наконец-то была реализована, что дало ожидаемые результаты (более быстрая проверка) применительно к веткам, которые были достаточно свежими. Оказалось, что исправление будет работать только с теми ветками, которые были перенесены (синхронизированы) после объединения моей ветки. Другими словами, очистка старых, чрезмерно раздутых кэшей — это только вопрос времени, поскольку новые, минимизированные ветки, в конечном итоге навсегда заменят старые.

    Чтобы немного сбалансировать разнообразие моих задач после долгой работы над CI и чтобы выявить другие проблемах кодовой базы, я выполнил статические проверки основных частей и заметил ошибки, которые могли возникать во время выхода из кошелька при определенных условиях, например, во время выхода, когда синхронизация ещё не была завершена.

    Также я помог в подготовке последней версии. Я просматривал запросы PR @selsta, когда это было необходимо, а также работал над решением проблемы совместимости с последней версией библиотеки Boost 1.77. После установки Element/Matrix мне стало проще взаимодействовать с разработчиками, если сравнивать с тем, как это происходило через IRC, так как у меня 2 офиса. Поэтому я смог уделить больше времени решению текущих проблем по мере их появления.

    Были открыты и другие амбициозные PR, которые мне бы хотел проверить во время отпуска, но, к сожалению, мой работодатель лишил меня отпуска, и мне придется отложить эту задачу до 2-й половины сентября, если всё будет хорошо.

    Мой отчёт о состоянии дел обогатился ещё одним новшеством — деревом зависимостей в виде изображения и соответствующего текста. Конечно, это нельзя считать универсальным решением, но может пригодиться, если кто-то хочет сократить некоторые лишние зависимости. Кстати, для информации: полная версия отчёта теперь размещается по этому адресу: http://cryptog.hopto.org/monero/health.

    Ветки

    Вот традиционный список объединённых и вновь открытых веток:

    Новые ветки
    • Mac OSX: исправление модульного теста bind_same_p2p_port: это первое рабочее исправление модульных тестов под Mac OSX. Если кратко, несмотря на то, что мы исправили случайный сбой теста p2p в Ubuntu, это исправление не было совместимо с OSX. Данный PR - обходной вариант для OSX, который, как было доказано, работает, но не является окончательным исправлением. Настоящее исправление потребует более глубокого изучения, но, как мне кажется, можно смело утверждать, что теперь мы знаем, где искать решение.
    • Trezor: UB: применение виртуальных методов в деструкторе Trezor: я обнаружил, что в классе Trezor присутствовали виртуальные методы, вызываемые деструктором класса. Хотя это совершенно нормально для Java и C#, в случае с C++ - это ошибка, ведущая к неопределённому поведению. Методика, позволяющая избежать этого с сохранением прежних функций, заключалась в замене виртуальных методов приватными, невиртуальными методами. Деструктор, как и виртуальные методы, вызывает невиртуальные. Как я уже писал во введении, сценарий, в рамках которого это может произойти, реализуется, когда вы закрываете устройство или кошелёк, но синхронизация при этом ещё не завершена.
    • Ledger: членский «режим» затеняет базовый класс: статический анализ кода позволил обнаружить, что одна переменная в подклассе Ledger «затеняла» переменную с тем же именем и типом, принадлежащую базовому классу. Это может привести к неожиданному поведению, когда переменная базового класса будет изменяться, но это изменение не будет отражено в подклассе, и наоборот. Поскольку я не смог найти никого, кто бы протестировал это в Ledger, и у меня самого просто не хватало времени, чтобы вручную проверить, как использовалась переменная, и предотвратить любые побочные эффекты, мне пришлось приостановить работу над этим PR, но я вернусь к ней в ближайшее время.
    • Устройство: удаление неиспользуемого и неправильного конструктора, не используемого по умолчанию: в процессе линтинга обнаружена ещё одна ошибка. В устройстве класса присутствовал конструктор, не используемый по умолчанию, куда передавалась переменная, которая затем не использовалась для инициализации. Это нарушает принцип наименьшего удивления, то есть, конструктор не делал того, что от него ожидалось как от пользователя класса.
    • CMake Epee: добавление минималистичной настройки теста +CI: я хотел помочь @UkoeHB и оживить тесты epee, чтобы они автоматически выполнялись через CI. Мне удалось сделать это сделать, но похоже, что решение скорее состоит в том, чтобы перенести тесты epee в собственную кодовую базу Monero, к которой epee не принадлежит. Несмотря на то, что решение является «конкурентоспособным» с точки зрения моего PR, я также проанализировал другой, открытый позже PR, противоречащий моему.
    Незначительные изменения
    • CI: запуск make в однопоточном режиме после сбоя: простая хитрость, позволяющая получать более значимые сообщения об ошибках непосредственно в конце журнала, а не где-то ближе к концу, как это происходит сейчас. Эта путаница вызвана параллелизмом make, который работает отлично только в том случае, если всё идёт хорошо.
    • CMake: добавление отсутствующей опции SANITIZE: при попытке воспроизвести утечку памяти, о которой сообщает @selsta, я заметил, что опция, позволяющая писать код для сообщения информации о подобных утечках, на самом деле не была видна для интерактивных интерфейсов CMake, таких как ccmake или cmake-qt. Этот PR решает данную проблему. К сожалению, мне не удалось воспроизвести саму ошибку на своей машине.
    • LMBD: Предупреждения: дополнение виртуальных методов LMDB «переопределением»: Дополнение виртуальных методов LMDB переопределением помогает убедиться в том, что методы ведут себя полиморфно, как и ожидалось. До появления стандарта C++11 часто случалось так, что из-за опечаток или изменений параметров методы не переопределялись, хотя предполагалось, что происходит именно так, и это приводило к большой путанице. Сегодня компилятор CLang даже генерирует предупреждение компиляции, когда вы забываете сделать такое дополнение.
    Объединённые ветки
    • CMake: документирование -Werror для add_c_flag_if_supported(): документально подтвержденные результаты проверки PR 7718. Предпочтительный способ, предполагающий, что всё делается в правильном порядке - устранение проблемы, добавление соответствующих изменений, чтобы они как можно скорее оказали нужное воздействие, и только потом обсуждение мелких деталей.
    • CMake: исправление ccache для FreeBSD: Возвращение к FreeBSD после анализа, выполненного @wfaressuissia. Теперь мы все довольны окончательным решением, которое представляется довольно чистым и не допускает «грязных» компромиссов. Благодаря данному исправлению и минимизации кэшей, время большей части сборок при кросс-компиляции будет занимать в общей сложности около 5 минут.
    Оставленные (не объединённые) ветки
    • Simplewallet: прерывание get_mnemonic_language() в случае использования отрицательного индекса: нечто обнаруженное при проведении статического анализа кода. При более глубоком рассмотрении оказалось, что это лишь ложная тревога, но только до тех пор, пока кто-нибудь не изменит соответствующий вариант реализации. Мы просто надеемся, что после отказа от этой ветки, никто этого делать не станет.
    Ещё раз большое всем спасибо,
    mj

    ---

    Источник: Dev report: August 2021

    Перевод:
    Mr. Pickles (@v1docq47)
    Редактирование:
    Agent LvM (@LvMi4)
    Коррекция:
    Kukima (@Kukima)
     
  • О нас

    Наш сайт является одним из уникальных мест, где русскоязычное сообщество Monero может свободно общаться на темы, связанные с этой криптовалютой. Мы стараемся публиковать полезные мануалы и статьи (как собственные, так и переводы с английского) о криптовалюте Monero. Если вы хорошо владеете английским (или можете писать собственные статьи/мануалы) и хотите помочь в переводах и общем развитии Monero для русскоязычной аудитории - свяжитесь с одним из администраторов.