Lars Knoll, creatore del motore KHTML, responsabile del progetto Qt Project e direttore tecnico della Qt Company, sui piani per creare la prossima versione significativa del framework Qt. Dopo il completamento delle funzionalità della versione Qt 5.14, lo sviluppo si concentrerà sulla preparazione dell'uscita di Qt 6, attesa per la fine del 2020.
Qt 6 si svilupperà tenendo presente la compatibilità con Qt 5, ma non si escludono problemi specifici, poiché le modifiche architettoniche previste e la pulizia non potranno essere realizzate senza perdere un certo livello di compatibilità. Per facilitare la transizione, alcune funzionalità di Qt 6 verranno incluse in forma ridotta nelle versioni Qt 5.14 e Qt 5.15 LTS. Sarà anche preparato uno strumento per semplificare la migrazione a Qt 6.
Tra gli obiettivi principali della prossima versione significativa c'è l'allineamento delle funzionalità ai requisiti del 2020, la pulizia della base di codice e la semplificazione della manutenzione del progetto. Le modifiche attese:
- Moderna sostanziale del QML:
- Supporto per tipizzazione rigorosa.
- Possibilità di compilare QML in rappresentazioni C++ e codice macchina.
- Trasferimento del supporto completo di JavaScript in opzioni (l'uso di un motore JavaScript completamente funzionale richiede molte risorse, rendendo difficile l'applicazione di QML su hardware come i microcontrollori).
- Eliminazione del versionamento in QML.
- Unificazione delle strutture dati duplicate in QObject e QML (permette di ridurre il consumo di memoria e accelerare il caricamento).
- Abbandono della generazione di strutture dati a runtime a favore della generazione a compilation.
- Nascondere i componenti interni tramite l'uso di metodi e proprietà private.
- Migliore integrazione con gli strumenti di sviluppo per il refactoring e la diagnostica degli errori durante la compilazione;
- Aggiunta di un nuovo strato astratto Rendering Hardware Interface (RHI) per garantire un utilizzo senza soluzione di continuità di diverse API grafiche, tra cui OpenGL, Vulkan, Metal e Direct 3D (in precedenza Qt era bloccato su OpenGL). Tutta l'infrastruttura di rendering esistente, compresi QPainter, Qt Quick Scenegraph e Qt3D, sarà convertita per utilizzare RHI. È prevista anche l'aggiunta di un modulo Qt Shader Tools per supportare vari linguaggi di sviluppo di shader e garantire la compilazione incrociata degli shader sia in fase di compilazione che durante l'esecuzione del programma;
- Preparazione di un'API unificata per la creazione di interfacce utente che combinano elementi di grafica 2D e 3D. La nuova API consentirà di utilizzare QML per definire elementi 3D delle interfacce senza il coinvolgimento del formato UIP. Nel nuovo interfaccia per l'integrazione di contenuti 3D con Qt Quick si prevede di risolvere problemi come i grandi costi di integrazione di QML con contenuti da Qt 3D o 3D Studio, e l'impossibilità di sincronizzare animazioni e trasformazioni a livello di fotogrammi singoli tra 2D e 3D. Il rendering congiunto e nidificato di 2D e 3D sarà realizzato tramite un nuovo motore di rendering. Si prevede che la prima implementazione del nuovo Qt Quick con supporto 3D sarà disponibile nella release Qt 5.14;
- Aggiunta di strumenti per la gestione delle risorse grafiche durante la fase di compilazione, ad esempio, per la conversione di immagini PNG in texture compresse o per la conversione di shader e mesh in formati binari ottimizzati per hardware specifico;
- Incorporamento di un motore unificato per temi e stili, che consenta di ottenere un aspetto coerente per le applicazioni basate su Qt Widgets e Qt Quick, nativo per diverse piattaforme mobili e desktop;
- Unificazione degli strumenti per la creazione dell'interfaccia utente. Per evitare la duplicazione delle funzionalità e cessare la fornitura di due prodotti separati, è prevista l'integrazione della funzionalità di Qt 3D Studio in Qt Design Studio, molte delle cui sottosistemi e framework di collegamento dei plugin sono costruiti su una base di codice comune a Qt Creator.
In Qt Design Studio si prevede anche di garantire una buona integrazione con pacchetti di creazione di contenuti, come Photoshop, Sketch, Illustrator, Maya e 3D Max. I principali linguaggi supportati nell'insieme unificato per lo sviluppo sono C++, QML e Python. L'unificazione prevede anche la possibilità di accedere dagli strumenti di Qt Creator agli strumenti di progettazione dell'interfaccia, offrendo ai designer dell'interfaccia funzionalità delle strumenti per gli sviluppatori, come la compilazione del progetto o il testing dell'applicazione su dispositivo; - Come sistema di build, si è deciso di utilizzare CMake anziché QMake. Il supporto per la creazione di applicazioni tramite QMake sarà mantenuto, ma Qt stesso sarà compilato utilizzando CMake. CMake è stato scelto poiché questo strumento ha ottenuto una vasta diffusione tra gli sviluppatori di progetti C++ ed è supportato in molti ambienti di sviluppo integrati. Sviluppo del sistema di build Qbs, che ambiva a sostituire QMake, ;
- Transizione allo sviluppo secondo lo standard C++17 (precedentemente si utilizzava C++98). In Qt 6 è prevista l'implementazione del supporto per molte delle moderne funzionalità di C++, ma senza perdere la compatibilità con il codice basato su standard precedenti.
- Possibilità di utilizzare da C++ alcune funzionalità offerte per QML e Qt Quick. Sarà presentato un nuovo sistema di proprietà per QObject e classi simili. Dal QML al nucleo di Qt sarà integrato un motore per la gestione dei binding, il che ridurrà il carico e il consumo di memoria per i binding e li renderà accessibili a tutte le parti di Qt, non solo a Qt Quick;
- Continuazione dei lavori per ampliare il supporto a linguaggi aggiuntivi, come Python e WebAssembly;
- Ristrutturazione con suddivisione in componenti più piccoli e riduzione delle dimensioni del prodotto di base. Gli strumenti per gli sviluppatori e i componenti specializzati saranno forniti come estensioni, distribuite tramite un nuovo store. Verranno accettate estensioni di Qt da sviluppatori terzi, sia gratuite che a pagamento.
Fonte: opennet.ru
