Lars Knoll, de maker van de KHTML-engine, projectleider van het Qt Project en technisch directeur van Qt Company, bespreekt de plannen voor de creatie van de volgende belangrijke tak van het Qt-framework. Na de voltooiing van de functionaliteitsontwikkeling van de Qt 5.14-tak, zal de focus liggen op de voorbereiding van de release van Qt 6, die aan het einde van 2020 wordt verwacht.
Qt 6 zal worden ontwikkeld met het oog op compatibiliteit met Qt 5, maar het is niet uitgesloten dat er bepaalde problemen zullen optreden, aangezien de voorgenomen architectonische wijzigingen en opschoningen niet kunnen worden doorgevoerd zonder een bepaald niveau van compatibiliteit te verliezen. Om de overgang te vergemakkelijken, is het plan om enkele mogelijkheden van Qt 6 in verkleinde vorm op te nemen in de versies Qt 5.14 en Qt 5.15 LTS. Er zal ook een toolkit worden voorbereid om de migratie naar Qt 6 te vereenvoudigen.
Enkele van de belangrijkste doelen voor de volgende belangrijke tak zijn het in overeenstemming brengen van de functionaliteit met de eisen van 2020, het opschonen van de codebase, en het vereenvoudigen van het onderhoud van het project. Verwachte wijzigingen:
- Substantiƫle modernisering van QML:
- Ondersteuning voor strikte typevorming.
- De mogelijkheid om QML te compileren naar C++-representatie en machinecode.
- Overgang van volledige ondersteuning van JavaScript naar opties (het gebruik van een volledig functionele JavaScript-engine vereist veel middelen, wat het gebruik van QML op apparatuur zoals microcontrollers belemmert).
- Afzien van versiebeheer in QML.
- Uniformering van datastructuren die in QObject en QML worden herhaald (verlaagt het geheugengebruik en versnelt de opstart).
- Overstap van het genereren van datastructuren tijdens runtime naar generatie tijdens compilatie.
- Verbergen van interne componenten door gebruik te maken van privƩ methoden en eigenschappen.
- Verbeterde integratie met ontwikkeltools voor refactoring en foutdiagnose tijdens de compilatie;
- Het toevoegen van een nieuwe abstracte laag Rendering Hardware Interface (RHI) voor naadloze integratie van verschillende grafische API's, waaronder OpenGL, Vulkan, Metal en Direct 3D (vroeger was Qt alleen aan OpenGL gebonden). De bestaande renderinfrastructuur, waaronder QPainter, Qt Quick Scenegraph en Qt3D, zal worden omgezet naar RHI. Daarnaast is er een module Qt Shader Tools gepland ter ondersteuning van verschillende shader-ontwikkeltalen en voor cross-compilatie van shaders tijdens zowel de bouwfase als tijdens de uitvoering van het programma;
- Voorbereiding van een uniforme API voor het creëren van gebruikersinterfaces die elementen van 2D- en 3D-graphics combineren. De nieuwe API maakt het mogelijk om QML te gebruiken voor het definiëren van 3D-elementen van interfaces zonder het gebruik van het UIP-formaat. In de nieuwe interface wordt gewerkt aan de integratie van 3D-inhoud met Qt Quick, waarbij problemen zoals hoge overhead bij de integratie van QML met inhoud uit Qt 3D of 3D Studio en de onmogelijkheid om animaties en transformaties op frame-niveau tussen 2D en 3D te synchroniseren, worden aangepakt. Gelaagde 2D- en 3D-rendering zal worden geïmplementeerd met behulp van een nieuwe renderengine. Een voorlopige versie van de nieuwe Qt Quick met ondersteuning voor 3D wordt verwacht in de Qt 5.14-uitgave;
- Het toevoegen van tools voor het verwerken van grafisch gerelateerde middelen tijdens de compilatiefase, bijvoorbeeld voor het omzetten van PNG-afbeeldingen naar gecomprimeerde texturen of voor het converteren van shaders en meshes naar geoptimaliseerde binaire formaten voor specifieke hardware;
- Inbedden van een uniforme engine voor thema's en stijlen, waardoor de uitstraling van applicaties op basis van Qt Widgets en Qt Quick kan worden aangepast aan verschillende mobiele en desktop platforms;
- Uniformisering van de tools voor het creëren van gebruikersinterfaces. Om duplicatie van functionaliteit te voorkomen en de levering van twee afzonderlijke producten stop te zetten, wordt verwacht dat de functionaliteit van Qt 3D Studio zal worden geïntegreerd in Qt Design Studio, waarvan veel subsysteem en de plugin-koppeling framework zijn gebouwd op de dezelfde codebasis als Qt Creator.
In Qt Design Studio is also planned to ensure quality integration with content creation packages such as Photoshop, Sketch, Illustrator, Maya, and 3D Max. The main programming languages supported in the unified development toolkit are C++, QML, and Python. Unification also implies the ability to access interface design tools from Qt Creator, and to provide interface designers with capabilities from developer tools, such as project compilation or application testing on devices; - CMake has been selected as the build system instead of QMake. Support for building applications using QMake will be retained, but Qt itself will be built using CMake. CMake was chosen because this tool has gained wide distribution among developers of C++ projects and is supported in many integrated development environments. The development of the Qbs build system, which aimed to replace QMake, ;
- Transitioning to the C++17 standard for development (previously C++98 was used). In Qt 6, there are plans to implement support for many modern features of C++, while maintaining backward compatibility with code based on previous standards.
- The ability to use some functionality offered for QML and Qt Quick from C++. This includes the introduction of a new property system for QObject and similar classes. A binding engine will be integrated from QML into the core of Qt, which will reduce load and memory consumption for bindings and make them accessible to all parts of Qt, not just Qt Quick;
- Continuing efforts to expand support for additional languages, such as Python and WebAssembly;
- Restructuring by breaking it down into smaller components and reducing the size of the core product. Developer tools and specialized components will be provided as plugins, distributed through a new store catalog. Both free and paid plugins from third-party developers will be accepted for distribution.
Bron: opennet.ru
