BitTorrent-клиент Transmission версии 4.0.0 перевели с языка С на С++

Вышел релиз BitTorrent-клиента Transmission 4.0.0, который перевели с языка C на С++. Код распространяется под лицензиями GPLv2 и GPLv3.

02e45a18306cb34ab01c6ea1035a4348.png

Ранее на С++ был написан только интерфейс на базе Qt. Теперь разработчики решили задействовать дополнительные возможности, предоставляемые в стандартной библиотеке C++, и более продвинутые средства для проверки типов. 

При этом GTK-интерфейс перевели на gtkmm, обвязки над GTK для C++.

Разработчики провели рефакторинг кодовой базы, чтобы сократить размер кода на 18%, улучшить охват тестами и упростить сопровождение. Также они усовершенствовали процесс взаимодействия с сообществом и реализовали более активное реагирование на сообщения об ошибках и передачу изменений через pull-запросы. 

При назначении номеров версий осуществлён переход на семантическое версионирование, подразумевающее использование нотации X.Y. Z (вместо ранее используемой X.NN). X меняется при внесении изменений, нарушающих обратную совместимость, Y — при расширении функциональности, Z — при исправлении ошибок.

Основные нововведения также включают:

  • поддержку использования торрентов в формате BitTorrent v2 и гибридных торрентов. В BitTorrent v2 осуществлён уход от использования алгоритма SHA-1 в пользу SHA2–256. Для сокращения размера torrent-файлов и проверки загруженных данных на уровне блоков индексы переведены на использование хеш-дерева Меркла. Появилась возможность привязывать отдельные хэш-деревья к каждому файлу и выравнивать файлы по частям;

  • интерфейс с использованием более современных методов разработки на JavaScript, который адаптировали для использования на мобильных устройствах. Теперь он занимает в сжатом формате 68 КБ;

  • более высокую эффективность работы (с 25 тысячами торрентов снижение нагрузки на CPU составило 50%, а потребление памяти — 70%);

  • перевод взаимодействия фонового процесса с GUI-фронтендами на RPC, работающий в табличном режиме, чтобы уменьшить размер передаваемых данных и снизить требования к пропускной способности;

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

  • мгновенный запуск только что добавленных сидов с выполнением операций проверки по мере необходимости;

  • опцию для исключения при создании новых торрентов информации, которая потенциально может использоваться для косвенной идентификации пользователя;

  • поддержку чёрного списка для IPv6;

  • перевод системы unit-тестирования на использование Google Test. Запуск обеспечен в системе непрерывной интеграции сборок на базе Clang. Реализован процесс проверки нового кода в статических анализаторах Sonarcloud, Coverity, LGTM и clang-tidy.

© Habrahabr.ru