Cross-Plattform-Framework: Qt 6.3 implementiert das Language Server Protocol

Neben einem Modul für das LSP bringt das Beta-Release von Qt 6.3 Erweiterungen bei den asynchronen Funktionen und für das Zusammenspiel mit WebAssembly.

In Pocket speichern vorlesen Druckansicht 6 Kommentare lesen

(Bild: Andrey Suslov/Shutterstock.com)

Lesezeit: 3 Min.

Vier Monate nach Qt 6.2 ist die erste Beta von Qt 6.3 erschienen. Das Cross-Plattform-Framework bekommt ein neues Modul für das Language Server Protocol (LSP). Außerdem bringt es zahlreiche Ergänzungen im Kernmodul mit, darunter Erweiterungen für die asynchrone Programmierung mit Futures.

Das vorige Release konzentrierte sich vor allem darauf, die wesentlichen Module aus Qt 5 zu implementieren, die beim Umstieg auf die Hauptversion Ende 2020 und auch in Qt 6.1 noch fehlten. Mit Version 6.2 hat die Qt Company den Migrationspfad von Qt-5-Projekten als stabil bezeichnet, sodass sich das aktuelle Release fast ausschließlich auf Erweiterungen konzentriert. Allerdings schließt es mit Qt PDF noch eine Lücke: Das Modul war in Qt 5 vorhanden, nicht aber in Qt 6.2.

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.

Bei den Futures gibt es ein paar Ergänzungen. Sie dienen für die asynchrone 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, wie in folgendem Code aus der Qt-Dokumentation:

QList<QFuture<int>> inputFutures {...};

QtFuture::whenAll(inputFutures.begin(), inputFutures.end())
        .then([](const QList<QFuture<int>> &results) {
            for (auto future : results) {
                if (future.isCanceled())
                    // handle the cancellation 
                    // (possibly due to an exception)
                else
                    // do something with the result
            }
       

Zu den weiteren Ergänzungen in Qt Core gehört, dass QDebug neuerdings Objekte vom Typ QVarLengthArray streamen kann und letztere Klasse zwei neue Funktionen zum Einfügen von Elementen mitbringt. QProcess startet mit dem Standardkonstruktor nun mit einer leeren Prozessumgebung und erhält einen zusätzlichen Konstruktor, der wie der bisherige Standardkonstruktor die Umgebung des Elternprozessobjekts erbt.

Bei den Zielplattformen gibt es vor allem Ergänzungen für WebAssembly, das nach wie vor als Technology Preview gekennzeichnet ist. Unter anderem erlaubt das Framework dafür nun SIMD-Instruktionen (Single Instruction, Multiple Data) und erweitert die Funktionen für das Multithreading.

Weitere Neuerungen in Qt 6.3 wie Shell-Ergänzungen für Wayland lassen sich der Zusammenfassung in der Dokumentation entnehmen. Das endgültige Release ist laut dem Qt-Blog für Ende März geplant. Kurz vor dem Release hat die Qt Company die kommerziellen Lizenzen angepasst: Das Framework ist nun in vier Varianten verfügbar, und Unternehmen dürfen neuerdings nach dem Kündigen des Abonnements ihre Qt-Anwendungen weiter vertreiben.

(rme)