KDAB 推出 CXX-Qt ,为 Qt 提供安全的 Rust 语言绑定

开发 开发工具
近日他们推出了 CXX-Qt ,称该工具可为 Qt 提供安全的 Rust 语言绑定。Rust 拥有 C/C++ 欠缺的内存安全性,且拥有丰富的库生态系统,可用于(反)序列化、异步、解析不安全输入、线程等,将这些 Rust 库集成到 Qt 应用程序中将为 Qt 带来大量安全优化。

专注于 KDE/Qt 的科技公司 KDAB 一直在努力改进 Rust 与 Qt 工具包的集成,近日他们推出了 CXX-Qt ,称该工具可为 Qt 提供安全的 Rust 语言绑定。

Rust 拥有 C/C++ 欠缺的内存安全性,且拥有丰富的库生态系统,可用于(反)序列化、异步、解析不安全输入、线程等,将这些 Rust 库集成到 Qt 应用程序中将为 Qt 带来大量安全优化。

但目前将 Rust 与 Qt 结合的解决方案都存在一些问题,比如仅提供对 C++ API 的直接访问而不是对 Rust 的直接绑定、C++ 和 Rust 之间的调用不安全,又或者没有利用 Rust 强大的多线程保证或特性等等。

而据 KDAB 介绍,其新推出的 CXX-Qt 不是简单地为现有的 C++ API 提供绑定,而是利用了 Qt 强大的面向对象和元对象系统,该库允许在 Rust 中将新的 QObject 子类定义为模块,甚至可以像 QML 甚至 C++ 中的任何其他 QObject 一样被实例化。

CXX-Qt 定义的每一个 QObject 都由两部分组成:

  • 一个基于 C++ 的 QObject 实例,存储和公开属性和可调用方法
  • 一个实现任何可调用对象、管理内部状态,并处理来自属性或后台线程的更改请求的 Rust 结构

然后 CXX-Qt 使用一个名为 CXX 的库在 Rust 和 C++ 之间进行通信,与普通绑定相比,CXX 在 Rust 和 C++ 之间建立了一座桥梁,它基于两种语言的安全子集。CXX-Qt 通过使用过程宏隐藏了 CXX 桥的详细信息,还提供了一个常见的 Qt 类型库,可以安全地跨过 C++ <-> Rust 桥,此外还为 Rust 后台线程提供了通知和安全更新 Qt 线程上的 Qt 状态的机制。

这种方法的缺点是 CXX-Qt 不提供一对一的绑定,因此,CXX-Qt 需要跨桥暴露和实现每一个特性。

需要注意的是,CXX-Qt 目前不是稳定、可用于生产的版本。目前,现有代码能够执行以下任务:

  • 定义属性和可调用对象,将它们暴露在 QObject 上
  • 使用常见的 Qt 类型
  • 监听属性更改或处理来自后台 Rust 线程的更新请求

未来计划添加以下任务/功能:

  • 其他 Qt 基类(如 QAbstractItemModel)
  • 稳定宏的 API,改进 Qt 类型的 API
  • 定义和发出信号
  • 扩展文档,以包含教程和示例

感兴趣的朋友可在其​​ GitHub​​ 仓库查看进度。

本文转自OSCHINA

本文标题:KDAB 推出 CXX-Qt ,为 Qt 提供安全的 Rust 语言绑定

本文地址:https://www.oschina.net/news/184966/cxx-qt-rust-bindings

责任编辑:未丽燕 来源: 开源中国
相关推荐

2021-03-23 14:50:16

编程语言Rust漏洞

2011-06-20 13:54:41

Qt 动态 切换

2011-06-23 15:10:39

Qt 窗体

2010-12-28 09:57:11

SymbianQtMeeGo

2011-06-13 14:29:40

Qt Designer

2011-06-23 11:16:39

Qt Excel

2011-06-21 09:19:24

Qt 界面 多国语言

2019-08-20 15:11:02

Aruba 中小企业无线

2024-02-26 07:26:27

RustC++开发

2011-05-03 09:14:45

QtOvi商店Symbian

2011-09-01 14:04:45

QT Webkit插件

2015-11-23 18:00:41

Qt互联网汽车

2021-04-14 15:21:25

ArubaESP边缘计算

2011-06-24 10:05:51

QT 对象 父对象

2011-06-22 10:12:08

Qt 线程

2010-10-14 09:04:36

2011-06-23 15:32:05

Qt Windows消息

2011-07-05 14:46:34

2011-06-22 09:40:32

QT 模板库 模板

2011-06-30 17:51:17

QT 元类型 线程
点赞
收藏

51CTO技术栈公众号