Новая версия BitTorrent-клиента Transmission 4.0.0, перешедшего с Си на Си++

Новости мира unix. Хотите узнать секрет вечного счастья? Откройте страницу 246.
Ответить
acolyte
Аватара пользователя
Сообщения: 3263
Зарегистрирован: 20.08.2022

#

Новая версия BitTorrent-клиента Transmission 4.0.0, перешедшего с Си на Си++
Дата публикации:Wed, 08 Feb 2023 09:19:51 +0300




После почти трёх лет разработки опубликован релиз Transmission 4.0.0, относительно лёгкого и нетребовательного к ресурсам BitTorrent-клиента, написанного на языке Cи и поддерживающего разнообразные интерфейсы пользователя: GTK, Qt, native Mac, Web-интерфейс, daemon, CLI. Код распространяется под лицензиями GPLv2 и GPLv3.



Ключевым изменением в новой ветке стал перевод кодовой базы с языка Си (C90) на Си++. Ранее на С++ был написан только интерфейс на базе Qt. Основной причиной перехода всего проекта на C++ называется желание задействовать дополнительные возможности, предоставляемые в стандартной библиотеке C++, и наличие в С++ более продвинутых средств для проверки типов. GTK-интерфейс переведён на использование gtkmm, обвязки над GTK для языка C++.



Попутно проведён значительный рефакторинг кодовой базы, позволивший сократить размер кода на 18%, улучшить охват тестами и упростить сопровождение. Модернизирован процесс взаимодействия с сообществом, реализовано более активное реагирование на сообщения об ошибках и передачу изменений через pull-запросы. Осуществлён переход на семантическое версионирование при назначении номеров версий, подразумевающее использование нотации X.Y.Z (вместо ранее используемой X.NN), в которой X меняется при внесении изменений, нарушающих обратную совместимость, Y меняется при расширении функциональности и Z при исправлении ошибок.






Другие изменения:
  • Добавлена поддержка использования торрентов в формате BitTorrent v2 и гибридных торрентов (пока только использование готовых торрентов, возможность создания торрентов на базе BitTorrent 2 появится в одном из следующих выпусков).
    В BitTorrent v2, осуществлён уход от использования алгоритма SHA-1 в пользу SHA2-256, который применяется как для контроля целостности блоков данных, так и для записей в индексах (info-dictionary), что нарушает совместимость с DHT и трекерами. Для сокращения размера torrent-файлов и проверки загруженных данных на уровне блоков индексы переведены на использование хеш-дерева Меркла. Добавлена возможность привязки отдельных хэш-деревьев к каждому файлу и выравнивания файлов по частям (без добавления добавочного заполнения после каждого файла), что позволило избавиться от дублирования данных при наличии одинаковых файлов и упростило выявления разных источников для файлов. Повышена эффективность кодирования структуры каталогов в торренте и добавлены оптимизации для обработки большого числа мелких файлов.

    Web-интерфейс переписан с использованием более современных методов разработки на JavaScript и адаптирован для использования на мобильных устройствах. Код избавлен от применения библиотеки jQuery. В сжатом виде Web-интерфейс теперь занимает всего 68 КБ.



    Значительно повышена эффективность работы - тестирование запуска transmission-daemon с 25 тысячами торрентов показало снижение нагрузки на CPU на 50% и уменьшение потребление памяти на 70%, по сравнению с Transmission 3.00.

    Взаимодействие фонового процесса с GUI-фронтэндами (transmission-qt и transmission-web) переведено на RPC, работающий в табличном режиме, что позволило уменьшить размер передаваемых данных и снизить требования к пропускной способности. Для сжатия данных, передаваемых через RPC, вместо zlib задействована более оптимизированная библиотека libdeflate.



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

    Обеспечен мгновенный запуск только что добавленных сидов с выполнением операций проверки по мере необходимости (без выполнения полной проверки перед запуском).

    Добавлена опция для исключения при создании новых торрентов информации, которая потенциально может использоваться для косвенной идентификации пользователя (например, дата создания и User-Agent).
    Добавлена поддержка чёрного списка для IPv6.

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


Новость позаимствована с opennet.ru
Ссылка на оригинал: https://www.opennet.ru/opennews/art.shtml?num=58617

Жизнь за Нер'зула!

Ответить