Qt 5 zmieniło wszystko
W 2012 roku Qt 5 zostało pokazane światu. Wersja ta była zapowiadana jako naturalna kontynuacja Qt 4, ale wprowadziła też wiele nowości i przez ostatnie lata osiągnęła coś, co można nazwać sukcesem. Ekosystem Qt przekroczył masę krytyczną. Zainteresowały się nim na poważnie największe firmy na tej planecie – od branży technologicznej, przez motoryzacyjną, na przemyśle i elektronice użytkowej kończąc.
Qt 5 przyniosło dedykowane wsparcie dla systemów mobilnych, systemów wbudowanych oraz nowy deklaratywny język QML do tworzenia nowoczesnych, graficznych interfejsów użytkownika. Stało się prawdziwie wieloplatformowe – nie tylko w sensie systemu operacyjnego, ale również platformy sprzętowej.
W zeszłym roku (sierpień 2019) firma prowadząca projekt (The Qt Company) ogłosiła plany opublikowania kolejnej głównej wersji – Qt 6. Stanie się to pod koniec 2020 roku.
Qt 6 goni świat
Qt 5 okazało się przełomem. Ma swoje wielkie zasługi w rozwoju całego środowiska i jego popularyzacji. Nadal jest i będzie rozwijane oraz wspierane. Zaplanowane wydanie Qt 6 nie jest jednak tylko zmianą głownego numeru wersji. Zachowa kompatybilność wstecz z Qt 5, ale nie w stu procentach. Żeby sprostać nowym wyzwaniom, potrzebne są pewne odważne decyzje na poziomie architektonicznym. Potrzebne są poważniejsze porządki – usunięcie przestarzałego kodu i niewspieranych już funkcji, klas i modułów. Potrzebne są wreszcie nowe narzędzia do realizowania wizji, która przez ostatnie 8 lat musiała ewoluować.
Qt zawsze było mocne na desktopach – od tego wszystko się zaczęło. To dlatego Qt 4 zostało zauważone i docenione. Aplikacje desktopowe nadal będą bardzo ważną częścią tego systemu, ale już nie jedyną i nie przeważającą. Qt 5 przyniosło wsparcie dla systemów mobilnych i wbudowanych. Wprowadziło framework w świat internetu rzeczy. Pozwoliło uruchamiać Qt na coraz prostszej i tańszej elektronice. Qt dla mikrokontrolerów – coś kilka lat temu niemożliwego dla tego środowiska – stało się faktem.
Kluczowe wartości
Chcąc wprowadzać zmiany, The Qt Company musiało zdecydować, co pozostanie niezmienne. Jakie cechy całego ekosystemu są dla odbiorców – dla bardzo dużej bazy odbiorców – kluczowe.
Co daje największą wartość i charakteryzuje całe środowisko ? Jest kilka takich rzeczy:
- wieloplatformowość
- skalowalność
- stabilność, kompatybilność i łatwość utrzymania
- najwyższej klasy API, narzędzia i dokumentacja
- duża baza użytkowników (obecnie około miliona programistów)
To jest lista absolutnych priorytetów. Na niej jest i będzie w przyszłości budowane całe środowisko.
Kluczowe zmiany
QML nowej generacji
QML/QtQuick ma ogromny potencjał. Nic tak nie zachęca użytkowników jak możliwość łatwego i intuicyjnego tworzenia GUI, które wygląda znakomicie, działa płynnie i nie potrzebuje dużych zasobów sprzętowych.
Zaplanowane tutaj zmiany są dość poważne i w jakimś sensie przełomowe. Oto one:
- wprowadzenie silnego typowania – ma to uprościć utrzymanie istniejącego kodu źródłowego, wspomóc rozwój narzędzi takich jak IDE oraz uprościć i podnieść jakość generowanego automatycznie kodu
- JavaScript jako opcja – będzie można zrezygnować z narzutu, jakim w pewnych przypadkach jest pełen silnik języka JavaScript – ma to oszczędzić zasoby i przyspieszyć działanie kodu
- usunięcie wersjonowania – a tak naprawdę zwolnienie użytkownika z obowiązku jawnego wskazywania w plikach qml wersji importowanych modułów QML/QtQuick – zmiana podejścia uprości tutaj pracę zarówno programistom frameworka, jak i użytkownikom końcowym
- brak duplikacji struktur danych pomiędzy QObject a QML – ma to przyspieszyć uruchamianie aplikacji oraz zmniejszyć użycie pamięci
- wsparcie dla kompilacji QMLa do kodu C++/kodu natywnego – dzięki wspomnianym powyżej uproszczeniom i wprowadzeniu silnego typowania, możliwa będzie konwersja kodu w QMLu do C++/kodu natywnego – bardzo poprawi to wydajność działania aplikacji
- lepsza integracja narzędzi – czyli dużo lepsze wsparcie dla refaktoryzacji i wykrywania błędów na poziomie kompilacji kodu, co również jest możliwe dzięki wspomnianym powyżej zmianom
Grafika nowej generacji
Rozwój w tej dziedzinie nie pozwala na bierne przyglądanie się sytuacji. Zunifikowanym API dla grafiki 3D w Qt 5 był OpenGL. Dzisiaj jednak mamy zarysowany pewien podział, jeśli chodzi o interfejsy do programowania grafiki 3D. Vulkan jest postrzegany jako następca OpenGLa dla Linuksa, Apple rozwija Metal, a Microsoft ma oczywiście Direct 3D. Qt będzie musiało sprostać tej sytuacji i wspierać wszystkie wspomniane API. Żeby podejść do tego z głową, trzeba będzie stworzyć nową warstwę abstrakcji dla API graficznego. Ma to być Rendering Hardware Interface (RHI).
Ponieważ grafika 3D staje się coraz ważniejsza w procesie tworzenia GUI, nowo tworzony renderer umożliwi łączenie elementów grafiki 2D oraz 3D na jednej scenie. Zostanie zapewnione wsparcie dla wszystkich aspektów używania elemetów 3D w Qt Quick (zagnieżdżanie, animacje, przejścia, itp.).
Celem jest również zunifikowanie silnika stylów, co umożliwi uzyskanie natywnego wyglądu aplikacji na desktopach, systemach mobilnych oraz wbudowanych – niezależnie od tego, czy korzystają z Qt Widgets, czy z Qt Quick.
Jednolite i spójne narzędzia
Qt 6 przyniesie wsparcie dla CMake jako oficjalnego, standardowego i domyślnego systemu budowania aplikacji i samego Qt. QMake nadal będzie utrzymywany i wspierany, ale nie będzie już więcej rozwijany.
QtCreator IDE będzie cały czas intensywnie rozwijane pod kątem wsparcia dla języków C++, QML oraz Python. Będzie również coraz lepiej współpracować z narzędziami do projektowania GUI.
Qt Design Studio oraz Qt 3D Studio zostaną połączone w jedno narzędzie. Nowe Qt Design Studio skupi się na dobrej integracji narzędzi takich jak Photoshop, Sketch czy Illustrator oraz na bezproblemowej współpracy z QtCreator IDE.
C++ API
Qt 5.0 bazowało na standardzie C++98. Bazą dla Qt 6 będzie C++17. Ciężko nazwać to aktualizacją. To jest jak nowy, lepszy świat. Wiele rzeczy trafiło między tymi wydaniami do standardu języka C++ i Qt chce to wykorzystać, nie tracąc oczywiście kompatybilności wstecz. Konsekwentnie upraszczana i usprawniana ma być komunikacja na linii C++ <-> QML.
Nie taki diabeł straszny
Pomimo dużych zmian i wielu nowych pomysłów, Qt 6 kontynuuje to, co zaczęła piąta wersja frameworka. Qt 6 nie będzie binarnie kompatybilne z Qt 5 – wymagana będzie rekompilacja naszego istniejącego kodu z nową wersją frameworka. Dzięki temu możliwe będzie wprowadzenie wielu usprawnień i usunięcie przestarzałego, niepotrzebnego kodu.
Wszysztko wskazuje jednak na to, że na poziomie kodu źródłowego, kompatybilność zostanie zachowana. Nie trzeba się więc obawiać problemów z portowaniem istniejących aplikacji do Qt 6 oraz ich kompilacji.
Qt Framework podąża w kierunku kompletnego wsparcia wielu systemów operacyjnych i platform sprzętowych. Cały czas upraszcza proces tworzenia aplikacji, umożliwiając uruchamianie tego samego kodu na różnych środowiskach docelowych. Nowe oraz istniejące narzędzia mają w jak największym stopniu pomagać w pisaniu i analizowaniu kodu oraz w testowaniu gotowych programów. Mają też maksymalnie ułatwić tworzenie nowoczesnych GUI.
Pierwsze wydanie Qt 6 (6.0) jest zaplanowane na listopad 2020 roku.
No dobra wygląda fajnie
Osobiście nie mogę się doczekać. Rzuć koniecznie okiem na kilka nowych featuerów w samym Qml.