한국어
Qt
 

Qt 6 기술 비전 (Technical vision for Qt 6)

 

 

7년 전 Qt 5가 출시되었습니다. 그 이후로, 우리 주변 세계에서 많은 것들이 바뀌었고, 이제 새로운 major 버전에 대한 비전을 정의 할 때입니다. 이 블로그 게시물은 Qt 6를 정의하는 가장 중요한 사항을 설명합니다.

Qt 6은 Qt 5 시리즈에서 수행한 작업의 연속이며 사용자에게 지장을 주지 않아야 합니다. 그러나 새로운 메이저 버전은 현재 Qt 5 시리즈에서 할 수 있는 것보다 새로운 기능, 기능을 구현하고 현재와 미래의 요구 사항을 더 잘 지원할 수있는 자유를 제공합니다.

아래에서 보다 상세하게 설명되는 바와 같이, Qt 6은 Qt 5 시리즈와의 큰 호환성을 목표로 할 것이다. 우리는 여전히 Qt 5의 새로운 버전을 연구하고 있으며 Qt 6을 정의하는 기능 중 일부를 Qt 5.14 및 Qt 5.15 LTS로 약간 축소하는 것을 목표로하고 있습니다. Qt 5.14의 기능 정지로 더 많은 R&D 초점이 Qt 6으로 전환될 예정이며, 2020년 말까지 첫번째 릴리스를 위해 Qt 6.0을 준비하는 것을 목표로 하고 있습니다. 새로운 기능에 대해 살펴보기 전에 또한 사용자가 바꾸고 싶지 않은 것을 정의하기 위해 사용자를 위한 Qt의 핵심 가치 중 일부를 기억하십시오.

 

Qt가 사용자에게 소중한 이유는 무엇입니까?

Qt는 다양한 시장에서 사용되고 있는 수평 제품(horizontal product)입니다. Qt가 고객과 사용자에게 제공하는 핵심 가치는 다음과 같습니다.

  • 크로스 플랫폼(cross-platform) 특성으로, 사용자는 하나의 기술과 단일 코드 기반으로 모든 데스크탑, 모바일 및 임베디드 플랫폼에 응용 프로그램을 배포할 수 있습니다
  • 저가형 단일 목적 장치에서 고급 복합 데스크탑 응용 프로그램 또는 연결된 시스템에 이르는 확장성(scalability)
  • 세계적 수준의 API 및 도구 및 문서화로 응용 프로그램 및 장치 작성이 간소화됩니다.
  • 유지 관리성(maintainability), 안정성(stability) 및 호환성(compatibility)으로 최소한의 노력으로 큰 코드 기반을 유지할 수 있습니다.
  • 백만 명 이상의 사용자가 있는 대규모 개발자 에코 시스템(ecosystem)

Qt의 새로운 버전은 제품을 새로운 시장 요구에 맞게 조정하면서 위의 5가지 항목을 우리가 하고있는 일의 중심에 두어야합니다.

데스크톱 시장은 우리 제품의 근간이며 Qt에게는 강력하고 중요한 시장입니다. 이곳은 대부분의 사용자가 Qt와 처음 접촉하여 공구(tooling)의 기초를 형성하는 곳입니다. 건강을 유지하고 성장하는 것은 다른 시장에서도 성장할 수있는 전제 조건입니다.

임베디드 및 연결된 장치는 우리가 가장 큰 성장을 이루고 있는 곳입니다. 터치 스크린은 장치 수가 기하 급수적으로 증가하지만 이러한 장치의 하드웨어 가격에 대한 압박이 가중되고 있습니다. 중소형 터치 스크린과 결합된 저가형 칩셋, 마이크로 컨트롤러는 어디에서나 사용됩니다. 이러한 장치의 대부분은 기능이 비교적 단순하지만 세련되고 매끄러운 사용자 인터페이스가 필요합니다. 이러한 대량의 장치가 만들어 질 것이며, 확장성 약속을 이행할 수 있도록 제품으로 해당 공간을 목표로 삼을 수 있어야 합니다.

동시에, 디바이스 스펙트럼의 최상위에 있는 사용자 인터페이스는 수천 개의 서로 다른 화면과 많은 응용 프로그램을 포함하여 복잡성이 계속 증가할 것입니다. 2D 및 3D 요소를 하나의 사용자 인터페이스로 병합하는 것은 일반적인 증강 현실 및 가상 현실의 사용과 마찬가지로 일반적입니다.

인공 지능의 요소는 응용 프로그램 및 장치에서 더 일반적으로 사용되며 이러한 요소와 쉽게 통합할 수 있는 방법이 필요합니다.

