Опубликован план развития функциональности Qt 6
7 августа 2019 года
Ларс Кнолл (Lars Knoll), создатель движка KHTML, руководитель проекта Qt Project и технический директор компании Qt Company, рассказал о планах по созданию следующей значительной ветки фреймворка Qt. После завершения формирования функциональности ветки Qt 5.14 разработка будет сфокусирована на подготовке выпуска Qt 6, который ожидается в конце 2020 года.
Qt 6 будет развиваться с оглядкой на обеспечение совместимости с Qt 5, но не исключено возникновение отдельных проблем, так как намеченные архитектурные изменения и чистку невозможно будет реализовать без потери определённого уровня совместимости. Для сглаживания перехода некоторые возможности Qt 6 планируется в сокращённом виде включить в состав выпусков Qt 5.14 и Qt 5.15 LTS. Также будет подготовлен инструментарий для упрощения миграции на Qt 6.
Среди основных целей для следующей значительной ветки называется приведение функциональности в соответствие с требованиями 2020 года, проведение чистки кодовой базы и упрощение сопровождения проекта. Ожидаемые изменения:
- Существенная модернизация QML:
- Поддержка строгой типизации.
- Возможность компиляции QML в представление на C++ и машинный код.
- Перевод полной поддержки JavaScript в разряд опций (использование полнофункционального JavaScript-движка требует больших ресурсов, что мешает применению QML на таком оборудовании, как микроконтроллеры).
- Отказ от версионирования в QML.
- Унификация структур данных, дублирующихся в QObject и QML (позволит сократить потребление памяти и ускорить запуск).
- Уход от генерации структур данных во время выполнения в пользу генерации во время компиляции.
- Скрытие внутренних компонентов через использование приватных методов и свойств.
- Улучшенная интеграция с инструментами разработки для рефакторинга и диагностики ошибок во время компиляции;
- Добавление нового абстрактного слоя Rendering Hardware Interface (RHI) для обеспечение бесшовного использования различных графических API, включая OpenGL, Vulkan, Metal и Direct 3D (раньше Qt был завязан только на OpenGL). На использование RHI будет переведена вся имеющаяся инфраструктура рендеринга, включая QPainter, Qt Quick Scenegraph и Qt3D. Также планируется добавить модуль Qt Shader Tools для поддержки различных языков разработки шейдеров и обеспечения кросс-компиляции шейдеров как на этапе сборки, так и во время выполнения программы;
- Подготовка унифицированного API для создания интерфейсов пользователя, сочетающих элементы 2D и 3D графики. Новый API позволит использовать QML для определения 3D-элементов интерфейсов без задействования формата UIP. В новом интерфейсе для интеграции 3D-контента с Qt Quick планируют решить такие проблемы, как большие накладные расходы при интеграции QML с контентом из Qt 3D или 3D Studio, и невозможность синхронизации анимации и преобразований на уровне отдельных кадров между 2D и 3D. Совместная в вложенная отрисовка 2D и 3D будет реализована при помощи нового движка рендеринга. Предварительная реализация нового Qt Quick с поддержкой 3D ожидается в выпуске Qt 5.14;
- Добавление инструментов для обработки связанных с графикой ресурсов на этапе компиляции, например, для преобразования PNG-изображений в сжатые текстуры или для конвертации шейдеров и мешей в оптимизированные бинарные форматы для конкретного оборудования;
- Встраивание унифицированного движка для тем оформления и стилей, позволяющего добиться внешнего вида приложений на базе Qt Widgets и Qt Quick, родного для разных мобильных и настольных платформ;
- Унификация инструментов для создания интерфейса пользователя. Для исключения дублирования функциональности и прекращения поставки двух отдельных продуктов, ожидается интеграция функциональности Qt 3D Studio в Qt Design Studio, многие подсистемы которого и фреймворк подключения плагинов построены на единой с Qt Creator кодовой базе.
В Qt Design Studio также планируют обеспечить качественную интеграцию с пакетами для создания контента, такими как Photoshop, Sketch, Illustrator, Maya и 3D Max. В качестве основных языков, поддерживаемых в унифицированном инструментарии для разработки, называются C++, QML и Python. Унификация также подразумевает возможность обращения из Qt Creator к средствам проектирования интерфейса, и предоставление дизайнерам интерфейса возможностей из инструментов для разработчиков, например, компиляции проекта или тестирования приложения на устройстве;
- В качестве системы сборки решено использовать CMake вместо QMake. Поддержка сборки приложений при помощи QMake будет сохранена, но сам Qt будет собираться с использованием CMake. CMake выбран, так как данный инструментарий получил широкое распространение в среде разработчиков проектов на C++ и поддерживается во многих интегрированных средах разработки. Разработка сборочной системы Qbs, которая претендовала на роль замены QMake, прекращена;
- Переход при разработке на стандарт C++17 (ранее использовался C++98). В Qt 6 планируют реализовать поддержку многих современных возможностей C++, но без потери обратной совместимости с кодом на основе прошлых стандартов.
- Возможность использования из C++ некоторой функциональности, предлагаемой для QML и Qt Quick. В том числе, будет представлена новая система свойств для QObject и подобных классов. Из QML в ядро Qt будет интегрирован движок для работы с биндингами, что позволит снизить нагрузку и потребление памяти для биндингов и сделать их доступными для всех частей Qt, а не только для Qt Quick;
- Продолжение работы по расширению поддержки дополнительных языков, таких как Python и WebAssembly;
- Реструктуризация с разбиением на более мелкие составные части и сокращением размера базового продукта. Инструменты для разработчиков и специализированные компоненты будут поставляться в виде дополнений, распространяемых через новый каталог-магазин. Для распространения будут приниматься и дополнения к Qt от сторонних разработчиков, как бесплатные, так и платные.
Источники
править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.