Lars Knoll, skaberen af KHTML-motoren, lederen af Qt Project og teknisk direktør for Qt Company, om planerne for at skabe den næste betydelige version af Qt-rammen. Efter afslutningen af funktionalitetsudviklingen af Qt 5.14 vil udviklingen fokusere på forberedelsen af udgivelsen af Qt 6, som forventes at komme i slutningen af 2020.
Qt 6 vil udvikle sig med fokus på at sikre kompatibilitet med Qt 5, men der kan opstå visse problemer, da de planlagte arkitektoniske ændringer og oprydning ikke kan implementeres uden at miste et vist niveau af kompatibilitet. For at gøre overgangen lettere planlægges nogle funktioner i Qt 6 at blive inkluderet i de kommende versioner af Qt 5.14 og Qt 5.15 LTS i en forkortet form. Der vil også blive forberedt værktøjer til at lette migrationen til Qt 6.
Blandt de primære mål for den næste betydelige version er tilpasning af funktionaliteten til kravene i 2020, oprydning af kodebasen og forenkling af projektvedligeholdelse. Forventede ændringer:
- Væsentlig opgradering af QML:
- Understøttelse af streng typificering.
- Mulighed for at kompilere QML til en repræsentation i C++ og maskinkode.
- Overførsel af fuld støtte til JavaScript til at være en valgmulighed (brug af en fuldfunktionel JavaScript-motor kræver store ressourcer, hvilket begrænser anvendelsen af QML på hardware som mikrokontrollere).
- Afbrydelse af versionering i QML.
- Unificering af data strukturer, der duplikeres i QObject og QML (vil reducere hukommelsesforbruget og fremskynde opstart).
- Afvikling af generering af datastrukturer under kørsel til fordel for generation under kompilering.
- Skjuling af interne komponenter ved hjælp af private metoder og egenskaber.
- Forbedret integration med udviklingsværktøjer til refactoring og fejldiagnose under kompileringen;
- Tilføjelse af et nyt abstrakt lag, Rendering Hardware Interface (RHI), for at sikre problemfri brug af forskellige grafiske API'er, herunder OpenGL, Vulkan, Metal og Direct 3D (førhen var Qt kun bundet til OpenGL). Hele den eksisterende rendering-infrastruktur, inklusive QPainter, Qt Quick Scenegraph og Qt3D, vil blive overført til brug af RHI. Det planlægges også at tilføje Qt Shader Tools-modulet for at understøtte forskellige sprog til shaderudvikling og sikre cross-kompilering af shaders både under byggesteg og ved programudførelse;
- Forberedelse af et ensartet API til oprettelse af brugergrænseflader, der kombinerer elementer af 2D- og 3D-grafik. Det nye API vil muliggøre brug af QML til at definere 3D-elementer i grænseflader uden at involvere UIP-formatet. I den nye grænseflade til integration af 3D-indhold med Qt Quick planlægges det at løse problemer som høje omkostninger ved integration af QML med indhold fra Qt 3D eller 3D Studio, samt manglende synkronisering af animationer og transformationer på individuelt billedniveau mellem 2D og 3D. Samtidig vil indlejret rendering af 2D og 3D blive realiseret ved hjælp af en ny rendering engine. En foreløbig implementering af den nye Qt Quick med 3D-support forventes i udgivelsen af Qt 5.14;
- Tilføjelse af værktøjer til behandling af grafiske ressourcer i kompileringstrinnet, for eksempel til konvertering af PNG-billeder til komprimerede teksturer eller til konvertering af shader og meshes til optimerede binære formater til specifikt udstyr;
- Indlejring af en ensartet engine til temaer og stilarter, der muliggør et udseende af apps baseret på Qt Widgets og Qt Quick, der er native for forskellige mobile og desktop-platforme;
- Enhedsgørelse af værktøjer til oprettelse af brugergrænseflader. For at eliminere duplication af funktionalitet og stoppe leveringen af to separate produkter, forventes integration af funktionaliteten fra Qt 3D Studio i Qt Design Studio, hvor mange af undersystemerne og frameworket til plugin-forbindelse er bygget på en fælles kodebase med Qt Creator.
I Qt Design Studio planlægges også en kvalitetsintegration med pakker til oprettelse af indhold, såsom Photoshop, Sketch, Illustrator, Maya og 3D Max. De primære sprog, der understøttes i det ensartede udviklingsværktøj, nævnes som C++, QML og Python. Enhedsgørelsen indebærer også muligheden for at få adgang til grænseflade-designværktøjer fra Qt Creator og give grænsefladedesignere funktioner fra udviklerværktøjer, såsom kompilering af projekter eller test af applikationer på enheder; - Som byggesystem er der valgt CMake i stedet for QMake. Støtte til at bygge applikationer ved hjælp af QMake vil blive bevaret, men selve Qt vil blive bygget med CMake. CMake er valgt, da dette værktøj har fået bred udbredelse blandt udviklere af C++-projekter og støttes af mange integrerede udviklingsmiljøer. Udviklingen af byggesystemet Qbs, som havde til formål at erstatte QMake, ;
- Overgang til standarden C++17 (tidligere anvendt C++98). I Qt 6 planlægges det at implementere støtte for mange moderne funktioner i C++, men uden at miste bagudkompatibilitet med kode baseret på tidligere standarder.
- Muligheden for at bruge nogle funktioner, der tilbydes for QML og Qt Quick, fra C++. Der vil også blive præsenteret et nyt egenskabssystem for QObject og lignende klasser. En motor til at arbejde med bindings vil blive integreret fra QML til Qt-kernen, hvilket vil reducere belastningen og hukommelsesforbruget for bindings og gøre dem tilgængelige for alle dele af Qt og ikke kun for Qt Quick;
- Fortsættelse af arbejdet med at udvide understøttelsen af yderligere sprog, såsom Python og WebAssembly;
- Omstrukturering med opdeling i mindre komponenter og reduktion af størrelsen på det grundlæggende produkt. Udviklerværktøjer og specialiserede komponenter vil blive leveret som tilføjelser, der distribueres gennem et nyt katalogbutik. Tilføjelser til Qt fra tredjepartsudviklere, både gratis og betalte, vil også blive accepteret til distribution.
Kilde: opennet.ru