커넥티드 디바이스의 수가 급격히 증가하고 사용자 경험에 대한 요구가 훨씬 높아짐에 따라 애플리케이션 및 디바이스 생성을 단순화하는 세계적 수준의 도구(world-class tooling)에 집중하는 것이 더욱 중요해졌습니다. UX 디자이너를 개발 워크 플로에 통합하는 것이 우리의 목표 중 하나이지만 사용자의 삶을 단순화하려는 다른 영역도 많이 있습니다.

Qt 6은 Qt의 새로운 주요 버전이 될 것입니다. 이러한 새로운 메이저 버전의 주요 목표는 2020년 이후의 요구 사항에 대해 Qt를 준비하고 코드베이스를 정리하고 유지 관리하기 쉽도록하는 것입니다. 따라서 Qt 내에서 아키텍처 변경이 필요하고 Qt 5.x 의 일부 호환성을 유지하지 않으면 완료할 수 없는 항목에 중점을 둡니다.

다음은 향후 몇 년 동안 Qt에서 변경해야 할 주요 변경 사항 중 일부입니다.

 

차세대 QML

QML과 Qt Quick은 지난 몇 년간 우리의 성장을 촉진한 주요 기술이었습니다. 이러한 기술을 사용하여 사용자 인터페이스를 작성하는 직관적인 방법은 당사 제품의 고유한 판매 지점입니다.

그러나 Qt 5 용으로 작성된 QML에는 몇 가지 단점과 한계가 있습니다. 이는 Qt 6으로 구현할 계획이 크게 개선될 가능성이 있음을 의미합니다. 여기에서 계획된 주요 변경 사항은 다음과 같습니다.

강력한 타이핑(strong typing)을 소개합니다. 타이핑이 약하면 사용자가 코드베이스에 큰 변화를 적용하기가 어렵습니다. 강력한 유형의 시스템을 사용하면 IDE 및 기타 도구가 이 작업에서 사용자를 지원하고 유지 관리를 대폭 간소화할 수 있습니다. 또한 더 나은 성능의 코드를 생성하고 오버헤드를 줄일 수 있습니다.

JavaScript를 QML의 선택적 기능으로 만드십시오. QML을 사용할 때 완전한 JavaScript 엔진을 사용하면 문제가 복잡해질 수 있으며 특히 마이크로 컨트롤러와 같은 저가형 하드웨어를 대상으로 할 때 오버헤드가 발생합니다. 그러나 많은 사용 사례에서 매우 유용합니다.

QML 버전 관리를 제거하십시오. QML에서 특정 조회 규칙을 단순화하고 컨텍스트 속성의 작동 방식을 변경하여 QML의 버전 관리 필요성을 제거 할 수 있습니다. 결과적으로 QML 엔진을 크게 단순화하고 Qt Quick 유지관리 작업을 크게 단순화하고 사용자의 QML 및 Qt Quick 사용을 단순화합니다.

QObject 와 QML 간의 데이터 구조 중복 제거 현재 메타 오브젝트 시스템과 QML 간에 일부 데이터 구조가 복제되어 시작 성능이 저하되고 메모리 사용량이 증가합니다. 이러한 데이터 구조를 통합함으로써 이러한 오버헤드를 대부분 줄일 수 있습니다.

런타임 생성 데이터 구조를 피하십시오. 이는 복제된 데이터 구조 중 많은 부분이 현재 런타임에 생성되는 이전 시점과 관련이 있습니다. 컴파일 타임에 대부분을 생성하는 것이 가능해야 합니다.

효율적인 C++ 및 네이티브 코드로 QML 컴파일을 지원합니다. 강력한 타이핑과 간단한 조회 규칙을 통해 QML을 효율적인 C++ 및 네이티브 코드로 변환하여 런타임 성능을 크게 향상시킬 수 있습니다.

구현 세부 사항 숨기기 지원 'Private' method들 및 property들은 QML 구성 요소에서 데이터 및 기능을 숨길 수 있는 오랜 시간 요구 사항이었습니다.

더 나은 도구(tooling) 통합. QML의 현재 코드 모델은 종종 불완전하여 리팩토링 및 컴파일 타임에 오류 감지가 불가능합니다. 위의 변경 사항으로 인해 C++ 와 경쟁할 수 있는 컴파일 타임 진단 및 향상된 리팩토링 지원을 제공 할 수 있어야 합니다.

 

차세대 그래픽

