AccueilActualités informatiqueFramework multiplateforme : Qt 6.3 implémente le Language Server Protocol

Framework multiplateforme : Qt 6.3 implémente le Language Server Protocol

Quatre mois après Qt 6.2, la première bêta de Qt 6.3 est sortie. Le framework multiplateforme reçoit un nouveau module pour le Language Server Protocol (LSP). Il apporte également de nombreux ajouts au module de base, dont des extensions pour la programmation asynchrone avec les futures.

La version précédente s’est surtout concentrée sur l’implémentation des modules essentiels de Qt 5 qui manquaient encore lors du passage à la version principale fin 2020 et également dans Qt 6.1. Avec la version 6.2, la Qt Company a qualifié de stable le chemin de migration des projets Qt 5, de sorte que la version actuelle se concentre presque exclusivement sur les extensions. Toutefois, elle comble encore une lacune avec Qt PDF : Ce module était présent dans Qt 5, mais pas dans Qt 6.2.

Sommaire

Le nouveau module Language Server implémente le Language Server Protocol (LSP) introduit en 2016 par Codenvy, Microsoft et Red Hat. Il offre une interface uniforme, indépendante de l’outil, avec les outils de développement afin de mettre en œuvre des fonctions telles que l’autocomplétion et les refactorings pour divers langages de programmation ou frameworks.

La base du protocole est JSON RPC (Remote Procedure Call), qui fait également partie du nouveau module Qt, tout comme la Language Server Protocol Specification.

En ce qui concerne les Futures, il y a quelques ajouts. Ils servent à la programmation asynchrone : un futur, appelé aussi promesse dans certains langages, est un espace réservé pour un résultat qui ne sera disponible que dans le futur, respectivement qui devrait l’être. Qt 6.3 peut gérer plusieurs futures via les appels QtFuture::whenAll() et QtFuture::whenAny() combiner.

Les deux créent un nouveau QFuture-sont des objets. Le premier appel est considéré comme terminé avec succès lorsque tous les contrats à terme sont terminés, et la dernière fonction est considérée comme terminée avec succès dès que le premier contrat à terme est terminé. Dans les deux cas, il importe peu de savoir si le contrat à terme en question a réussi ou s’il s’est terminé par une interruption ou une erreur. Les résultats des différents contrats à terme peuvent être consultés via then comme dans le code suivant de la documentation Qt :

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
            }
       

Parmi les autres ajouts à Qt Core, on peut noter que QDebug a ajouté des objets de type QVarLengthArray et cette dernière classe apporte deux nouvelles fonctions d’insertion d’éléments. QProcess démarre maintenant avec le constructeur standard avec un environnement de processus vide et reçoit un constructeur supplémentaire qui, comme le constructeur standard précédent, hérite de l’environnement de l’objet de processus parent.

En ce qui concerne les plates-formes cibles, il y a surtout des ajouts pour WebAssembly, qui est toujours désigné comme Technology Preview. Entre autres, le framework permet désormais les instructions SIMD (Single Instruction, Multiple Data) et étend les fonctions pour le multithreading.

D’autres nouveautés de Qt 6.3, telles que les ajouts de shell pour Wayland, peuvent être consultées dans le résumé de la documentation. Selon le blog Qt, la version finale est prévue pour fin mars. Peu avant la sortie, la Qt Company a adapté les licences commerciales : Le framework est désormais disponible en quatre variantes, et les entreprises peuvent depuis peu continuer à distribuer leurs applications Qt après avoir résilié leur abonnement.

Plus d'articles