Lars Knoll, criador do motor KHTML, líder do projeto Qt Project e diretor técnico da Qt Company, sobre os planos para criar o próximo ramo significativo do framework Qt. Após a conclusão da formação da funcionalidade do ramo Qt 5.14, o desenvolvimento será focado na preparação do lançamento do Qt 6, que é esperado para o final de 2020.
O Qt 6 será desenvolvido com atenção para garantir compatibilidade com o Qt 5, mas não se exclui o surgimento de alguns problemas, uma vez que as mudanças de arquitetura previstas e a limpeza não poderão ser implementadas sem a perda de um certo nível de compatibilidade. Para suavizar a transição, algumas funcionalidades do Qt 6 estão previstas para serem incluídas de forma reduzida nas versões Qt 5.14 e Qt 5.15 LTS. Também será preparado um conjunto de ferramentas para simplificar a migração para o Qt 6.
Entre os principais objetivos para o próximo ramo significativo estão a compatibilização da funcionalidade com os requisitos de 2020, a limpeza da base de código e a simplificação do suporte ao projeto. Mudanças esperadas:
- Modernização significativa do QML:
- Suporte à tipagem forte.
- Possibilidade de compilar QML em apresentação em C++ e código de máquina.
- Transferência do total suporte ao JavaScript para opções (o uso de um motor JavaScript completo exige muitos recursos, o que impede o uso de QML em hardware como microcontroladores).
- Abandono da versionação no QML.
- Unificação de estruturas de dados duplicadas em QObject e QML (permite reduzir o consumo de memória e acelerar a inicialização).
- Eliminação da geração de estruturas de dados em tempo de execução em favor da geração em tempo de compilação.
- Ocultação de componentes internos através do uso de métodos e propriedades privadas.
- Integração aprimorada com ferramentas de desenvolvimento para refatoração e diagnóstico de erros durante a compilação;
- Adição de uma nova camada abstrata de Rendering Hardware Interface (RHI) para garantir o uso sem costura de várias APIs gráficas, incluindo OpenGL, Vulkan, Metal e Direct 3D (anteriormente, o Qt estava ligado apenas ao OpenGL). Toda a infraestrutura de renderização existente será convertida para usar RHI, incluindo QPainter, Qt Quick Scenegraph e Qt3D. Também está previsto adicionar o módulo Qt Shader Tools para suporte a várias linguagens de desenvolvimento de shaders e garantir a compilação cruzada de shaders tanto na fase de construção quanto durante a execução do programa;
- Preparação de uma API unificada para criar interfaces de usuário que combinam elementos gráficos 2D e 3D. A nova API permitirá o uso de QML para definir elementos 3D das interfaces sem a necessidade de um formato UIP. Na nova interface para a integração de conteúdo 3D com Qt Quick, planejam resolver problemas como grandes custos operacionais na integração do QML com conteúdo do Qt 3D ou 3D Studio e a impossibilidade de sincronizar animações e transformações em nível de quadros entre 2D e 3D. A renderização conjunta embutida de 2D e 3D será realizada por meio de um novo mecanismo de renderização. A pré-implementação do novo Qt Quick com suporte a 3D é esperada para o lançamento do Qt 5.14;
- Adição de ferramentas para processar recursos gráficos na fase de compilação, por exemplo, para converter imagens PNG em texturas compactadas ou para converter shaders e malhas em formatos binários otimizados para hardware específico;
- Incorporação de um mecanismo unificado para temas e estilos, permitindo que a aparência de aplicativos baseados em Qt Widgets e Qt Quick seja nativa para diferentes plataformas móveis e de desktop;
- Unificação de ferramentas para criação de interfaces de usuário. Para evitar a duplicação de funcionalidades e interromper a oferta de dois produtos separados, espera-se a integração da funcionalidade do Qt 3D Studio no Qt Design Studio, cujas muitas subsistemas e estrutura de conexão de plugins são construídos sobre uma base de código comum com o Qt Creator.
No Qt Design Studio, também planejam proporcionar uma integração de qualidade com pacotes de criação de conteúdo, como Photoshop, Sketch, Illustrator, Maya e 3D Max. As principais linguagens suportadas na ferramenta unificada de desenvolvimento incluem C++, QML e Python. A unificação também implica na possibilidade de acesso, a partir do Qt Creator, aos recursos de design de interfaces, bem como fornecer aos designers de interface capacidades das ferramentas para desenvolvedores, como compilação de projetos ou testes de aplicativos em dispositivos; - Foi decidido usar CMake como sistema de build em vez de QMake. O suporte para compilar aplicativos usando QMake será mantido, mas o próprio Qt será compilado usando CMake. CMake foi escolhido porque esta ferramenta se tornou amplamente popular entre desenvolvedores de projetos em C++ e é suportada em muitos ambientes de desenvolvimento integrados. O desenvolvimento do sistema de build Qbs, que pretendia ser uma alternativa ao QMake, ;
- A transição durante o desenvolvimento para o padrão C++17 (anteriormente utilizava-se C++98). No Qt 6, planejam-se implementar muitos recursos modernos do C++, mas sem perder a compatibilidade retroativa com código baseado em padrões anteriores.
- A possibilidade de usar algumas funcionalidades do C++ oferecidas para QML e Qt Quick. Além disso, será apresentada um novo sistema de propriedades para QObject e classes semelhantes. Um mecanismo para trabalhar com bindings será integrado do QML ao núcleo do Qt, o que permitirá reduzir a carga e o consumo de memória para bindings e torná-los acessíveis a todas as partes do Qt, e não apenas ao Qt Quick;
- Continuação dos esforços para expandir o suporte a linguagens adicionais, como Python e WebAssembly;
- Reestruturação com divisão em componentes menores e redução do tamanho do produto base. Ferramentas para desenvolvedores e componentes especializados serão fornecidos como complementos, distribuídos através de um novo catálogo de loja. Complementos para Qt de desenvolvedores terceiros, tanto gratuitos quanto pagos, também serão aceitos para distribuição.
Fonte: opennet.ru