Qt 5.0 을 수행한 이후로 그래픽 영역에서 많은 사항이 변경되어 경쟁력을 유지하기 위해 그래픽 스택을 대폭 변경해야 했습니다.

Qt 5 에서는 OpenGL을 3D 그래픽을 위한 통합 API 로 사용했습니다. 그 이후로 많은 새로운 API 가 정의되었습니다. Vulkan 은 Linux 에서 OpenGL 의 후계자로, Apple 은 Metal 을 추진하고 있으며, Microsoft 는 Direct 3D 를 보유하고 있습니다.

이는 향후 Qt가 모든 API와 원활하게 작동해야 함을 의미합니다. 이를 가능하게하려면 RHI(Rendering Hardware Interface) 라고하는 그래픽 API(플랫폼 통합을 위한 QPA 같은)를 추상화하는 새로운 계층을 정의해야 합니다. 모든 렌더링 인프라(QPainter, Qt Quick Scenegraph 및 3D 지원)를 해당 계층의 기반으로 해야 합니다.

다른 그래픽 API 세트는 또한 다른 쉐이딩(shading) 언어를 지원해야 합니다. Qt Shader Tools 모듈은 컴파일과 런타임에 쉐이더를 크로스 컴파일하는 데 도움이 됩니다.

3D는 점점 더 중요한 역할을 수행하고 있으며 현재 제공되는 제품에는 2D 및 3D 요소가 모두 포함된 UI를 만들기 위한 통합 솔루션이 없습니다. Qt 3D 또는 3D Studio의 컨텐츠와 QML을 통합하는 것은 현재 번거롭고 일부 성능 오버헤드가 발생합니다. 또한 2D와 3D 컨텐츠간에 프레임 단위로 애니메이션과 전환을 동기화 할 수 없습니다.

Qt Quick과 3D 컨텐츠의 새로운 통합은 이 문제를 해결하는 것을 목표로 합니다. 이 경우, 완전히 새로운 렌더러(renderer)는 2D와 3D 컨텐츠를 함께 렌더링하고 둘 사이에 임의의 중첩(arbitrary nesting)을 지원합니다. 그러면 QML 이 3D UI 를 위한 UI 정의 언어로 바뀌고 UIP 형식이 필요하지 않습니다. 우리는 Qt 5.14 에서 이미 3D 를 지원하는 '새로운' Qt Quick 의 기술 미리보기를 제공할 것입니다. 자세한 정보는 별도의 블로그 게시물에서 제공됩니다.

마지막으로 그래픽 자산(graphical assets)을 위한 적절한 파이프 라인을 통해 새로운 그래픽 스택(graphics stack)을 지원을 위하여, 타겟 하드웨어 및 사용 사례에 대해 컴파일 타임(compile time)에 준비를 허용합니다. PNG 파일을 압축된 텍스처(textures)로 변환하고, 많은 파일을 텍스처 아틀라스(texture atlases)로 컴파일하고, 쉐이더(shaders)와 메시(meshes)를 최적화된 이진 형식 등으로 변환합니다.

우리는 또한 Qt 6에 통합 테마/스타일링 엔진(theming/styling engine)을 도입하는 것을 목표로 합니다. 이를 통해 데스크탑 및 모바일 플랫폼에서 Qt 위젯과 Qt Quick 모두에 고유한 모양과 느낌을 얻을 수 있습니다.

 

일관되고 통합된 도구(tooling)

Qt 3D Studio 와 Qt Design Studio 에서는 사용자 인터페이스를 생성하기 위한 그래픽 툴링이 두 가지로 분리되었습니다. 또한 Qt 3D Studio는 중복된 노력을 없애기 위하여 나머지 Qt leading과 약간 분리됩니다.

Qt 3D Studio에서 필요한 기능을 다시 Design Studio로 병합하여 통합할 것입니다. Design Studio는 Qt Creator와 많은 코드 및 응용 프로그램 / 플러그인 프레임 워크를 공유하여 훌륭한 디자인 경험을 제공하고 디자이너와 개발자 간의 격차를 해소 할 수있는 도구를 제공합니다.

디자인 공구(design tooling)는 Photoshop, Sketch, Illustrator, Maya, 3D Max 등과 같은 컨텐츠 제작 툴과도 잘 통합되어야 합니다.

개발자 공구(developer tooling)는 C++, QML 및 Python에 대해 동급 최고의 지원을 제공할 수 있도록 많은 집중과 주의가 필요합니다. 통합 툴링 오퍼링은 개발자가 Qt Creator 내에서 설계 기능을 쉽게 사용할 수 있으며, UX 디자이너는 프로젝트 컴파일 또는 장치 내 테스트와 같은 개발자 툴링의 기능을 활용할 수 있음을 의미합니다.

