BitTorrent-клиент Transmission версии 4.0.0 перевели с языка С на С++
Вышел релиз BitTorrent-клиента Transmission 4.0.0, который перевели с языка C на С++. Код распространяется под лицензиями GPLv2 и GPLv3.
Ранее на С++ был написан только интерфейс на базе 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.