Cross-Plattform-Framework Qt 6.3 kompiliert QML nach C++

Der Qt Quick Compiler besteht aus zwei Werkzeugen, die in der deklarativen Sprache QML geschriebenen Code weitgehend in C++ übersetzen.

In Pocket speichern vorlesen Druckansicht

(Bild: Andrey Suslov/Shutterstock.com)

Lesezeit: 5 Min.
Von
  • Rainald Menge-Sonnentag
Inhaltsverzeichnis

Zwei Monate nach der ersten Beta ist nun das endgültige Release von Qt 6.3 erschienen. Die Version bringt einen neuen Compiler mit, der QML-Code in C++ übersetzt. Außerdem hat es ein Modul für die Anbindung an das Language Server Protocol und neue Qt Quick Controls an Bord. Im Kernmodul finden sich Ergänzungen für die asynchrone Programmierung.

QML (Qt Modeling Language) ist eine deklarative Programmiersprache für die Definition von User Interfaces in Qt Quick, die auf JavaScript als Skriptsprache setzt. Es handelt sich im Grundsatz um eine interpretierte Sprache. Das Cross-Plattform-Framework bietet seit Qt 5.3 einen ersten Ansatz für einen Compiler (qmlcompiler), den in Version 5.8 beziehungsweise 5.9 eine Kombination aus JIT-Compiler (Just in Time) und Caching (qmlcachegen) ersetzt hat.

Qt 6.3 führt nun mit dem Qt Quick Compiler zwei neue Werkzeuge ein, die den Code weitgehend in C++ übersetzen. Der QML Type Compiler (qmltc) kompiliert passend zum Namen QML-Typen nach C++, um deren Instanziierung zu beschleunigen. Das zweite Werkzeug ist der QML Script Compiler (qmlsc), der Funktionen und Bindings soweit möglich nach C++ übersetzt. Für die Passagen, die er nicht kompilieren kann, weil sich beispielsweise Typen erst zur Laufzeit und nicht beim Build ermitteln lassen, setzt Qt wie bisher auf interpretierten Code und Caching mit qmlcachegen.

Der neue Qt Quick Compiler übersetzt QML soweit möglich in C++-Code.

(Bild: Qt Company)

Der für das Release überarbeitete Linter für QML (qmllint) zeigt auf, welche Codepassagen sich nicht übersetzen lassen. Die Qt Company hat weitere Tools angekündigt, die dabei helfen sollen, eigenen Code für das Zusammenspiel mit dem Qt Quick Compiler zu optimieren. Laut dem Qt-Blog bringt der Compiler einen Performancezuwachs um 20 bis 35 Prozent.

Das im Herbst 2021 veröffentlichte Qt 6.2 hat bereits die meisten wesentlichen Module von Qt 5 implementiert, die sowohl Ende 2020 beim Wechsel auf die neue Hauptversion als auch in Qt 6.1 noch fehlten. Qt PDF war jedoch auch in Qt 6.2 nicht enthalten, und diese Lücke schließt das aktuelle Release, wobei das Modul sich zunächst in einer technischen Preview befindet.

Das neue Modul Language Server implementiert das 2016 von Codenvy, Microsoft und Red Hat eingeführte Language Server Protocol (LSP). Es bietet eine einheitliche, werkzeugunabhängige Schnittstelle zu Entwicklungstools, um für diverse Programmiersprachen oder Frameworks Funktionen wie Autovervollständigung und Refactorings umzusetzen.

Grundlage für das Protokoll ist JSON RPC (Remote Procedure Call), das ebenso Bestandteil des neuen Qt-Moduls ist wie die Language Server Protocol Specification. Den umgekehrten Weg vom Werkzeug zu beliebigen Sprachen über das LSP bietet die Entwicklungsumgebung Qt Creator seit Version 4.8.

Das frische Release bringt zudem einige neue Qt Quick Controls, darunter die bisher separat verfügbaren Komponenten TreeView und Calendar. Beide sind wohl stark gefragt, was die Qt Company dazu bewegt hat, sie in die Standardelemente aufzunehmen.

Der Kalender gehört zu den neuen Elementen bei den Qt Quick Controls.

(Bild: Qt Company)

Daneben gibt es mit FolderDialog und MessageDialog zwei neue Dialoge, die wenn möglich, die jeweiligen nativen Systemdialogfenster anzeigen.

Weitere Neuerungen finden sich in Qt Quick 3D, das unter anderem neuerdings das QML-Element ReflectionProbe für Reflexionen mitbringt und das Partikelsystem erweitert.

Bei den Futures gibt es ebenfalls ein paar Ergänzungen. Sie dienen der asynchronen Programmierung: Ein Future, das in manchen Sprachen auch Promise heißt, steht als Platzhalter für ein Ergebnis, das erst in der Zukunft verfügbar sein wird, respektive sein soll. Qt 6.3 kann mehrere Futures über die Aufrufe QtFuture::whenAll() und QtFuture::whenAny() kombinieren.

Beide erzeugen ein neues QFuture-Objekt. Ersterer Aufruf gilt als erfolgreich beendet, wenn alle Futures abgeschlossen sind, und letztere Funktion ist erfolgreich, sobald das erste Future abgeschlossen ist. Bei beiden ist es unerheblich, ob das jeweilige Future erfolgreich war oder mit einem Abbruch oder Fehler abgeschlossen hat. Die Ergebnisse der einzelnen Futures lassen sich über then ermitteln.

Weitere Details zu Qt 6.3 lassen sich dem Qt-Blog entnehmen. Der Beitrag gibt auch eine kleine Vorschau auf die nächsten beiden Versionen. Qt 6.5 wird das nächste LTS-Release (Long-term Support). Die weiteren Pläne für 2022 hatte die Qt Company im März veröffentlicht. Derweil hat sie vor Kurzem für Abokunden den Support zu Qt 5 bis 2025 verlängert.

(rme)