Qt 5에서 사용되는 빌드 시스템으로서 QMake 에는 많은 단점과 한계가 있습니다. Qt 6의 경우 CMake 를 표준 타사 빌드 시스템으로 사용하여 Qt 자체를 빌드하는 것이 목표입니다. CMake는 C++ 세계에서 가장 널리 사용되는 빌드 시스템이므로 더 나은 통합이 필요합니다. 우리는 QMake에서 사용자를 계속 지원하지만 더 발전 시키거나 Qt 프레임 워크 자체를 구축하는 데 사용하지는 않을 것입니다.

 

C++ API 향상

C++ 은 지난 몇 년 동안 많은 변화를 겪었습니다. 우리는 Qt 5.0을 C++ 98 에 기반을 두어야했지만 이제 Qt 6을 위해 C++ 17 에 의존할 수 있습니다. 이는 C ++ 이 Qt 5를 수행 할 때 사용할 수 없었던 많은 기능을 제공한다는 것을 의미합니다. Qt 6의 목표는 이전 버전과의 호환성을 유지하면서이 기능과 더 잘 통합하는 것입니다.

Qt 6 의 경우 QML 및 Qt Quick에 도입된 기능 중 일부를 C++ 에서 사용할 수 있도록하는 것이 목표입니다. 우리는 QObject 및 관련 클래스에 대한 새로운 속성 시스템을 도입하고 QML 의 바인딩 엔진을 Qt의 핵심에 통합하여 C++ 에서 사용할 수 있도록 합니다. 새로운 속성 시스템과 바인딩 엔진은 바인딩에 대한 런타임 오버헤드 및 메모리 소비를 크게 줄이고 Qt Quick뿐만 아니라 Qt의 모든 부분에서 액세스 할 수 있게 합니다.

 

언어 지원

Qt 5.12 에서는 Python 지원이 도입되었으며 WebAssembly 용 Qt 를 통해 브라우저를 새로운 플랫폼으로 추가했습니다. 크로스 플랫폼 포커스를 유지하고 확장하는 것은 6.0이 출시된 후 Qt 6 시리즈의 중요한 부분이 될 것입니다.

 

Qt 5와의 호환성 및 점진적 개선

이전 버전과의 호환성은 매우 중요하며 Qt 6을 개발할 때 주요 요구사항입니다. 프레임워크를 사용하여 작성된 수십억 줄의 코드가 있고 해당 코드가 호환되지 않는 경우 사용자 비용이 발생합니다. 또한 Qt 6으로의 변경 작업이 사용자에게 더 많은 작업을 요구할수록, Qt 6의 채택 속도가 느려져 Qt 5의 마지막 버전을 유지하는 데 더 많은 비용이 소요됩니다.

따라서 사용자 코드베이스에서 컴파일 타임 또는 런타임 오류를 유발하는 방식으로 Qt를 중단하지 않아야 합니다. 호환성을 중단해야 하는 경우 런타임시 자동 중단보다 컴파일 타임 오류(compile-time error)가 선호됩니다. (감지하기가 훨씬 더 어렵습니다).

더 이상 사용되지 않는 Qt 부분을 제거해야 하지만 사용자에게 필요한 기능이 있는지 확인해야 합니다. 즉, Qt 위젯 및 많은 사용자가 사용하는 기타 부품과 같은 주요 기능은 물론 계속 사용할 수 있습니다.

우리는 Qt 5 시리즈에서 할 수 없었던 핵심 클래스 및 기능에 대한 많은 점진적 개선을 계획하고 있습니다. 전체 소스 호환성을 유지하는 것이 목표이지만 Qt 6과의 이진 호환성(binary compatibility)을 깨뜨릴 수 있기 때문에 Qt 5에서는 불가능했던 많은 정리 및 개선 작업을 수행할 수 있습니다.

그럼에도 불구하고 우리는 앞으로 나아가야 하며 Qt 6에서는 일부 집 청소(house cleaning)가 필요합니다. 우리는 Qt 5에서 더 이상 사용되지 않는 대부분의 기능(함수, 클래스 또는 모듈)을 제거합니다.이 집 청소는 개발자의 시간을 절약 해줍니다. 장기적으로 유지 관리되고 현재 코드베이스에 더 집중할 수 있습니다.

