The crate libqmlbind-sys wraps libqmlbind C library in Rust and exposes an unsafe API. The goal of qmlrsng is to create a safe abstraction over the libqmlbind-sys crate.
qmlrsng alternatives and similar packages
Based on the "GUI" category
Do you think we are missing an alternative of qmlrsng or a related project?
libqmlbind-sys wraps libqmlbind
C library in Rust and exposes an unsafe API. The goal of
qmlrsng is to create a safe
abstraction over the
NOTE: This create is empty for the moment, waiting for a workable
Rust is a fantastic programming language. It exposes high level features that can be found in, say, Python, while retaining the low level control that C offers. In addition, the type system and ownership model is a strong ally and prevents issues that only static anaylizers might detect in C/C++.
C and C++ does offer great libraries though, one of them being Qt which is increasingly used in the embedded industry, mostly through Qt Quick and QML. Wrapping Qt in Rust has been tried but is quite difficult and painful, due to the C++ aspect of Qt.
Furthermore, I believe QML is becoming more interesting than Qt for new projects. It is a framework to create modern applications, on any device from phone to full car infotainment systems to desktops. Being able to use Qt Quick / QML from Rust would certainly have a stronger impact than Qt. Additionally, since code can be written in QML directly, shortcomings of a Rust wrapper could be overcome by writting some QML, something which would not be possible with Qt.
While Rust has an easy way to interface with C code through its Foreign Function Interface (ffi), C++ code cannot be used directly. This makes it hard to come up with a Rust wrapper to QML, see for example qmlrs.
Fortunately, Rust is not the only language wanting to access the power of QML.
libqmlbind was written as a C wrapper
to QML to be used by Ruby. An issue
qmlrs suggested re-writting it over
libqmlbind; Since I am looking for
excuses to write Rust code, I decided to give it a try.
This repository contains two crates. The first one is
libqmlbind's C interface as (unsafe) Rust. It's source was
generated using bindgen.
The second crate is
qmlrs "next generation". I liked the
name but did not wanted to confuse anybody by using
qml-rs so simply appended
I'm open to name suggestions!
This crate should be a safe wrapper for
libqmlbind-sys. It is empty for now
until the unsafe wrapper is more complete.
The code in these two libraries is dual-licensed under the MIT license and the Apache License (version 2.0). See [LICENSE-APACHE](./LICENSE-APACHE) and [LICENSE-MIT](./LICENSE-MIT) for details.
*Note that all licence references and agreements mentioned in the qmlrsng README section above are relevant to that project's source code only.