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.

(Bild: Andrey Suslov/Shutterstock.com)
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.
Kompiliert statt interpretiert
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.
(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.
Schnittstelle zur Entwicklungsumgebung
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.
Frische Elemente
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.
(Bild: Qt Company)
Daneben gibt es mit FolderDialog
und MessageDialog
zwei neue Dialoge, die wenn möglich, die jeweiligen nativen Systemdialogfenster anzeigen.
3D und Asynchrones
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)