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