Qt 6 nadchodzi.

Qt 6 nadchodzi.

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.

Python3Tutorial #5: Instrukcje warunkowe.

Python3Tutorial #4: Zmienne.

Podstawy.

Zmienna jest jedną z najpopularniejszych koncepcji w świecie programowania. W Pythonie należy ją traktować jak nazwę przypisaną do obiektu. Nie definiujemy jej typu, ani też nie deklarujemy jej przed pierwszym użyciem. Po prostu przypisujemy wartość (obiekt) do nazwy:

x = 44
(więcej…)
Qt 6 nadchodzi.

Co czeka framework Qt w 2018 roku ?

Qt wciąż niesamowicie się rozwija. Równolegle z poprawianiem błędów i tworzeniem nowych funkcjonalności, framework stara się opanowywać nowe, nieznane dotychczas dla niego obszary. Kolejne wersje przynoszą wsparcie dla nowych platform, zarówno systemowych, jak i sprzętowych.

Pod koniec lutego The Qt Company pochwaliło się planami rozwoju na 2018 rok. Postaram się pokrótce pokazać, czego można się spodziewać i na co czekać w obecnym roku.

(więcej…)
C++11 #12: Jak działa semantyka przeniesienia ?

C++11 #12: Jak działa semantyka przeniesienia ?

Referencje do r-wartości.

Semantyka przeniesienia to jedna z kluczowych koncepcji nowoczesnego języka C++, która zadebiutowała w C++11. Sam język potrzebował jednak kilku nowych funkcjonalności, które umożliwiłyby wprowadzenie tej idei w życie.

Podstawą stały się referencje do r-wartości (ang. r-value references).

(więcej…)