BitTorrent 用戶端 Transmission 從 C 切換到 C++

libtransmission 函式庫是 Transmission BitTorrent 用戶端的基礎,已被翻譯成 C++。 Transmission 仍然與用 C 語言編寫的使用者介面(GTK 介面、守護程式、CLI)的實作綁定,但彙編現在需要 C++ 編譯器。以前,只有基於 Qt 的介面是用 C++ 寫的(macOS 的客戶端是用 Objective-C 寫的,Web 介面是用 JavaScript 寫的,其他所有內容都是用 C 寫的)。

移植工作是由專案負責人、基於 Qt 的 Transmission 介面的作者 Charles Kerr 進行的。將整個專案切換到 C++ 的主要原因是感覺在對 libtransmission 進行更改時,你必須不斷地重新發明輪子,儘管標準 C++ 庫中已經有針對類似問題的現成解決方案(例如,需要在std::partial_sort( ) 和std::vector()) 存在的情況下建立您自己的函數tr_quickfindFirstK() 和tr_ptrArray(),並為C++ 提供更高級的類型檢查工具。

值得注意的是,開發人員並沒有為自己定下立即用C++重寫整個libtransmission的目標,而是打算逐步實現向C++的過渡,從過渡到使用C++編譯器編譯專案開始。在目前形式下,C 編譯器不能再用於彙編,因為程式碼中新增了一些特定於 C++ 的構造,例如「auto」關鍵字和使用「static_cast」運算子的類型轉換。為了相容性,計劃保留對舊 C 函數的支持,但現在鼓勵開發人員使用 std::sort() 代替 qsort(),使用 std::vector 代替 tr_ptrArray。 constexpr 取代 tr_strdup() 和 std::vector 取代 tr_ptrArray。

來源: opennet.ru

添加評論