KDAB 推出 CXX-Qt ,為 Qt 提供安全的 Rust 語言綁定
專注于 KDE/Qt 的科技公司 KDAB 一直在努力改進(jìn) Rust 與 Qt 工具包的集成,近日他們推出了 CXX-Qt ,稱該工具可為 Qt 提供安全的 Rust 語言綁定。
Rust 擁有 C/C++ 欠缺的內(nèi)存安全性,且擁有豐富的庫生態(tài)系統(tǒng),可用于(反)序列化、異步、解析不安全輸入、線程等,將這些 Rust 庫集成到 Qt 應(yīng)用程序中將為 Qt 帶來大量安全優(yōu)化。
但目前將 Rust 與 Qt 結(jié)合的解決方案都存在一些問題,比如僅提供對 C++ API 的直接訪問而不是對 Rust 的直接綁定、C++ 和 Rust 之間的調(diào)用不安全,又或者沒有利用 Rust 強(qiáng)大的多線程保證或特性等等。
而據(jù) KDAB 介紹,其新推出的 CXX-Qt 不是簡單地為現(xiàn)有的 C++ API 提供綁定,而是利用了 Qt 強(qiáng)大的面向?qū)ο蠛驮獙ο笙到y(tǒng),該庫允許在 Rust 中將新的 QObject 子類定義為模塊,甚至可以像 QML 甚至 C++ 中的任何其他 QObject 一樣被實例化。
CXX-Qt 定義的每一個 QObject 都由兩部分組成:
- 一個基于 C++ 的 QObject 實例,存儲和公開屬性和可調(diào)用方法
- 一個實現(xiàn)任何可調(diào)用對象、管理內(nèi)部狀態(tài),并處理來自屬性或后臺線程的更改請求的 Rust 結(jié)構(gòu)
然后 CXX-Qt 使用一個名為 CXX 的庫在 Rust 和 C++ 之間進(jìn)行通信,與普通綁定相比,CXX 在 Rust 和 C++ 之間建立了一座橋梁,它基于兩種語言的安全子集。CXX-Qt 通過使用過程宏隱藏了 CXX 橋的詳細(xì)信息,還提供了一個常見的 Qt 類型庫,可以安全地跨過 C++ <-> Rust 橋,此外還為 Rust 后臺線程提供了通知和安全更新 Qt 線程上的 Qt 狀態(tài)的機(jī)制。
這種方法的缺點是 CXX-Qt 不提供一對一的綁定,因此,CXX-Qt 需要跨橋暴露和實現(xiàn)每一個特性。
需要注意的是,CXX-Qt 目前不是穩(wěn)定、可用于生產(chǎn)的版本。目前,現(xiàn)有代碼能夠執(zhí)行以下任務(wù):
- 定義屬性和可調(diào)用對象,將它們暴露在 QObject 上
- 使用常見的 Qt 類型
- 監(jiān)聽屬性更改或處理來自后臺 Rust 線程的更新請求
未來計劃添加以下任務(wù)/功能:
- 其他 Qt 基類(如 QAbstractItemModel)
- 穩(wěn)定宏的 API,改進(jìn) Qt 類型的 API
- 定義和發(fā)出信號
- 擴(kuò)展文檔,以包含教程和示例
感興趣的朋友可在其?? GitHub?? 倉庫查看進(jìn)度。
本文轉(zhuǎn)自O(shè)SCHINA
本文標(biāo)題:KDAB 推出 CXX-Qt ,為 Qt 提供安全的 Rust 語言綁定
本文地址:https://www.oschina.net/news/184966/cxx-qt-rust-bindings