그러나 더 이상 사용되지 않는 부품에서 이식하는 것은 가능한 한 간단해야 하며 사용자는 Qt 5.15 LTS를 사용하여 점진적으로 이 작업을 수행 할 수 있습니다. 우리의 목표는 Qt 6이 Qt 5.15 LTS와 충분히 호환되므로 동시에 두 버전에 대해 컴파일 할 수있는 큰 코드 기반을 쉽게 유지할 수 있다는 것입니다.

 

시장 및 기술 제품 구조

Qt 프레임워크 및 도구를 개선하는 것 외에도 컴포넌트 및 개발 도구를 위한 새로운 시장을 창출하는 것을 목표로 합니다. 시장은 소비자를 대상으로 하지 않고 애플리케이션과 임베디드 장치를 개발하고 설계하는 직접 사용자에게 초점을 맞출 것입니다. 따라서 Qt 생태계의 중심 집결 지점이 될 것입니다. 또한 타사에 Qt에 추가한 내용을 게시 할 수 있는 공간을 제공하여 무료 및 유료 콘텐츠를 모두 허용합니다.

Qt는 지난 몇 년 동안 새로운 버전을 제공하는 것이 주요 과제가 될 정도로 많이 성장했습니다. Qt 6을 사용하면 제품 오퍼링을 재구성하고 필수 프레임 워크 및 툴링을 포함하는 더 작은 코어 제품을 가질 수 있습니다. 우리는 마켓 플레이스를 사용하여 핵심 Qt 제품과 긴밀하게 결합된 번들이 아닌 애드온 프레임 워크 및 도구를 제공할 것입니다. 이를 통해 제공시기와 방법에 대한 추가 유연성을 제공하고 일부 애드온의 출시 일정을 분리 할 수 ​​있습니다.

 

의견을 보내주십시오.

기술 비전은 Qt 6의 첫 번째 릴리스까지 계속 발전할 것입니다.이 문서는 다음 버전의 Qt에서 가장 중요한 많은 부분을 담고 있다고 믿지만 아직 완전하지는 않습니다. 더 많은 아이디어가 있다면 Qt 6의 개발 및 Qt의 개방형 거버넌스 모델을 통해 관련 토론에 참여하십시오.

https://www.qt.io/contribute-to-qt

번호 제목 글쓴이 날짜 조회 수
공지 Qt프로그래밍(QtQuick) Beginner를 위한 글 읽는 순서 운영자 2019.01.05 91489
120 Q_D매크로와 d-pointer file makersweb 2019.05.07 1563
119 Qt기반의 오픈소스 프로젝트들 makersweb 2019.05.15 6453
118 QtSerialPort를 사용한 시리얼(Serial)통신 [3] makersweb 2019.05.21 13646
117 QML에서 멀티 스레드(multithreading) 프로그래밍 file makersweb 2019.05.25 3294
116 QtCreator Design으로 GUI만들기 (QML로 만드는 Hello World -2) [1] file makersweb 2019.05.26 16479
115 QtInstallerFramework로 온라인 설치프로그램(Online Installer)만드는 방법 [4] file makersweb 2019.05.28 7034
114 QML 강좌 - 동적 Listing (ListView) file makersweb 2019.06.01 11117
113 Qt Quick Controls 2사용 및 스타일 설정 file makersweb 2019.06.07 7073
112 Qt Creator에서 임베디드 장치로 deploy설정(Custom Process Step) file makersweb 2019.06.15 3006
111 QML, 이미지, 폰트등을 바이너리 리소스로 만들기 makersweb 2019.06.24 4364
110 Qt기반의 오픈소스 프로젝트들 - 2 운영자 2019.07.21 4780
109 [Qt] Google Play의 향후 요구 사항을 준수하는 방법 [2] j2doll 2019.07.29 1651
108 [Qt News] Qt6 Git 개발 초기 단계 시작하기 j2doll 2019.08.02 3085
» [Qt News] Qt 6 기술 비전 (Technical vision for Qt 6) [2] j2doll 2019.08.08 2807
106 열거형(enum)을 QML에서 사용하는 방법과 문자열(QString)로 얻기 makersweb 2019.08.20 4819
105 [Qt News] Qt for Python을 위한 기술 비전 j2doll 2019.08.20 2343
104 MCU용 Qt에 대해서 makersweb 2019.08.22 2562
103 QSocketNotifier로 파일 디스크립터의 활동감지 makersweb 2019.08.28 2555
102 C++로 구현된 모델을 QML의 ListView에서 참조 file makersweb 2019.09.07 5841
101 컨테이너에 적재된 객체를 편리하게 삭제하기 makersweb 2019.09.18 2366